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

Committer:
AjK
Date:
Mon May 02 18:38:45 2011 +0000
Revision:
0:c680385286e3
Child:
1:fbb8acf19e77
1.0 See ChangeLog.h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AjK 0:c680385286e3 1
AjK 0:c680385286e3 2
AjK 0:c680385286e3 3 #include "mbed.h"
AjK 0:c680385286e3 4 #include "SimpleRCservos.h"
AjK 0:c680385286e3 5
AjK 0:c680385286e3 6 #define N_90 -90.0
AjK 0:c680385286e3 7 #define P_90 +90.0
AjK 0:c680385286e3 8
AjK 0:c680385286e3 9 SimpleRCservos servos;
AjK 0:c680385286e3 10
AjK 0:c680385286e3 11 int main() {
AjK 0:c680385286e3 12 double position = 0;
AjK 0:c680385286e3 13
AjK 0:c680385286e3 14 // The default scaling range is -1.0 to +1.0
AjK 0:c680385286e3 15 // Alter the scaling range to -90.0 to +90.0
AjK 0:c680385286e3 16 servos.setLimits(SimpleRCservos::Servo6, N_90, P_90); // Mbed p21
AjK 0:c680385286e3 17 servos.setLimits(SimpleRCservos::Servo5, N_90, P_90); // Mbed p22
AjK 0:c680385286e3 18 servos.setLimits(SimpleRCservos::Servo4, N_90, P_90); // Mbed p23
AjK 0:c680385286e3 19
AjK 0:c680385286e3 20 // The default range is 1ms to 2ms with 1.5ms being the neutral.
AjK 0:c680385286e3 21 // This line isn't actually needed as 1ms/2ms is the library's
AjK 0:c680385286e3 22 // default but is included here to show how altering it may be
AjK 0:c680385286e3 23 // achieved.
AjK 0:c680385286e3 24 servos.setRange(SimpleRCservos::Servo6, 1000, 2000); // Servo4 uses p21
AjK 0:c680385286e3 25
AjK 0:c680385286e3 26 // Add a servo pulse range, 900us to 2.1ms, neutral 1.5ms.
AjK 0:c680385286e3 27 servos.setRange(SimpleRCservos::Servo5, 900, 2100); // Servo4 uses p22
AjK 0:c680385286e3 28
AjK 0:c680385286e3 29 // Add a servo pulse range, 600us to 2.4ms, neutral 1.5ms.
AjK 0:c680385286e3 30 servos.setRange(SimpleRCservos::Servo4, 600, 2400); // Servo4 uses p23
AjK 0:c680385286e3 31
AjK 0:c680385286e3 32 // Enable the Servo (starts producing pulses).
AjK 0:c680385286e3 33 servos.enable(SimpleRCservos::Servo6);
AjK 0:c680385286e3 34 servos.enable(SimpleRCservos::Servo5);
AjK 0:c680385286e3 35 servos.enable(SimpleRCservos::Servo4);
AjK 0:c680385286e3 36
AjK 0:c680385286e3 37 while(1) {
AjK 0:c680385286e3 38
AjK 0:c680385286e3 39 // Slide up to max
AjK 0:c680385286e3 40 for(position = 0; position < P_90; position += 0.1) {
AjK 0:c680385286e3 41 servos.position(SimpleRCservos::Servo6, position);
AjK 0:c680385286e3 42 servos.position(SimpleRCservos::Servo5, position);
AjK 0:c680385286e3 43 servos.position(SimpleRCservos::Servo4, position);
AjK 0:c680385286e3 44 wait(0.005);
AjK 0:c680385286e3 45 }
AjK 0:c680385286e3 46 wait(2);
AjK 0:c680385286e3 47
AjK 0:c680385286e3 48 // Slide down to min
AjK 0:c680385286e3 49 for(position = P_90; position > N_90; position -= 0.1) {
AjK 0:c680385286e3 50 servos.position(SimpleRCservos::Servo6, position);
AjK 0:c680385286e3 51 servos.position(SimpleRCservos::Servo5, position);
AjK 0:c680385286e3 52 servos.position(SimpleRCservos::Servo4, position);
AjK 0:c680385286e3 53 wait(0.005);
AjK 0:c680385286e3 54 }
AjK 0:c680385286e3 55 wait(2);
AjK 0:c680385286e3 56
AjK 0:c680385286e3 57 // Slide back up to neutral
AjK 0:c680385286e3 58 for(position = N_90; position < 0; position += 0.1) {
AjK 0:c680385286e3 59 servos.position(SimpleRCservos::Servo6, position);
AjK 0:c680385286e3 60 servos.position(SimpleRCservos::Servo5, position);
AjK 0:c680385286e3 61 servos.position(SimpleRCservos::Servo4, position);
AjK 0:c680385286e3 62 wait(0.005);
AjK 0:c680385286e3 63 }
AjK 0:c680385286e3 64 wait(2);
AjK 0:c680385286e3 65 }
AjK 0:c680385286e3 66 }
AjK 0:c680385286e3 67