Friday, November 16, 2007

Touchpad + Arduino + Cocoa + Quartz

I bought a LCD off eBay about a year ago with a 4 wire touchscreen. Unfortunately, I'm unable to find the LCDs specs, but I'm still able to use the touchpad. One axis of the touchscreen is connected to the Arduino, which performs input, smoothing, and serial output. I modified the AMSerial Cocoa application from "Harmless Cocoa" ( ) to control a Quartz viewer with the incoming serial data.

The Cocoa application. I am a little unclear on USB drivers and how the AMSerial software works, so the Arduino application must be open with the serial monitor running in order to function. Right now this project is in the 'It works but I'm not really sure why' stage.

The touchscreen circuit. I'll post schematics and references later. Only one axis is configured.

Snippet of code converts serial data (0 to 1024) to NSString representation of degrees, then sends data to the qcPatchController.
// data is NSData object taken from serial port. Converted to float
// for rotation
NSString* rotString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

float rotVal = [rotString floatValue]/1024*400;

// Only accept rotation values between 0 degrees and 400 degrees
// Reduces trackpad and serial read errors, since
// 0 <= rotVal <= 400.

if(rotVal > 0 && rotVal < 400)
rotString = [NSString stringWithFormat:@"%f",rotVal];
[qcController setValue:rotString forKeyPath:@"patch.yrot.value"];
lastRotVal = rotVal;

Arduino Single Axis Touchscreen Code (singleaxistouchpad.c)

Arduino Touchpad (modified AMSerial) xCode project

1 comment:

stevecooley said...

hey, are you still doing stuff with objective-c and the arduino? I'm just getting up to speed on obj-c/cocoa and found your page after heading down the same path you did with AMSerial... it would be cool to see if you're doing anything along these lines still.