Library for Pololu Maestro Servo Controller http://www.pololu.com/docs/0J40

Library for Pololu Maestro Servo Controller

Library docs: https://developer.mbed.org/users/kochansky/code/Maestro/docs/f374c7b60318/classMaestro.html

Example usage:

#include "mbed.h"
#include "Maestro.h"

Maestro maestro(PTC4,PTC3);

int main()
{
    maestro.setBaudRate(9600);

    // limit speed for each servo
    for (uint8_t i = 0; i < 17; i++) {
        maestro.setSpeed(i, 10);
    }

    while (true) {
       // set servo on channel 0 to 90 degrees
       maestro.setServoAngle(0, 90);
       wait(2);

        // set servo on channel 0 to 45 degrees
       maestro.setServoAngle(0, 45);
       wait(2);
    }
}

Serial commands based on manual: http://www.pololu.com/docs/0J40/5.e

Device pinout:

/media/uploads/kochansky/maestro.jpg

Revision:
3:1c654893354d
Parent:
1:c14b79e3f39b
Child:
4:ef4d23c023ea
--- a/Maestro.cpp	Sun Jan 05 10:52:17 2014 +0000
+++ b/Maestro.cpp	Sun Jan 05 16:46:14 2014 +0000
@@ -9,21 +9,21 @@
 
 #include "Maestro.h"
 
-Maestro::Maestro(PinName tx, PinName rx) : serial(tx, rx)
+Maestro::Maestro(PinName tx, PinName rx) : serial(tx, rx), pc(USBTX, USBRX)
 {
     serial.baud(9600);
     serial.format(8, SerialBase::None, 1); //8N1
-    char command[1];
-    command[0] = BAUD_RATE_IDICATION;
-    serial.puts(command);
+}
+
+void Maestro::init()
+{
+    serial.putc(BAUD_RATE_IDICATION);
 }
 
-void Maestro::setTarget(int channel, int target)
+void Maestro::setTarget(uint8_t channel, uint16_t target)
 {
-    char command[4];
-    command[0] = SET_TARGET;
-    command[1] = channel;
-    command[2] = target & 0x7F;
-    command[3] = (target >> 7) & 0x7F;
-    serial.puts(command);
+    serial.putc(SET_TARGET);
+    serial.putc(channel);
+    serial.putc(target & 0x7F);
+    serial.putc((target >> 7) & 0x7F);
 }
\ No newline at end of file