/* * Firmata is a generic protocol for communicating with microcontrollers * from software on a host computer. It is intended to work with * any host computer software package. * * To download a host software package, please clink on the following link * to open the download page in your default browser. * * http://firmata.org/wiki/Download */ /* This firmware supports as many servos as possible using the Servo library * included in Arduino 0017 * * This example code is in the public domain. */ #include #include Servo servos[MAX_SERVOS]; byte servoPinMap[TOTAL_PINS]; byte servoCount = 0; void analogWriteCallback(byte pin, int value) { if (IS_PIN_DIGITAL(pin)) { servos[servoPinMap[pin]].write(value); } } void systemResetCallback() { servoCount = 0; } void setup() { byte pin; Firmata.setFirmwareVersion(FIRMATA_FIRMWARE_MAJOR_VERSION, FIRMATA_FIRMWARE_MINOR_VERSION); Firmata.attach(ANALOG_MESSAGE, analogWriteCallback); Firmata.attach(SYSTEM_RESET, systemResetCallback); Firmata.begin(57600); systemResetCallback(); // attach servos from first digital pin up to max number of // servos supported for the board for (pin = 0; pin < TOTAL_PINS; pin++) { if (IS_PIN_DIGITAL(pin)) { if (servoCount < MAX_SERVOS) { servoPinMap[pin] = servoCount; servos[servoPinMap[pin]].attach(PIN_TO_DIGITAL(pin)); servoCount++; } } } } void loop() { while (Firmata.available()) Firmata.processInput(); }