A replacement for InterruptIn that debounces the interrupt.
Dependents: D7A_Demo-Get-started CVtoOSCConverter EE3501keypad D7A_Localisation ... more
Fork of DebouncedInterrupt by
Example code:
#include "DebouncedInterrupt.h" DebouncedInterrupt up_button(USER_BUTTON); void onUp() { // Do Something } int main() { // Will immediatly call function and ignore other interrupts until timeout up_button.attach(&onUp, IRQ_FALL, 1000, true); // Will call function only if button has been held for the specified time //up_button.attach(&onUp, IRQ_FALL, 500, false); while(1) {} }
Diff: DebouncedInterrupt.h
- Revision:
- 10:cb16d2957f8d
- Parent:
- 8:4b3ff16d5f91
- Child:
- 11:af6d7dc34062
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DebouncedInterrupt.h Tue Feb 18 16:32:33 2014 +0000 @@ -0,0 +1,62 @@ +/** +* DebouncedInterrupt.h +* Monitors and debounces an InterruptIn +**/ + +/** +Example: +InterruptIn up_button(p15); + +void onUp() +{ + // Do Something +} + +int main() +{ + DebouncedInterrupt upD(&onUp, &up_button, INT_FALL, 100); + while(1) { + ... + } +} +**/ + +#ifndef DEBOUNCED_INTERRUPT_H +#define DEBOUNCED_INTERRUPT_H + +#include <stdint.h> +#include "mbed.h" + +enum interruptTrigger{ + INT_FALL = 0, + INT_RISE = 1 +}; + +class DebouncedInterrupt { +private: + unsigned int _debounce_us; + unsigned int _debounce_count; + unsigned int _last_debounce_count; + InterruptIn *_in; + + void (*fCallback)(void); + void _onInterrupt(void); + void _callback(void); +public: + DebouncedInterrupt(PinName pin); + ~DebouncedInterrupt(); + + // Start monitoring the interupt and attach a callback + void attach(void (*fptr)(void), const interruptTrigger& trigger, const uint32_t& debounce_ms=10); + + // Stop monitoring the interrupt + void reset(); + + + /* + * Get number of de-bounced interrupts + * @return: debounced count + */ + unsigned int get_debounce(); +}; +#endif \ No newline at end of file