A simple PWM decoder class. It is based on using 2 interrupts, one for rising and another for falling edges of the input pulse. This is a very simple approach, possibly accurate enough to decode RC receiver pulses.
pulse_decoder.h
- Committer:
- salarian
- Date:
- 2016-05-15
- Revision:
- 0:b0ec6b86deaa
File content as of revision 0:b0ec6b86deaa:
#ifndef PULSE_DECODER_H #define PULSE_DECODER_H /// @file pulse_decoder.h This library provides a simple PWM decoder class. /// /// The approach is based on installing two interrupt routines for the rising and /// falling edges of an input pin and measuring the time between the two events. /// /// Example: /// @code /// #include "mbed.h" /// void main() /// { /// pulse_decoder pulse(D7); /// /// while(true) { /// printf("Pulse high = %5d low = %5d (us) Period = %5d\n", /// pulse.get_high_period(), pulse.get_low_period(), /// pulse.get_high_period() + pulse.get_low_period()); /// wait(.2); /// } /// } /// @endcode class pulse_decoder { public: ///Creates a pulse_decoder ///@param[in] pin the input pin on the microcontroller pulse_decoder(PinName pin); ///Get the period of time that the pulse was in high state ///@return the period in us int get_high_period() const { return high_period; } ///Get the period of time that the pulse was in low state ///@return the period in us int get_low_period() const { return low_period; } private: InterruptIn interrupt; Timer high_timer; Timer low_timer; volatile int high_period; volatile int low_period; void rising_edge(); void falling_edge(); }; #endif //PULSE_DECODER_H