Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Microwave_MBED MicrowaveSimulation_LPC1768 RTOS_Alarm_Clock USB_Project_Host ... more
Diff: DebouncedInterrupt.cpp
- Revision:
- 10:cb16d2957f8d
- Parent:
- 9:970b74eb0407
- Child:
- 13:09b53a088a9c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/DebouncedInterrupt.cpp Tue Feb 18 16:32:33 2014 +0000
@@ -0,0 +1,62 @@
+/**
+* DebouncedInterrupt.cpp
+**/
+#include "DebouncedInterrupt.h"
+
+Timeout timeout;
+
+DebouncedInterrupt::DebouncedInterrupt(PinName pin)
+{
+ _in = new InterruptIn(pin);
+}
+
+DebouncedInterrupt::~DebouncedInterrupt()
+{
+}
+
+void DebouncedInterrupt::attach(void (*fptr)(void),
+ const interruptTrigger& trigger,
+ const unsigned int& debounce_ms)
+{
+ if(fptr) {
+ fCallback = fptr;
+ _last_debounce_count = _debounce_count = 0;
+
+ switch(trigger) {
+ case INT_RISE:
+ _in->rise(this, &DebouncedInterrupt::_onInterrupt);
+ break;
+ case INT_FALL:
+ _in->fall(this, &DebouncedInterrupt::_onInterrupt);
+ break;
+ default:
+ break;
+ }
+
+ _debounce_us = 1000*debounce_ms;
+ }
+}
+
+void DebouncedInterrupt::reset()
+{
+ timeout.detach();
+}
+
+unsigned int DebouncedInterrupt::get_debounce()
+{
+ return _last_debounce_count;
+}
+
+void DebouncedInterrupt::_callback()
+{
+ _last_debounce_count = _debounce_count;
+ _debounce_count = 0;
+ fCallback();
+}
+
+void DebouncedInterrupt::_onInterrupt()
+{
+ _debounce_count++;
+ timeout.attach_us(this, &DebouncedInterrupt::_callback, _debounce_us);
+}
+