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 01:05:10 2014 +0000
Child:
1:ffacad1b455a
Commit message:
Init version of class to debounce InterruptIn

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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DebounceInterrupts.cpp	Tue Feb 18 01:05:10 2014 +0000
@@ -0,0 +1,27 @@
+#include "DebounceInterrupts.h"
+
+Timeout timeout;
+
+DebounceInterrupts::DebounceInterrupts(void (*fptr)(void), 
+                                       InterruptIn *interruptIn, 
+                                       const bool& rise,
+                                       const unsigned int& debounce_ms)
+{
+    fCallback = fptr;
+    if (rise) {
+        interruptIn->rise(this, &DebounceInterrupts::onInterrupt);
+    } else {
+        interruptIn->fall(this, &DebounceInterrupts::onInterrupt);
+    }
+    fDebounce_us = 1000*debounce_ms;
+}
+
+DebounceInterrupts::~DebounceInterrupts()
+{
+}
+
+void DebounceInterrupts::onInterrupt()
+{
+    timeout.detach();
+    timeout.attach_us(fCallback,fDebounce_us);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DebounceInterrupts.h	Tue Feb 18 01:05:10 2014 +0000
@@ -0,0 +1,28 @@
+
+/**
+ * Debounces an interrupt
+ */
+ 
+#ifndef DEBOUNCE_INTERRUPTS_H
+#define DEBOUNCE_INTERRUPTS_H
+
+#include <stdint.h>
+#include "mbed.h"
+
+class DebounceInterrupts {
+private:
+    unsigned int fDebounce_us;
+    void (*fCallback)(void);
+    void onInterrupt(void);
+public:
+    /** Setup debounce for an InterruptIn.
+     *  fptr: pointer to function to be called when debounced Interrupt fires
+     *  interrupt: InterruptIn to monitor
+     *  rise: true:rise, false: fall
+     *  debounce_ms: milliseconds to wait for a stable input
+     *  @return Pull the oldest element from the buffer
+     */
+    DebounceInterrupts(void (*fptr)(void), InterruptIn *interrupt, const bool& rise=true, const uint32_t& debounce_ms=10);
+    ~DebounceInterrupts();
+};
+#endif
\ No newline at end of file