The Fab Academy Assignment
- Write a user interface for an input &/or output device
I created this simple interface to control turning on and off an LED that is attached to a microcontroller via the serial port on my Mac. I wanted to see if I could get the ControlIP5 (used to create the GUI), Firmata and serial libraries working together before I tried using more complex hardware. I intend to experiment with driving multiple servos and possibly tinkering with bluetooth using the NXT library as an “cheap” way (it’s “cheap” because I already own the Mindstorms hardware) to play around with bluetooth without buying additional bluetooth modules.
The Interface: Default / Initial State:
The interface is simple – the Turn On button turns the light on and the Turn Off button turns it off.
Here’s the Processing code:
/*------------------------------------------------------------------- * Fab Academy -- Module 09: Interface Programming *-------------------------------------------------------------------- * Assignment: Write a user interface for an input &/or output * device. *-------------------------------------------------------------------- * Purpose: This program is a test to get the controlIP5, Firmata, * and serial libraries working together through the serial port. * This program uses a simple button GUI interface to turn on / of an * LED. *-------------------------------------------------------------------- * Anna Kaziunas France - 30 March 2010 * Combined / Modified example code from: * controlIP5 buttons example (included the library download) *------------------------------------------------------------------*/ import processing.serial.*; import cc.arduino.*; import controlP5.*; ControlP5 controlP5; // we have to use controlP5.Button here since there // would be a conflict if we only use Button to declare button b. controlP5.Button b; Arduino arduino; // Variables int ledPin = 11; int buttonValue = 0; int myColor = color(0); void setup() { arduino = new Arduino(this, Arduino.list()[2], 57600); arduino.pinMode(ledPin, Arduino.OUTPUT); size(640,480); smooth(); frameRate(30); controlP5 = new ControlP5(this); controlP5.addButton("Turn_On",255,200,80,100,70); controlP5.addButton("Turn_Off",0,200,160,100,70); println(Arduino.list()); } void draw() { background(myColor); fill(buttonValue); rect(20,20,width-40,height-40); } public void controlEvent(ControlEvent theEvent) { println(theEvent.controller().name()); } // function buttonA will receive changes from // controller with name Turn_On public void Turn_On(int theValue) { println("a button event from Turn_On: "+theValue); myColor = theValue; arduino.digitalWrite(ledPin, Arduino.HIGH); } // function buttonB will receive changes from // controller with name Turn_Off public void Turn_Off(int theValue) { println("a button event from Turn_Off: "+theValue); myColor = theValue; arduino.digitalWrite(ledPin, Arduino.LOW); }
Skills Learned
- I learned how to find, utilize and manipulate additional Processing libraries that enabled me to create a simple user interface from a computer to a physical object (LED).
Tools Used
- Processing, ControlIP5 & Firmata libraries
- Arduino ATTMega, LED