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: D7A_Demo-Get-started CVtoOSCConverter EE3501keypad D7A_Localisation ... more
Fork of DebouncedInterrupt by
Revision 18:e6e9bc6402b7, committed 2014-02-19
- Comitter:
- kandangath
- Date:
- Wed Feb 19 01:47:45 2014 +0000
- Parent:
- 17:96a51b236ba0
- Child:
- 19:d12a5b89ac3a
- Commit message:
- Support checking rise and fall of signals
Changed in this revision
| DebouncedInterrupt.cpp | Show annotated file Show diff for this revision Revisions of this file |
| DebouncedInterrupt.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/DebouncedInterrupt.cpp Tue Feb 18 20:38:50 2014 +0000
+++ b/DebouncedInterrupt.cpp Wed Feb 19 01:47:45 2014 +0000
@@ -17,15 +17,28 @@
delete _din;
}
-void DebouncedInterrupt::attach(void (*fptr)(void), const unsigned int& debounce_ms)
+void DebouncedInterrupt::attach(void (*fptr)(void), const gpio_irq_event trigger, const unsigned int& debounce_ms)
{
if(fptr) {
fCallback = fptr;
_last_bounce_count = _bounce_count = 0;
_debounce_us = 1000*debounce_ms;
+ _trigger = trigger;
- _in->rise(this, &DebouncedInterrupt::_onInterrupt);
- _in->fall(this, &DebouncedInterrupt::_onInterrupt);
+ switch(trigger)
+ {
+ case IRQ_RISE:
+ _in->rise(this, &DebouncedInterrupt::_onInterrupt);
+ break;
+ case IRQ_FALL:
+ _in->fall(this, &DebouncedInterrupt::_onInterrupt);
+ break;
+ case IRQ_NONE:
+ reset(); // Unexpected. Clear callbacks.
+ break;
+ }
+ } else {
+ reset();
}
}
@@ -43,7 +56,8 @@
{
_last_bounce_count = _bounce_count;
_bounce_count = 0;
- if(_din->read()) {
+ unsigned int expected_state = (_trigger==IRQ_RISE)?1:0;
+ if(_din->read() == expected_state) {
fCallback();
}
}
--- a/DebouncedInterrupt.h Tue Feb 18 20:38:50 2014 +0000
+++ b/DebouncedInterrupt.h Wed Feb 19 01:47:45 2014 +0000
@@ -15,7 +15,7 @@
*
* int main()
* {
- * up_button.attach(&onUp, 100);
+ * up_button.attach(&onUp,IRQ_FALL, 100);
* while(1) {
* ...
* }
@@ -29,11 +29,20 @@
#include <stdint.h>
#include "mbed.h"
+/**
+typedef enum {
+ IRQ_NONE,
+ IRQ_RISE,
+ IRQ_FALL
+} gpio_irq_event;
+**/
+
class DebouncedInterrupt {
private:
unsigned int _debounce_us;
InterruptIn *_in;
DigitalIn *_din;
+ gpio_irq_event _trigger;
// Diagnostics
volatile unsigned int _bounce_count;
@@ -47,7 +56,7 @@
~DebouncedInterrupt();
// Start monitoring the interupt and attach a callback
- void attach(void (*fptr)(void), const uint32_t& debounce_ms=10);
+ void attach(void (*fptr)(void), const gpio_irq_event trigger, const uint32_t& debounce_ms=10);
// Stop monitoring the interrupt
void reset();
