Library to help schedule events to run regularly in the main loop. This library does not have much documentation and is not really intended for public use yet.
Dependents: LineFollowing DeadReckoning
Pacer.h@1:415086687bce, 2014-02-22 (annotated)
- Committer:
- DavidEGrayson
- Date:
- Sat Feb 22 02:23:14 2014 +0000
- Revision:
- 1:415086687bce
- Parent:
- 0:ffaf699a4eea
added pragma once;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DavidEGrayson | 1:415086687bce | 1 | #pragma once |
DavidEGrayson | 1:415086687bce | 2 | |
DavidEGrayson | 0:ffaf699a4eea | 3 | #include <mbed.h> |
DavidEGrayson | 0:ffaf699a4eea | 4 | |
DavidEGrayson | 0:ffaf699a4eea | 5 | class Pacer |
DavidEGrayson | 0:ffaf699a4eea | 6 | { |
DavidEGrayson | 0:ffaf699a4eea | 7 | public: |
DavidEGrayson | 0:ffaf699a4eea | 8 | Pacer(int32_t pace_us) |
DavidEGrayson | 0:ffaf699a4eea | 9 | : pace_us(pace_us), last_time(0) |
DavidEGrayson | 0:ffaf699a4eea | 10 | { |
DavidEGrayson | 0:ffaf699a4eea | 11 | timer.start(); |
DavidEGrayson | 0:ffaf699a4eea | 12 | } |
DavidEGrayson | 0:ffaf699a4eea | 13 | |
DavidEGrayson | 0:ffaf699a4eea | 14 | bool ready() |
DavidEGrayson | 0:ffaf699a4eea | 15 | { |
DavidEGrayson | 0:ffaf699a4eea | 16 | return (time() - last_time) >= pace_us; |
DavidEGrayson | 0:ffaf699a4eea | 17 | } |
DavidEGrayson | 0:ffaf699a4eea | 18 | |
DavidEGrayson | 0:ffaf699a4eea | 19 | // This should generally only be called when ready() is true. |
DavidEGrayson | 0:ffaf699a4eea | 20 | void advance() |
DavidEGrayson | 0:ffaf699a4eea | 21 | { |
DavidEGrayson | 0:ffaf699a4eea | 22 | last_time += pace_us; |
DavidEGrayson | 0:ffaf699a4eea | 23 | } |
DavidEGrayson | 0:ffaf699a4eea | 24 | |
DavidEGrayson | 0:ffaf699a4eea | 25 | void clear() |
DavidEGrayson | 0:ffaf699a4eea | 26 | { |
DavidEGrayson | 0:ffaf699a4eea | 27 | last_time = time(); |
DavidEGrayson | 0:ffaf699a4eea | 28 | } |
DavidEGrayson | 0:ffaf699a4eea | 29 | |
DavidEGrayson | 0:ffaf699a4eea | 30 | bool pace() |
DavidEGrayson | 0:ffaf699a4eea | 31 | { |
DavidEGrayson | 0:ffaf699a4eea | 32 | if (ready()) |
DavidEGrayson | 0:ffaf699a4eea | 33 | { |
DavidEGrayson | 0:ffaf699a4eea | 34 | clear(); |
DavidEGrayson | 0:ffaf699a4eea | 35 | return true; |
DavidEGrayson | 0:ffaf699a4eea | 36 | } |
DavidEGrayson | 0:ffaf699a4eea | 37 | else |
DavidEGrayson | 0:ffaf699a4eea | 38 | { |
DavidEGrayson | 0:ffaf699a4eea | 39 | return false; |
DavidEGrayson | 0:ffaf699a4eea | 40 | } |
DavidEGrayson | 0:ffaf699a4eea | 41 | } |
DavidEGrayson | 0:ffaf699a4eea | 42 | |
DavidEGrayson | 0:ffaf699a4eea | 43 | private: |
DavidEGrayson | 0:ffaf699a4eea | 44 | uint32_t time() |
DavidEGrayson | 0:ffaf699a4eea | 45 | { |
DavidEGrayson | 0:ffaf699a4eea | 46 | return (uint32_t)timer.read_us(); // Cast int32_t to uint32_t. |
DavidEGrayson | 0:ffaf699a4eea | 47 | } |
DavidEGrayson | 0:ffaf699a4eea | 48 | |
DavidEGrayson | 0:ffaf699a4eea | 49 | uint32_t pace_us; |
DavidEGrayson | 0:ffaf699a4eea | 50 | uint32_t last_time; |
DavidEGrayson | 0:ffaf699a4eea | 51 | Timer timer; |
DavidEGrayson | 0:ffaf699a4eea | 52 | }; |