abc
Dependents: Microwave_MBED MicrowaveSimulation_LPC1768 RTOS_Alarm_Clock USB_Project_Host ... more
DebouncedInterrupt.cpp
- Committer:
- kandangath
- Date:
- 2014-02-18
- Revision:
- 17:96a51b236ba0
- Parent:
- 14:da09706b92f5
File content as of revision 17:96a51b236ba0:
/**
* DebouncedInterrupt.cpp
**/
#include "DebouncedInterrupt.h"
Timeout timeout;
DebouncedInterrupt::DebouncedInterrupt(PinName pin)
{
_in = new InterruptIn(pin);
_din = new DigitalIn(pin);
}
DebouncedInterrupt::~DebouncedInterrupt()
{
delete _in;
delete _din;
}
void DebouncedInterrupt::attach(void (*fptr)(void), const unsigned int& debounce_ms)
{
if(fptr) {
fCallback = fptr;
_last_bounce_count = _bounce_count = 0;
_debounce_us = 1000*debounce_ms;
_in->rise(this, &DebouncedInterrupt::_onInterrupt);
_in->fall(this, &DebouncedInterrupt::_onInterrupt);
}
}
void DebouncedInterrupt::reset()
{
timeout.detach();
}
unsigned int DebouncedInterrupt::get_bounce()
{
return _last_bounce_count;
}
void DebouncedInterrupt::_callback()
{
_last_bounce_count = _bounce_count;
_bounce_count = 0;
if(_din->read()) {
fCallback();
}
}
void DebouncedInterrupt::_onInterrupt()
{
_bounce_count++;
timeout.attach_us(this, &DebouncedInterrupt::_callback, _debounce_us);
}