A simple API/Software interface to the LPC17xx PWM peripheral to provide control to up to six RC type servo controllers.

Revision:
0:c680385286e3
Child:
1:fbb8acf19e77
diff -r 000000000000 -r c680385286e3 inc/example1.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/example1.h	Mon May 02 18:38:45 2011 +0000
@@ -0,0 +1,67 @@
+
+
+#include "mbed.h"
+#include "SimpleRCservos.h"
+
+#define N_90 -90.0
+#define P_90 +90.0
+
+SimpleRCservos servos;
+
+int main() {
+    double position = 0;
+
+    // The default scaling range is -1.0 to +1.0
+    // Alter the scaling range to -90.0 to +90.0
+    servos.setLimits(SimpleRCservos::Servo6, N_90, P_90); // Mbed p21
+    servos.setLimits(SimpleRCservos::Servo5, N_90, P_90); // Mbed p22
+    servos.setLimits(SimpleRCservos::Servo4, N_90, P_90); // Mbed p23
+    
+    // The default range is 1ms to 2ms with 1.5ms being the neutral.
+    // This line isn't actually needed as 1ms/2ms is the library's 
+    // default but is included here to show how altering it may be
+    // achieved.
+    servos.setRange(SimpleRCservos::Servo6, 1000, 2000); // Servo4 uses p21
+    
+    // Add a servo pulse range, 900us to 2.1ms, neutral 1.5ms.
+    servos.setRange(SimpleRCservos::Servo5, 900, 2100); // Servo4 uses p22
+    
+    // Add a servo pulse range, 600us to 2.4ms, neutral 1.5ms.
+    servos.setRange(SimpleRCservos::Servo4, 600, 2400); // Servo4 uses p23
+    
+    // Enable the Servo (starts producing pulses).
+    servos.enable(SimpleRCservos::Servo6);
+    servos.enable(SimpleRCservos::Servo5);
+    servos.enable(SimpleRCservos::Servo4);
+    
+    while(1) {
+        
+        // Slide up to max
+        for(position = 0; position < P_90; position += 0.1) {
+            servos.position(SimpleRCservos::Servo6, position);
+            servos.position(SimpleRCservos::Servo5, position);
+            servos.position(SimpleRCservos::Servo4, position);
+            wait(0.005);
+        }
+        wait(2);
+        
+        // Slide down to min
+        for(position = P_90; position > N_90; position -= 0.1) {
+            servos.position(SimpleRCservos::Servo6, position);
+            servos.position(SimpleRCservos::Servo5, position);
+            servos.position(SimpleRCservos::Servo4, position);
+            wait(0.005);
+        }
+        wait(2);
+        
+        // Slide back up to neutral
+        for(position = N_90; position < 0; position += 0.1) {
+            servos.position(SimpleRCservos::Servo6, position);
+            servos.position(SimpleRCservos::Servo5, position);
+            servos.position(SimpleRCservos::Servo4, position);
+            wait(0.005);
+        }
+        wait(2); 
+    }       
+}
+