Search wiring.org.co:

This example is for Wiring version 0024+. If you have a previous version, use the examples included with your software. If you see any errors or have comments, please let us know.

Supports as many analog inputs and analog PWM outputs as possible.
This example code is in the public domain.

    #include <Firmata.h>

    byte analogPin;

    void analogWriteCallback(byte pin, int value)
    {
        pinMode(pin,OUTPUT);
        analogWrite(pin, value);
    }

    void setup()
    {
        Firmata.setFirmwareVersion(0, 1);
        Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
        Firmata.begin(57600);
    }

    void loop()
    {
        while(Firmata.available()) {
            Firmata.processInput();
        }
        for(analogPin = 0; analogPin < TOTAL_ANALOG_PINS; analogPin++) {
            Firmata.sendAnalog(analogPin, analogRead(analogPin));
        }
    }