Software based digital input debouncer

Committer:
Waldek
Date:
Wed Jun 04 10:01:37 2014 +0000
Revision:
2:dabe90a0bdc1
Parent:
1:b59d305c4365
First fully working version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Waldek 0:76aea589cbdd 1 #pragma once
Waldek 0:76aea589cbdd 2 #include "mbed.h"
Waldek 0:76aea589cbdd 3 #include "TimerSubscriber.h"
Waldek 0:76aea589cbdd 4
Waldek 0:76aea589cbdd 5 /*-------------------------------------------------------------
Waldek 0:76aea589cbdd 6
Waldek 0:76aea589cbdd 7 (c) W.D. 2014
Waldek 0:76aea589cbdd 8
Waldek 0:76aea589cbdd 9 -------------------------------------------------------------*/
Waldek 0:76aea589cbdd 10
Waldek 0:76aea589cbdd 11 /* ------ sample usage------
Waldek 0:76aea589cbdd 12 */
Waldek 0:76aea589cbdd 13 #define SAMPLES_TO_DEBOUNCE 64
Waldek 0:76aea589cbdd 14
Waldek 0:76aea589cbdd 15 extern TimerSubscriber timer_user;
Waldek 0:76aea589cbdd 16
Waldek 0:76aea589cbdd 17 class DigitalInDebounced : TimerDependent
Waldek 0:76aea589cbdd 18 {
Waldek 0:76aea589cbdd 19 public:
Waldek 2:dabe90a0bdc1 20 DigitalInDebounced(const PinName pin, const unsigned int inDebounceTime=300);
Waldek 2:dabe90a0bdc1 21 DigitalInDebounced(const PinName pin, const PinMode mode, const unsigned int inDebounceTime=300);
Waldek 1:b59d305c4365 22 virtual ~DigitalInDebounced();
Waldek 0:76aea589cbdd 23 bool read(void);
Waldek 2:dabe90a0bdc1 24 inline bool is_stable(void) {return stable;};
Waldek 2:dabe90a0bdc1 25 inline bool current_state(void) {return Switch->read();};
Waldek 2:dabe90a0bdc1 26 inline unsigned int rd_PreDivider (void) {return PreDivider;};
Waldek 2:dabe90a0bdc1 27 inline unsigned int rd_Divider (void) {return Divider;};
Waldek 2:dabe90a0bdc1 28 inline unsigned int rd_DebounceTime (void) {return DebounceTime;};
Waldek 2:dabe90a0bdc1 29 inline unsigned int rd_DebounceCounter (void) {return DebounceCounter;};
Waldek 0:76aea589cbdd 30 virtual void TimerEvent(void);
Waldek 0:76aea589cbdd 31 private:
Waldek 0:76aea589cbdd 32 bool recent;
Waldek 0:76aea589cbdd 33 bool stable;
Waldek 0:76aea589cbdd 34 DigitalIn *Switch;
Waldek 0:76aea589cbdd 35 unsigned int PreDivider;
Waldek 0:76aea589cbdd 36 unsigned int Divider;
Waldek 0:76aea589cbdd 37 unsigned int DebounceTime;
Waldek 0:76aea589cbdd 38 unsigned int DebounceCounter;
Waldek 2:dabe90a0bdc1 39 void DigitalInDebounced_common(DigitalIn *SwitchIn, const unsigned int inDebounceTime);
Waldek 0:76aea589cbdd 40 };
Waldek 0:76aea589cbdd 41