Controlling an Arduino With Cocoa (Mac OS X) or C# (Windows)

by computergeek in Circuits > USB

80498 Views, 78 Favorites, 0 Comments

Controlling an Arduino With Cocoa (Mac OS X) or C# (Windows)

100_4174.JPG
 No I'm not talking about controlling an Arduino with a chocolate bar or cocoa powder. I'm talking about the programming language, Objective-C. So what is cocoa? Cocoa is a set of frameworks written in the programming language of Objective-C for Mac OS X. No there isn't a test at the steps so you don't have to worry about remembering all of this. Just know that when I talk about cocoa I'm not trying to make you hungry.

 Now I understand some people are probably wondering why you would want to use Cocoa instead of Processing, the reason I have is: if you use Cocoa over Processing you can have a full Computer Application(e.g. Safari, Mail, iCal) that can have a physical output. (e.g. Lights, motors, servos)

So Have Fun, Work hard, & Play nice! Please ask any questions you have!

Notes:
- This will only work for Mac OS X & Windows
- The source code is attached below.
- If you don't want to code the app, or you don't have xcode, you can find the app for OS X in the source below under: 'Build -> Debug'
- The instructions for Windows are in step 7

Stuff You Need:

100_4166.JPG
Hardware:
- Arduino
- A-B USB Cable
- Computer with Mac OS X

Software:
- Xcode
- Arduino IDE

Coding the App

Picture 1.png
Picture 5.png
Picture 6.png
Picture 7.png
Picture 8.png
Picture 10.png
Picture 11.png
Picture 12.png
Picture 13.png
Picture 15.png
Picture 16.png
Picture 17.png
Picture 18.png
Picture 20.png
Picture 21.png
Picture 22.png
Picture 24.png
Picture 25.png
Picture 28.png
Hopefully this makes sense. If you need help please ask any questions you have.
Note: If you don't want to code the app, or you don't have xcode, you can find the app in the source code download under: 'Build -> Debug'

Create the project:
 1) Open Xcode
 2) Press 'Command + shift + n' This will open the new project dialog
 3) Select 'Cocoa Application' under "Mac OS X -> Applications" Press Next
 4) Call the app what you want. I'm calling mine "Arduino Controller"

Add your class:

 5) Once the project is created, Press 'Command + n'
 6) Select the Objective-C Class option from the Classes option under the Mac OS X section
 7) Call it MainController. Then press finish

Add the code:

 8) Open MainController.h
 9) After the '}' & before the '@end' add the code:


-(IBAction)ledOn:(id)sender;

-(IBAction)ledOff:(id)sender;
 

 10) Open MainController.m
 11) After the code ''@implementation MainController" & before the '@end' add the code:

 

-(IBAction)ledOn:(id)sender{

popen("echo i > /dev/tty.usbserial-A6006hmi", "r");

}

 

-(IBAction)ledOff:(id)sender{

popen("echo o > /dev/tty.usbserial-A6006hmi", "r");

}

Finishing The Coding:

12) Press 'Command + b' & press save all
13) Double click on MainWindow.xib. It is located under Resources

14) Interface Builder will open

Designing the GUI (Graphic User Interface)

Picture 15.png
Picture 16.png
Picture 17.png
Picture 24.png
Picture 18.png
Picture 20.png
Picture 21.png
Picture 22.png
Picture 25.png
Picture 26.png
Picture 28.png
If you have questions please ask them!

Creating the interface:
1) With interface builder open, find the buttons. Pick a style you like & drag 2 of them over to the window
2) Double click on them to rename one "On" & the other "Off"
3) Resize the window if you want
4) In the library find the thing that looks like a blue cube (NSObject) & drag it to the window with the list of files
5) Click on the object you just added to the window
6) Press 'Command + 6' to open the Identity Inspector
7) Under the section 'Class' type MainController
8) Press 'Command + 5' to open the Connections Inspector
9) Click & drag the little circle to each of the respective buttons. (e.g. ledOn to the On button)
10) Save & close Interface builder
11) Press "Build & Go" In Xcode to run the cocoa app

Programming the Arduino

Picture 1.png
Picture 2.png
Uploading the sketch to your arduino:
1) Open the .pde file, in the source download, in the Arduino IDE
2) Connect your arduino & press Upload to I/O Board
3) Once the file is uploaded open the serial monitor
4) Go to the Arduino Controller program. If it's not running open it.
5) You can now use the On & Off buttons to control the led built in on pin 13 the arduino

Using, Notes, & More Ideas

Picture 3.png
To use the controller, make sure the serial monitor in the Arduino IDE is running. This is important! 
To use the app you can either press build & go in xcode or find the app in the xcode project under:
'Build -> Debug'

 Notes:
- This will only work on Mac OS X
- The Source code is attached on the first step.
- If you don't want to code the app, or you don't have xcode, you can find the app in the source code under: 'Build -> Debug'

Ideas:
- Make it so there are two buttons that control a servo's rotation
- Make a small piano
- Make a physical output for your mac
- Make a pan & tilt webcam

How This Works

In the cocoa application there are 2 methods, ledOn & ledOff, that are activated by the pushing of the buttons. Within each of those methods there is a line of code that looks like this:
popen("echo i > /dev/tty.usbserial-A6006hmi", "r");
This code sends the letter i to the Serial port: /dev/tty.usbserial-A6006hmi which is received by the arduino

With in the arduino program there is the code:
if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.read();
    if(incomingByte == 105){
      digitalWrite(ledPin, HIGH);
    }
    else if(incomingByte == 111){
      digitalWrite(ledPin, LOW);
    }
This takes the decimal value from the sent character on the serial port connection. If it is a i then it turns the led on if it is a o it turns it off. 

For the Arduino to receive the signal from the cocoa app the serial monitor in the Arduino IDE needs to be open.

If this doesn't make sense it's fine. This is kind of a reference if you want to expand the functionality of the program.

Coding in C# (Windows)

untitled.bmp
untitled1.bmp
untitled2.bmp
untitled3.bmp
untitled4.bmp
untitled5.bmp
untitled6.bmp
untitled7.bmp
untitled8.bmp
 Well I finally got the windows part done!! It turns out you don't have to leave the Adruino IDE open when you use C# for programming. You need either Visual Studio or Visual C# express (Free). If you don't want to write the app the setup is included in the source code file at the intro. I would NOT recommend trying to write this program if you don't have experience writing code in C#.

Here are the steps:

Picture 1) Create a new project
Picture 2) Choose "Windows Form Application" & Name it what you want
Picture 3)
This is what you should have
Picture 4)
Find the button in the Toolbox
Picture 5) 
Get 2 buttons & drag them to the window
Picture 6)
Left click on the first one. Under properties, go to title & rename it "On"
Picture 7)
Rename the second button & resize the window
Picture 8)
Select both of the buttons & double click them to create methods for them
Picture 9)
Paste in the code attached below