Debounce InterruptIn
Dependents: led_sigfox Allumag_lampe_sigfox Case_study_02_Turnstile B18_MP3_PLAYER ... more
Diff: DebouncedInterrupt.h
- Revision:
- 22:9733f886810a
- Parent:
- 21:34b95e1b2bf3
--- a/DebouncedInterrupt.h Tue Feb 25 07:13:29 2014 +0000 +++ b/DebouncedInterrupt.h Tue Feb 25 23:44:37 2014 +0000 @@ -4,6 +4,7 @@ #include <stdint.h> #include "mbed.h" +#include "FunctionPointer.h" /** typedef enum { @@ -47,7 +48,6 @@ volatile unsigned int _bounce_count; volatile unsigned int _last_bounce_count; - void (*fCallback)(void); void _onInterrupt(void); void _callback(void); public: @@ -58,7 +58,25 @@ void attach(void (*fptr)(void), const gpio_irq_event trigger, const uint32_t& debounce_ms=10); template<typename T> - void attach(T* cptr, void (*fptr)(void), const gpio_irq_event trigger, const uint32_t& debounce_ms=10); + void attach(T* tptr, void (T::*mptr)(void), const gpio_irq_event trigger, const uint32_t& debounce_ms=10) { + _fAttach.attach(tptr, mptr); + _last_bounce_count = _bounce_count = 0; + _debounce_us = 1000*debounce_ms; + _trigger = trigger; + + switch(trigger) + { + case IRQ_RISE: + _in->rise(tptr, &DebouncedInterrupt::_onInterrupt); + break; + case IRQ_FALL: + _in->fall(tptr, &DebouncedInterrupt::_onInterrupt); + break; + case IRQ_NONE: + reset(); // Unexpected. Clear callbacks. + break; + } + } // Stop monitoring the interrupt void reset(); @@ -69,5 +87,8 @@ * @return: bounce count */ unsigned int get_bounce(); +protected: +// https://github.com/mbedmicro/mbed/blob/master/libraries/mbed/api/FunctionPointer.h + FunctionPointer _fAttach; }; #endif \ No newline at end of file