A replacement for InterruptIn that debounces the interrupt.

Dependents:   D7A_Demo-Get-started CVtoOSCConverter EE3501keypad D7A_Localisation ... more

Fork of DebouncedInterrupt by Anil Kandangath

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) {}
}

Files at this revision

API Documentation at this revision

Comitter:
kandangath
Date:
Tue Feb 18 07:00:07 2014 +0000
Parent:
6:e1461ccdf3c0
Child:
8:4b3ff16d5f91
Commit message:
Add counter for debounced interrupts

Changed in this revision

DebounceInterrupts.cpp Show annotated file Show diff for this revision Revisions of this file
DebounceInterrupts.h Show annotated file Show diff for this revision Revisions of this file
--- a/DebounceInterrupts.cpp	Tue Feb 18 06:46:06 2014 +0000
+++ b/DebounceInterrupts.cpp	Tue Feb 18 07:00:07 2014 +0000
@@ -8,6 +8,7 @@
                                        const unsigned int& debounce_ms)
 {
     fCallback = fptr;
+    _debounce_count = 0;
     
     switch(trigger) {
      case INT_RISE:
@@ -20,14 +21,26 @@
         break;
     }
 
-    fDebounce_us = 1000*debounce_ms;
+    _debounce_us = 1000*debounce_ms;
 }
 
 DebounceInterrupts::~DebounceInterrupts()
 {
 }
 
+void DebounceInterrupts::_callback()
+{
+    _debounce_count = 0;
+    fCallback();
+}
+
 void DebounceInterrupts::_onInterrupt()
 {
-    timeout.attach_us(fCallback,fDebounce_us);
-}
\ No newline at end of file
+    _debounce_count++;
+    timeout.attach_us(this, &DebounceInterrupts::_callback, _debounce_us);
+}
+
+unsigned int DebounceInterrupts::get_debounce()
+{
+    return _debounce_count;
+}
--- a/DebounceInterrupts.h	Tue Feb 18 06:46:06 2014 +0000
+++ b/DebounceInterrupts.h	Tue Feb 18 07:00:07 2014 +0000
@@ -34,14 +34,22 @@
 
 class DebounceInterrupts {
 private:
-    unsigned int fDebounce_us;
+    unsigned int _debounce_us;
+    unsigned int _debounce_count;
+    
     void (*fCallback)(void);
     void _onInterrupt(void);
+    void _callback(void);
 public:
     DebounceInterrupts(void (*fptr)(void),                  /* function to be called after debounced InterruptIn */
                        InterruptIn *interrupt,              /* InterruptIn to monitor */
                        const interruptTrigger& trigger,     /* true: rise, false: fall */
                        const uint32_t& debounce_ms=10);     /* stability duration required */
     ~DebounceInterrupts();
+    /*
+    * Get number of de-bounced interrupts
+    * @return: debounced count
+    */
+    unsigned int get_debounce();
 };
 #endif
\ No newline at end of file