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.cpp
- Committer:
- salarian
- Date:
- 2016-05-15
- Revision:
- 0:b0ec6b86deaa
File content as of revision 0:b0ec6b86deaa:
#include "mbed.h"
#include "pulse_decoder.h"
pulse_decoder::pulse_decoder(PinName pin)
: interrupt(pin), high_period(0), low_period(false)
{
interrupt.rise(this, &pulse_decoder::rising_edge);
interrupt.fall(this, &pulse_decoder::falling_edge);
}
void pulse_decoder::rising_edge()
{
high_timer.start();
low_timer.stop();
low_period = low_timer.read_us();
low_timer.reset();
}
void pulse_decoder::falling_edge()
{
high_timer.stop();
low_timer.start();
high_period = high_timer.read_us();
high_timer.reset();
}