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

inc/example1.h

Committer:
AjK
Date:
2011-05-02
Revision:
0:c680385286e3
Child:
1:fbb8acf19e77

File content as of revision 0:c680385286e3:



#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); 
    }       
}