A library for debouncing any type of signal. This library does not really have documentation yet and is not really intended for public use.
Dependents: LineFollowing DeadReckoning
GeneralDebouncer.h
- Committer:
- DavidEGrayson
- Date:
- 2014-02-24
- Revision:
- 0:22a56daa5d4f
File content as of revision 0:22a56daa5d4f:
#pragma once #include <mbed.h> class GeneralDebouncer { public: GeneralDebouncer(int32_t maxUpdateIntervalMicroseconds) : maxUpdateIntervalMicroseconds(maxUpdateIntervalMicroseconds) { timer.start(); //this->maxUpdateIntervalMicroseconds = maxUpdateIntervalMicroseconds; reset(); } void reset() { firstReportReceived = false; lastReportTimeMicroseconds = 0; spanBeginTimeMicroseconds = 0; currentState = 0; } uint32_t getState() { return currentState; } uint32_t getTimeInCurrentStateMicroseconds() { //if ((time() - lastReportTimeMicroseconds) > maxUpdateIntervalMicroseconds) //{ // return 0; //} return time() - spanBeginTimeMicroseconds; } void update(uint32_t state) { uint32_t time = this->time(); // || (time - lastReportTimeMicroseconds) > maxUpdateIntervalMicroseconds if (!firstReportReceived || state != currentState) { firstReportReceived = true; spanBeginTimeMicroseconds = time; currentState = state; } lastReportTimeMicroseconds = time; } private: uint32_t time() { return (uint32_t)timer.read_us(); // Cast int32_t to uint32_t. } private: public: // tmphax bool firstReportReceived; uint32_t const maxUpdateIntervalMicroseconds; uint32_t lastReportTimeMicroseconds; uint32_t spanBeginTimeMicroseconds; uint32_t currentState; Timer timer; };