Software based digital input debouncer

DigitalInDebounced.h

Committer:
Waldek
Date:
2014-06-04
Revision:
2:dabe90a0bdc1
Parent:
1:b59d305c4365

File content as of revision 2:dabe90a0bdc1:

#pragma once
#include "mbed.h"
#include "TimerSubscriber.h"

/*-------------------------------------------------------------

(c) W.D. 2014

-------------------------------------------------------------*/

/*  ------ sample usage------
*/
#define SAMPLES_TO_DEBOUNCE 64

extern TimerSubscriber timer_user;

class DigitalInDebounced : TimerDependent
{
public:
    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);
    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;
    bool stable;
    DigitalIn *Switch;
    unsigned int PreDivider;
    unsigned int Divider;
    unsigned int DebounceTime;
    unsigned int DebounceCounter;
    void DigitalInDebounced_common(DigitalIn *SwitchIn, const unsigned int inDebounceTime);
};