Software based digital input debouncer
Revision 2:dabe90a0bdc1, committed 2014-06-04
- Comitter:
- Waldek
- Date:
- Wed Jun 04 10:01:37 2014 +0000
- Parent:
- 1:b59d305c4365
- Commit message:
- First fully working version
Changed in this revision
diff -r b59d305c4365 -r dabe90a0bdc1 DigitalInDebounced.h --- a/DigitalInDebounced.h Mon Jun 02 14:09:31 2014 +0000 +++ b/DigitalInDebounced.h Wed Jun 04 10:01:37 2014 +0000 @@ -17,17 +17,16 @@ class DigitalInDebounced : TimerDependent { public: - DigitalInDebounced(PinName pin, unsigned int inDebounceTime=300); - DigitalInDebounced(PinName pin, PinMode mode, unsigned int inDebounceTime=300); + DigitalInDebounced(const PinName pin, const unsigned int inDebounceTime=300); + DigitalInDebounced(const PinName pin, const PinMode mode, const unsigned int inDebounceTime=300); virtual ~DigitalInDebounced(); bool read(void); - bool is_stable(void) {return stable;}; -// bool current_state(void) {return recent;}; - bool current_state(void) {return Switch->read();}; - unsigned int rd_PreDivider (void) {return PreDivider;}; - unsigned int rd_Divider (void) {return Divider;}; - unsigned int rd_DebounceTime (void) {return DebounceTime;}; - unsigned int rd_DebounceCounter (void) {return DebounceCounter;}; + inline bool is_stable(void) {return stable;}; + inline bool current_state(void) {return Switch->read();}; + inline unsigned int rd_PreDivider (void) {return PreDivider;}; + inline unsigned int rd_Divider (void) {return Divider;}; + inline unsigned int rd_DebounceTime (void) {return DebounceTime;}; + inline unsigned int rd_DebounceCounter (void) {return DebounceCounter;}; virtual void TimerEvent(void); private: bool recent; @@ -37,6 +36,6 @@ unsigned int Divider; unsigned int DebounceTime; unsigned int DebounceCounter; - void DigitalInDebounced_common(DigitalIn *SwitchIn, unsigned int inDebounceTime); + void DigitalInDebounced_common(DigitalIn *SwitchIn, const unsigned int inDebounceTime); }; \ No newline at end of file
diff -r b59d305c4365 -r dabe90a0bdc1 TimerSubscriber.cpp --- a/TimerSubscriber.cpp Mon Jun 02 14:09:31 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -#include "TimerSubscriber.h" - -struct TimerSubscriber::TimerEntry *TimerSubscriber::TimerTable = NULL; -unsigned int TimerSubscriber::TableSize = 0; -unsigned int TimerSubscriber::TickerCounter = 1; - -Ticker timer; -extern TimerSubscriber timer_user; - -TimerSubscriber::TimerSubscriber(const unsigned int inTableSize, const unsigned int inTickerPeriod) : - TickerPeriod(inTickerPeriod) -{ - TableSize = inTableSize; - TimerTable = new TimerEntry[TableSize]; - for (int i=0; i<TableSize; i++) - TimerTable[i].CallBack = NULL; - TickerCounter = 0; - timer.attach_us(&OnTimer, TickerPeriod); - - return; -} - -TimerSubscriber::~TimerSubscriber() -{ - delete[] TimerTable; -} - -void TimerSubscriber::OnTimer(void) -{ - for (int i=0; i<TableSize; i++) - if (NULL != TimerTable[i].CallBack) - if (0 == --TimerTable[i].Counter) - { - TimerTable[i].CallBack->TimerEvent(); - TimerTable[i].Counter = TimerTable[i].Divider; - }; - TickerCounter++; -} - -bool TimerSubscriber::Subscribe(class TimerDependent *adres, const unsigned int inDivider) -{ - for (int i=0; i<TableSize; i++) - if (NULL == TimerTable[i].CallBack) - { - TimerTable[i].CallBack = adres; - TimerTable[i].Divider = inDivider; - TimerTable[i].Counter = inDivider; - return true; - } - return false; -} - -bool TimerSubscriber::UnSubscribe(const class TimerDependent *adres) -{ - for (int i=0; i<TableSize; i++) - if (adres == TimerTable[i].CallBack) - { - TimerTable[i].CallBack = NULL; - return true; - } - return false; -} - -//--------------------------------------------------------------------------------------- -// class TimerDependent -//--------------------------------------------------------------------------------------- - -TimerDependent::TimerDependent() -{ -} - -TimerDependent::~TimerDependent() -{ -} -
diff -r b59d305c4365 -r dabe90a0bdc1 TimerSubscriber.h --- a/TimerSubscriber.h Mon Jun 02 14:09:31 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -#pragma once -#include "mbed.h" - -/*------------------------------------------------------------- - -(c) W.D. 2014 - --------------------------------------------------------------*/ - -/* ------ sample usage------ -*/ -class TimerDependent -{ -public: - TimerDependent(); - virtual ~TimerDependent(); - - virtual void TimerEvent (void) = NULL; -}; - -class TimerSubscriber -{ -public: - TimerSubscriber(const unsigned int inTableSize=10, const unsigned int inTickerPeriod=10000); - ~TimerSubscriber(); - unsigned int counter_rd(void) {return TickerCounter;}; - unsigned int TickerPeriod_rd(void) {return TickerPeriod;}; - bool Subscribe(class TimerDependent *adres, const unsigned int inDivider=1); - bool UnSubscribe(const class TimerDependent *adres); -private: - static struct TimerEntry - { - class TimerDependent *CallBack; - unsigned int Divider; - unsigned int Counter; - } *TimerTable; - static void OnTimer(void); - static unsigned int TableSize; - unsigned int TickerPeriod; - static unsigned int TickerCounter; -};