A class to control a model R/C servo, using a PwmOut

Fork of Servo by Simon Ford

Revision:
0:24148c673250
Child:
2:8995c167f399
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Servo.h	Mon Nov 16 18:24:16 2009 +0000
@@ -0,0 +1,95 @@
+/* mbed R/C Servo
+ * Copyright (c) 2007-2009 sford, cstyles
+ * Released under the MIT License: http://mbed.org/license/mit
+ */
+  
+#ifndef MBED_SERVO_H
+#define MBED_SERVO_H
+
+#include "mbed.h"
+
+/* Class: Servo
+ *  Abstraction on top of PwmOut to control the position of a servo motor
+ *
+ * Example:
+ * > // Continuously sweep the servo through it's full range
+ * > #include "mbed.h"
+ * > #include "Servo.h"
+ * >
+ * > Servo myservo(p21);
+ * >
+ * > int main() {
+ * >     while(1) {
+ * >         for(int i=0; i<100; i++) {
+ * >             myservo = i/100.0;
+ * >             wait(0.01);
+ * >         }
+ * >         for(int i=100; i>0; i--) {
+ * >             myservo = i/100.0;
+ * >             wait(0.01);
+ * >         }
+ * >     }
+ * > }
+ */
+class Servo {
+
+public:
+    /* Constructor: Servo
+     *  Create a servo object connected to the specified PwmOut pin
+     *
+     * Variables:
+     *  pin - PwmOut pin to connect to 
+     */
+    Servo(PinName pin);
+    
+    /* Function: write
+     *  Set the servo position, normalised to it's full range
+     *
+     * Variables:
+     *  percent - A normalised number 0.0-1.0 to represent the full range.
+     */
+    void write(float percent);
+    
+    /* Function: read
+     *  Read the servo motors current position
+     *
+     * Variables:
+     *  returns - A normalised number 0.0-1.0  representing the full range.
+     */
+    float read();
+    
+    /* Function: position
+     *  Set the servo position
+     *
+     * Variables:
+     *  degrees - Servo position in degrees
+     */
+    void position(float degrees);
+    
+    /* Function: calibrate
+     *  Allows calibration of the range and angles for a particular servo
+     *
+     *
+     * Variables:
+     *  range - Pulsewidth range from center (1.5ms) to maximum/minimum position in seconds
+     *  degrees - Angle from centre to maximum/minimum position in degrees
+     */
+    void calibrate(float range = 0.0005, float degrees = 45.0); 
+        
+    /* Function: operator=
+     *  Shorthand for the write and read functions
+     */
+    Servo& operator= (float percent);
+    Servo& operator= (Servo& rhs);
+    operator float();
+
+protected:
+    PwmOut _pwm;
+    float _range;
+    float _degrees;
+    float _p;
+};
+
+
+
+#endif