Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: LineFollowing DeadReckoning
Revision 0:22a56daa5d4f, committed 2014-02-24
- Comitter:
- DavidEGrayson
- Date:
- Mon Feb 24 01:25:52 2014 +0000
- Commit message:
- Initial commit. It works.;
Changed in this revision
| GeneralDebouncer.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 22a56daa5d4f GeneralDebouncer.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/GeneralDebouncer.h Mon Feb 24 01:25:52 2014 +0000
@@ -0,0 +1,65 @@
+#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;
+};
\ No newline at end of file