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

Committer:
DavidEGrayson
Date:
Mon Feb 24 01:25:52 2014 +0000
Revision:
0:22a56daa5d4f
Initial commit.  It works.;

Who changed what in which revision?

UserRevisionLine numberNew 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 };