arduino stuffs
Diffstat (limited to 'libraries/Firmata/examples/ServoFirmata/ServoFirmata.ino')
-rw-r--r--libraries/Firmata/examples/ServoFirmata/ServoFirmata.ino65
1 files changed, 65 insertions, 0 deletions
diff --git a/libraries/Firmata/examples/ServoFirmata/ServoFirmata.ino b/libraries/Firmata/examples/ServoFirmata/ServoFirmata.ino
new file mode 100644
index 0000000..52b1f1b
--- /dev/null
+++ b/libraries/Firmata/examples/ServoFirmata/ServoFirmata.ino
@@ -0,0 +1,65 @@
+/*
+ * 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 click on the following link
+ * to open the list of Firmata client libraries in your default browser.
+ *
+ * https://github.com/firmata/arduino#firmata-client-libraries
+ */
+
+/* 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 <Servo.h>
+#include <Firmata.h>
+
+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();
+}