A program using forked servo.h that allows controlling the speed of multiple individual servos. Each servo runs at a different speed if required. ANY output port can be used. (PWM not required)

Dependencies:   VarSpeedServo mbed

main.cpp

Committer:
sierrasmith71
Date:
2015-10-14
Revision:
2:95cabad9292b
Parent:
0:0f740c5bbb7a

File content as of revision 2:95cabad9292b:

/**
* This programm demonstrates the changes and additions I made to :mbed Servo Library without using PWM pins
 * Copyright (c) 2010 Jasper Denkers
 * that allows independent cotrol of many servo's speed. The original Servo.h  cleverly uses a mix of MBED Ticker and Timeout functions 
 * to control the servos. Both of these functions are interrupt driven and so operate in the background. I added some more of these functions
 * to add the Variable Speed function.
 *
 * This program was tested on a Nucleo 152RE with a 40MHz clock and a ST DISCO F726NG running at 216MHz. 
 *
 * ANY pin on the MBED board, that can be configured as an output, may be used to drive a servo 
 *
 * Use of the library is both simple and straight forward;
 * create a new instance of the Servo object
 * enable that object setting the servo starting position, refesh rate, and desired servo speed
 *
 * write a program and use the statement --for example: Servo1.SetPosition(2300); and the servo will move, at the speed you specified.
 * the wait() statements in the example program are there to cause a pause to allow the servos to make a full transit, before returning,  as they are set to a rather slow speed.
 * The slow rate was chosen to demonstrate the library's ability to fully control a servo's speed. 
 * notes: 
 * The refresh rate for Analog servos is almost always 50 Hz or every 20mS. If you are using digital servos than a faster refresh rate can be used, up to 300 Hz
 * Servos draw a lot of power so do not attempt to use the MBED +5V to power more than, say , one 9g  small servo. A separate power supply is required for the servos.
 * Make sure to combine the board ground and servo power supply ground.
 *
 */


// Keep sweeping 2 servos from left to right at a slow rate. 

#include "mbed.h"
#include "Servo.h"


int main()
{

    Servo Servo1(D12);            // create new instance of servo with output pin number
    Servo Servo2(D10);
    Servo1.Enable(1500,50,10);    // Start position ; in us (1500 = center), servo refresh rate in Hz (analog servos = 50 Hz), servo movement speed range from 1-50, 1 slowest, about 20 seconds/180 degrees
    Servo2.Enable(1500,50,10);
    
    wait(5.0);
    while(1) {

        Servo1.SetPosition(700);
        Servo2.SetPosition(700);
        wait(2.5);
        
        Servo1.SetPosition(2300);
        Servo2.SetPosition(2300);
        wait(2.5);
    }

}