Software based digital input debouncer
DigitalInDebounced.h@2:dabe90a0bdc1, 2014-06-04 (annotated)
- 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?
User | Revision | Line number | New 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 |