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:
Mon Aug 14 14:51:20 2017 +0000
Revision:
5:598ccee73ed3
Parent:
4:379f9ab5cb4b
added check for valid servo pulse when greater then servo max to prevent flag check after pulse interrupt (inverted pulse measure phase)

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
jebradshaw 0:98a3b6fbd242 42 int servoPulse;
jebradshaw 3:19c8eaf905e9 43 int servoPulseMax;
jebradshaw 3:19c8eaf905e9 44 int servoPulseMin;
jebradshaw 3:19c8eaf905e9 45 float servoPulseOffset;
jebradshaw 3:19c8eaf905e9 46 float servoPulseScale;
jebradshaw 3:19c8eaf905e9 47
jebradshaw 3:19c8eaf905e9 48 float readCalPulse(void);
jebradshaw 0:98a3b6fbd242 49 int read(void);
jebradshaw 0:98a3b6fbd242 50 void PulseRead(void);
jebradshaw 1:b7cc6da72d09 51 void timeoutTest(void);
jebradshaw 0:98a3b6fbd242 52
jebradshaw 0:98a3b6fbd242 53 ServoIn& operator= (ServoIn& rhs);
jebradshaw 2:07273d6016e9 54 operator int();
jebradshaw 0:98a3b6fbd242 55
jebradshaw 0:98a3b6fbd242 56 private:
jebradshaw 0:98a3b6fbd242 57 InterruptIn _interrupt;
jebradshaw 4:379f9ab5cb4b 58 DigitalIn _pin;
jebradshaw 1:b7cc6da72d09 59 Timeout _validPulseTimeout;
jebradshaw 0:98a3b6fbd242 60 bool _pulseFlag;
jebradshaw 0:98a3b6fbd242 61 Timer pulseMeasure;
jebradshaw 1:b7cc6da72d09 62 bool _t_state;
jebradshaw 0:98a3b6fbd242 63 };
jebradshaw 0:98a3b6fbd242 64
jebradshaw 3:19c8eaf905e9 65 #endif