Class Library for reading hobby servos and detecting invalid or disconnected channels

Dependents:   MadPulseCntrl Emaxx_Navigation Emaxx_Navigation_Dynamic_HIL Madpulse_Speed_Control_temp ... more

ServoIn Class Library

This class library uses external interrupts with timer functions to read servos pulses on mbed input pins.

ServoIn Library usage example

#include "mbed.h"
#include "ServoIn.h"

DigitalOut led1(LED1);
ServoIn servoIn1(p15);
ServoIn servoIn2(p14);
Serial pc(USBTX, USBRX); // tx, rx

int main() {    
    pc.baud(921600);            //Fast baud rate
        
    while(1) {
        led1 = 1;
        wait(0.05);
        led1 = 0;
        wait(0.05);
        
        pc.printf("servo pulse: CH1=%5dus  CH2=%5dus\r\n", servoIn1.read(), servoIn2.read());        
    }
}
Committer:
jebradshaw
Date:
Tue Apr 14 20:05:13 2015 +0000
Revision:
0:98a3b6fbd242
Child:
1:b7cc6da72d09
ServoIn - First class library 20150414;   Joe Bradshaw

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jebradshaw 0:98a3b6fbd242 1 // J. Bradshaw 20150409
jebradshaw 0:98a3b6fbd242 2 /** ServoIn Class for Reading servo pulses on single input pin
jebradshaw 0:98a3b6fbd242 3 * Copyright (c) 2014, jbradshaw (http://mbed.org)
jebradshaw 0:98a3b6fbd242 4 *
jebradshaw 0:98a3b6fbd242 5 * Permission is hereby granted, free of charge, to any person obtaining a copy
jebradshaw 0:98a3b6fbd242 6 * of this software and associated documentation files (the "Software"), to deal
jebradshaw 0:98a3b6fbd242 7 * in the Software without restriction, including without limitation the rights
jebradshaw 0:98a3b6fbd242 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
jebradshaw 0:98a3b6fbd242 9 * copies of the Software, and to permit persons to whom the Software is
jebradshaw 0:98a3b6fbd242 10 * furnished to do so, subject to the following conditions:
jebradshaw 0:98a3b6fbd242 11 *
jebradshaw 0:98a3b6fbd242 12 * The above copyright notice and this permission notice shall be included in
jebradshaw 0:98a3b6fbd242 13 * all copies or substantial portions of the Software.
jebradshaw 0:98a3b6fbd242 14 *
jebradshaw 0:98a3b6fbd242 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
jebradshaw 0:98a3b6fbd242 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
jebradshaw 0:98a3b6fbd242 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
jebradshaw 0:98a3b6fbd242 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
jebradshaw 0:98a3b6fbd242 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
jebradshaw 0:98a3b6fbd242 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
jebradshaw 0:98a3b6fbd242 21 * THE SOFTWARE.
jebradshaw 0:98a3b6fbd242 22 *
jebradshaw 0:98a3b6fbd242 23 */
jebradshaw 0:98a3b6fbd242 24
jebradshaw 0:98a3b6fbd242 25 #ifndef MBED_SERVOIN_H
jebradshaw 0:98a3b6fbd242 26 #define MBED_SERVOIN_H
jebradshaw 0:98a3b6fbd242 27
jebradshaw 0:98a3b6fbd242 28 /**
jebradshaw 0:98a3b6fbd242 29 * ServoIn Class.
jebradshaw 0:98a3b6fbd242 30 */
jebradshaw 0:98a3b6fbd242 31
jebradshaw 0:98a3b6fbd242 32 class ServoIn {
jebradshaw 0:98a3b6fbd242 33 public:
jebradshaw 0:98a3b6fbd242 34 /**
jebradshaw 0:98a3b6fbd242 35 * Constructor.
jebradshaw 0:98a3b6fbd242 36 *
jebradshaw 0:98a3b6fbd242 37 * @param pin - servo pulse input pin, assigned as interrupt in
jebradshaw 0:98a3b6fbd242 38 */
jebradshaw 0:98a3b6fbd242 39
jebradshaw 0:98a3b6fbd242 40 //ServoIn(PinName pin);
jebradshaw 0:98a3b6fbd242 41 ServoIn(PinName pin);
jebradshaw 0:98a3b6fbd242 42
jebradshaw 0:98a3b6fbd242 43 int servoPulse;
jebradshaw 0:98a3b6fbd242 44 int read(void);
jebradshaw 0:98a3b6fbd242 45 void PulseRead(void);
jebradshaw 0:98a3b6fbd242 46
jebradshaw 0:98a3b6fbd242 47 ServoIn& operator= (ServoIn& rhs);
jebradshaw 0:98a3b6fbd242 48 operator int();
jebradshaw 0:98a3b6fbd242 49
jebradshaw 0:98a3b6fbd242 50 private:
jebradshaw 0:98a3b6fbd242 51 InterruptIn _interrupt;
jebradshaw 0:98a3b6fbd242 52 bool _pulseFlag;
jebradshaw 0:98a3b6fbd242 53 Timer pulseMeasure;
jebradshaw 0:98a3b6fbd242 54 };
jebradshaw 0:98a3b6fbd242 55
jebradshaw 0:98a3b6fbd242 56 #endif