My fully self designed first stable working Quadrocopter Software.

Dependencies:   mbed

Dependents:   fluy343

/media/uploads/maetugr/dsc09031.jpg

Committer:
maetugr
Date:
Mon Aug 31 20:20:50 2015 +0000
Revision:
10:14390c90c3f5
Parent:
5:06e978fd147a
before changing to MPU9250

Who changed what in which revision?

UserRevisionLine numberNew contents of line
maetugr 5:06e978fd147a 1 // based on http://mbed.org/users/jdenkers/code/Servo/
maetugr 5:06e978fd147a 2
maetugr 5:06e978fd147a 3 #ifndef SERVO_H
maetugr 5:06e978fd147a 4 #define SERVO_H
maetugr 5:06e978fd147a 5
maetugr 5:06e978fd147a 6 #include "mbed.h"
maetugr 5:06e978fd147a 7
maetugr 5:06e978fd147a 8 /** Class to control a servo on any pin, without using pwm
maetugr 5:06e978fd147a 9 *
maetugr 5:06e978fd147a 10 * Example:
maetugr 5:06e978fd147a 11 * @code
maetugr 5:06e978fd147a 12 * // Keep sweeping servo from left to right
maetugr 5:06e978fd147a 13 * #include "mbed.h"
maetugr 5:06e978fd147a 14 * #include "Servo.h"
maetugr 5:06e978fd147a 15 *
maetugr 5:06e978fd147a 16 * Servo Servo1(p20);
maetugr 5:06e978fd147a 17 *
maetugr 5:06e978fd147a 18 * Servo1.Enable(1500,20000);
maetugr 5:06e978fd147a 19 *
maetugr 5:06e978fd147a 20 * while(1) {
maetugr 5:06e978fd147a 21 * for (int pos = 1000; pos < 2000; pos += 25) {
maetugr 5:06e978fd147a 22 * Servo1.SetPosition(pos);
maetugr 5:06e978fd147a 23 * wait_ms(20);
maetugr 5:06e978fd147a 24 * }
maetugr 5:06e978fd147a 25 * for (int pos = 2000; pos > 1000; pos -= 25) {
maetugr 5:06e978fd147a 26 * Servo1.SetPosition(pos);
maetugr 5:06e978fd147a 27 * wait_ms(20);
maetugr 5:06e978fd147a 28 * }
maetugr 5:06e978fd147a 29 * }
maetugr 5:06e978fd147a 30 * @endcode
maetugr 5:06e978fd147a 31 */
maetugr 5:06e978fd147a 32
maetugr 5:06e978fd147a 33 class Servo {
maetugr 5:06e978fd147a 34
maetugr 5:06e978fd147a 35 public:
maetugr 5:06e978fd147a 36 /** Create a new Servo object on any mbed pin
maetugr 5:06e978fd147a 37 *
maetugr 5:06e978fd147a 38 * @param Pin Pin on mbed to connect servo to
maetugr 5:06e978fd147a 39 */
maetugr 5:06e978fd147a 40 Servo(PinName Pin, int frequency);
maetugr 5:06e978fd147a 41 void SetFrequency(int frequency);
maetugr 5:06e978fd147a 42
maetugr 5:06e978fd147a 43 /** Change the position of the servo. Position in us
maetugr 5:06e978fd147a 44 *
maetugr 5:06e978fd147a 45 * @param NewPos The new value of the servos position (us)
maetugr 5:06e978fd147a 46 */
maetugr 5:06e978fd147a 47 void SetPosition(int NewPos);
maetugr 5:06e978fd147a 48
maetugr 5:06e978fd147a 49 /** Enable the servo. Without enabling the servo won't be running. Startposition and period both in us.
maetugr 5:06e978fd147a 50 *
maetugr 5:06e978fd147a 51 * @param StartPos The position of the servo to start (us)
maetugr 5:06e978fd147a 52 * @param Period The time between every pulse. 20000 us = 50 Hz(standard) (us)
maetugr 5:06e978fd147a 53 */
maetugr 5:06e978fd147a 54 void Enable(int StartPos, int Period);
maetugr 5:06e978fd147a 55
maetugr 5:06e978fd147a 56 //Disable the servo. After disabling the servo won't get any signal anymore
maetugr 5:06e978fd147a 57 void Disable();
maetugr 5:06e978fd147a 58
maetugr 5:06e978fd147a 59 //operator for confortable positioning
maetugr 5:06e978fd147a 60 void operator=(int position);
maetugr 5:06e978fd147a 61
maetugr 5:06e978fd147a 62
maetugr 5:06e978fd147a 63 private:
maetugr 5:06e978fd147a 64 void StartPulse();
maetugr 5:06e978fd147a 65 void EndPulse();
maetugr 5:06e978fd147a 66
maetugr 5:06e978fd147a 67 int Position;
maetugr 5:06e978fd147a 68 DigitalOut ServoPin;
maetugr 5:06e978fd147a 69 Ticker Pulse;
maetugr 5:06e978fd147a 70 Timeout PulseStop;
maetugr 5:06e978fd147a 71 };
maetugr 5:06e978fd147a 72
maetugr 5:06e978fd147a 73 #endif