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@0:22a56daa5d4f, 2014-02-24 (annotated)
- Committer:
- DavidEGrayson
- Date:
- Mon Feb 24 01:25:52 2014 +0000
- Revision:
- 0:22a56daa5d4f
Initial commit. It works.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DavidEGrayson | 0:22a56daa5d4f | 1 | #pragma once |
DavidEGrayson | 0:22a56daa5d4f | 2 | |
DavidEGrayson | 0:22a56daa5d4f | 3 | #include <mbed.h> |
DavidEGrayson | 0:22a56daa5d4f | 4 | |
DavidEGrayson | 0:22a56daa5d4f | 5 | class GeneralDebouncer |
DavidEGrayson | 0:22a56daa5d4f | 6 | { |
DavidEGrayson | 0:22a56daa5d4f | 7 | public: |
DavidEGrayson | 0:22a56daa5d4f | 8 | GeneralDebouncer(int32_t maxUpdateIntervalMicroseconds) |
DavidEGrayson | 0:22a56daa5d4f | 9 | : maxUpdateIntervalMicroseconds(maxUpdateIntervalMicroseconds) |
DavidEGrayson | 0:22a56daa5d4f | 10 | { |
DavidEGrayson | 0:22a56daa5d4f | 11 | timer.start(); |
DavidEGrayson | 0:22a56daa5d4f | 12 | //this->maxUpdateIntervalMicroseconds = maxUpdateIntervalMicroseconds; |
DavidEGrayson | 0:22a56daa5d4f | 13 | reset(); |
DavidEGrayson | 0:22a56daa5d4f | 14 | } |
DavidEGrayson | 0:22a56daa5d4f | 15 | |
DavidEGrayson | 0:22a56daa5d4f | 16 | void reset() |
DavidEGrayson | 0:22a56daa5d4f | 17 | { |
DavidEGrayson | 0:22a56daa5d4f | 18 | firstReportReceived = false; |
DavidEGrayson | 0:22a56daa5d4f | 19 | lastReportTimeMicroseconds = 0; |
DavidEGrayson | 0:22a56daa5d4f | 20 | spanBeginTimeMicroseconds = 0; |
DavidEGrayson | 0:22a56daa5d4f | 21 | currentState = 0; |
DavidEGrayson | 0:22a56daa5d4f | 22 | } |
DavidEGrayson | 0:22a56daa5d4f | 23 | |
DavidEGrayson | 0:22a56daa5d4f | 24 | uint32_t getState() |
DavidEGrayson | 0:22a56daa5d4f | 25 | { |
DavidEGrayson | 0:22a56daa5d4f | 26 | return currentState; |
DavidEGrayson | 0:22a56daa5d4f | 27 | } |
DavidEGrayson | 0:22a56daa5d4f | 28 | |
DavidEGrayson | 0:22a56daa5d4f | 29 | uint32_t getTimeInCurrentStateMicroseconds() |
DavidEGrayson | 0:22a56daa5d4f | 30 | { |
DavidEGrayson | 0:22a56daa5d4f | 31 | //if ((time() - lastReportTimeMicroseconds) > maxUpdateIntervalMicroseconds) |
DavidEGrayson | 0:22a56daa5d4f | 32 | //{ |
DavidEGrayson | 0:22a56daa5d4f | 33 | // return 0; |
DavidEGrayson | 0:22a56daa5d4f | 34 | //} |
DavidEGrayson | 0:22a56daa5d4f | 35 | return time() - spanBeginTimeMicroseconds; |
DavidEGrayson | 0:22a56daa5d4f | 36 | } |
DavidEGrayson | 0:22a56daa5d4f | 37 | |
DavidEGrayson | 0:22a56daa5d4f | 38 | void update(uint32_t state) |
DavidEGrayson | 0:22a56daa5d4f | 39 | { |
DavidEGrayson | 0:22a56daa5d4f | 40 | uint32_t time = this->time(); |
DavidEGrayson | 0:22a56daa5d4f | 41 | // || (time - lastReportTimeMicroseconds) > maxUpdateIntervalMicroseconds |
DavidEGrayson | 0:22a56daa5d4f | 42 | if (!firstReportReceived || state != currentState) |
DavidEGrayson | 0:22a56daa5d4f | 43 | { |
DavidEGrayson | 0:22a56daa5d4f | 44 | firstReportReceived = true; |
DavidEGrayson | 0:22a56daa5d4f | 45 | spanBeginTimeMicroseconds = time; |
DavidEGrayson | 0:22a56daa5d4f | 46 | currentState = state; |
DavidEGrayson | 0:22a56daa5d4f | 47 | } |
DavidEGrayson | 0:22a56daa5d4f | 48 | lastReportTimeMicroseconds = time; |
DavidEGrayson | 0:22a56daa5d4f | 49 | } |
DavidEGrayson | 0:22a56daa5d4f | 50 | |
DavidEGrayson | 0:22a56daa5d4f | 51 | private: |
DavidEGrayson | 0:22a56daa5d4f | 52 | uint32_t time() |
DavidEGrayson | 0:22a56daa5d4f | 53 | { |
DavidEGrayson | 0:22a56daa5d4f | 54 | return (uint32_t)timer.read_us(); // Cast int32_t to uint32_t. |
DavidEGrayson | 0:22a56daa5d4f | 55 | } |
DavidEGrayson | 0:22a56daa5d4f | 56 | |
DavidEGrayson | 0:22a56daa5d4f | 57 | private: |
DavidEGrayson | 0:22a56daa5d4f | 58 | public: // tmphax |
DavidEGrayson | 0:22a56daa5d4f | 59 | bool firstReportReceived; |
DavidEGrayson | 0:22a56daa5d4f | 60 | uint32_t const maxUpdateIntervalMicroseconds; |
DavidEGrayson | 0:22a56daa5d4f | 61 | uint32_t lastReportTimeMicroseconds; |
DavidEGrayson | 0:22a56daa5d4f | 62 | uint32_t spanBeginTimeMicroseconds; |
DavidEGrayson | 0:22a56daa5d4f | 63 | uint32_t currentState; |
DavidEGrayson | 0:22a56daa5d4f | 64 | Timer timer; |
DavidEGrayson | 0:22a56daa5d4f | 65 | }; |