Naturally, there are a few undocumented easter eggs hidden on the TouchShield Slide too :-)

How does it work?

The TouchShield Slide snaps on top of the Arduino, Duemilanove or Mega, by slotting into the pins on the digital side, analog side, and power port. The power pins provide voltage to the shield, and power the OLED screen. The Digital pins allow the Arduino to send and receive serial commands to and from the TouchShield Slide. This is helpful, for instance, if you have a sensor connected to the Arduino, and you wanted to send the values of the sensor to the TouchShield Slide to display as bar graphs.

Controlling OLED's is not an easy thing to do, and in fact, if the Arduino were to try to control an OLED directly by itself, it would basically use up all of the programming capability of the Arduino, and leave no computation left over to do anything else (like poll sensors or blink LEDs or read switches). So to ease the load on the Arduino, the TouchShield Slide has it's own processor on the backside that basically acts as a graphics processor. It takes over all the heavy duty processing from the Arduino, and leaves the Arduino untouched (or at least very minimally touched).

How do I program it?

The first thing to understand is that you have to program the TouchShield Slide separately from the Arduino. That means, you place the TouchShield Slide on top of the Arduino, and then you download the IDE for Windows here or for Mac here.

This IDE is called the "Antipasto Arduino IDE", and is specially updated from the original Arduino IDE to allow code to be written and programmed and downloaded to the TouchShield Slide. Here is a sample "hello world" program for the TouchShield Slide:void setup(){background(0,0,0); //this paints the whole background blackstroke(0,0,255); //the outline of the next shape I draw will be bluefill(0,0,255); //the inside fill of the next shape I draw will be blue}

After you compile the code above (which is a lot like how you program code for the Arduino, except you just have to select "TouchShield Slide" from the boards menu), and plug in the USB port from the computer to the Arduino, you then have to press the tiny little button on the side of the TouchShield Slide, which "resets" the shield, and puts it into a mode of waiting for code to come from the PC. The you press the "program" or "download" button in the Arduino IDE, and the code gets downloaded to the Slide. When it's done downloading, the TouchShield automatically resets itself, and the program you wrote starts running.

How does it talk to the Arduino?

The TouchShield Slide has a set of functions built in to it that make it easy to send data back and forth between the TouchShield and the Arduino.

A quick side note, iamshadowlord has written a nice tutorial on this, which goes into more depth, over here. (Thanks!) For advanced programmers, this is a good example of how to send data back and forth!

So I've tried to simplify it for beginners a little bit by making a simple "HardwareSensor" library that now dramatically simplifies the interface between the Arduino and the TouchShield Slide. It's called HardwareSensor, because I got so many emails from people asking, "How do I send sensor data from the Arduino to the TouchShield Slide?". This is how (here's the link for the reference docs):On the Arduino, you put this code:void setup() { Sensor.begin(19200);}

I'm a noob and confused about how to program the the TouchShield. Does the TouchShield have its own Integrated Devlopment Environment or does it share the Arduino IDE? The link in the article leads to a page that says its no longer on the liquidware site. I'm doing some preliminary research before I buy.

Has anyone out there tried comms in the other direction - ie the TouchShield sending data to the arduino?

I can't get it to work. I can get the simple example given to work, but if I do a role reversal, with the shield sending data to the arduino, the arduino blocks at Sensor.available(). I'm wondering if there is a bug in the available() method that only shows on the arduino?TIAMarc