Debounce InterruptIn

Dependents:   led_sigfox Allumag_lampe_sigfox Case_study_02_Turnstile B18_MP3_PLAYER ... more

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