A class to control a model R/C servo, using a PwmOut
Dependents: mbedDemoDisplay mbedDemoDisplay Servo_HelloWorld Initialmbedrobotprogram ... more
Servo.h
00001 /* mbed R/C Servo Library 00002 * Copyright (c) 2007-2010 sford, cstyles 00003 * 00004 * Permission is hereby granted, free of charge, to any person obtaining a copy 00005 * of this software and associated documentation files (the "Software"), to deal 00006 * in the Software without restriction, including without limitation the rights 00007 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00008 * copies of the Software, and to permit persons to whom the Software is 00009 * furnished to do so, subject to the following conditions: 00010 * 00011 * The above copyright notice and this permission notice shall be included in 00012 * all copies or substantial portions of the Software. 00013 * 00014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00015 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00017 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00019 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00020 * THE SOFTWARE. 00021 */ 00022 00023 #ifndef MBED_SERVO_H 00024 #define MBED_SERVO_H 00025 00026 #include "mbed.h" 00027 00028 /** Servo control class, based on a PwmOut 00029 * 00030 * Example: 00031 * @code 00032 * // Continuously sweep the servo through it's full range 00033 * #include "mbed.h" 00034 * #include "Servo.h" 00035 * 00036 * Servo myservo(p21); 00037 * 00038 * int main() { 00039 * while(1) { 00040 * for(int i=0; i<100; i++) { 00041 * myservo = i/100.0; 00042 * wait(0.01); 00043 * } 00044 * for(int i=100; i>0; i--) { 00045 * myservo = i/100.0; 00046 * wait(0.01); 00047 * } 00048 * } 00049 * } 00050 * @endcode 00051 */ 00052 class Servo { 00053 00054 public: 00055 /** Create a servo object connected to the specified PwmOut pin 00056 * 00057 * @param pin PwmOut pin to connect to 00058 */ 00059 Servo(PinName pin); 00060 00061 /** Set the servo position, normalised to it's full range 00062 * 00063 * @param percent A normalised number 0.0-1.0 to represent the full range. 00064 */ 00065 void write(float percent); 00066 00067 /** Read the servo motors current position 00068 * 00069 * @param returns A normalised number 0.0-1.0 representing the full range. 00070 */ 00071 float read(); 00072 00073 /** Set the servo position 00074 * 00075 * @param degrees Servo position in degrees 00076 */ 00077 void position(float degrees); 00078 00079 /** Allows calibration of the range and angles for a particular servo 00080 * 00081 * @param range Pulsewidth range from center (1.5ms) to maximum/minimum position in seconds 00082 * @param degrees Angle from centre to maximum/minimum position in degrees 00083 */ 00084 void calibrate(float range = 0.0005, float degrees = 45.0); 00085 00086 /** Shorthand for the write and read functions */ 00087 Servo& operator= (float percent); 00088 Servo& operator= (Servo& rhs); 00089 operator float(); 00090 00091 protected: 00092 PwmOut _pwm; 00093 float _range; 00094 float _degrees; 00095 float _p; 00096 }; 00097 00098 #endif
Generated on Tue Jul 12 2022 12:37:01 by 1.7.2