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@0:ffaf699a4eea, 2014-02-20 (annotated)
- Committer:
- DavidEGrayson
- Date:
- Thu Feb 20 18:54:56 2014 +0000
- Revision:
- 0:ffaf699a4eea
- Child:
- 1:415086687bce
Initial commit. It works!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DavidEGrayson | 0:ffaf699a4eea | 1 | #include <mbed.h> |
DavidEGrayson | 0:ffaf699a4eea | 2 | |
DavidEGrayson | 0:ffaf699a4eea | 3 | class Pacer |
DavidEGrayson | 0:ffaf699a4eea | 4 | { |
DavidEGrayson | 0:ffaf699a4eea | 5 | public: |
DavidEGrayson | 0:ffaf699a4eea | 6 | Pacer(int32_t pace_us) |
DavidEGrayson | 0:ffaf699a4eea | 7 | : pace_us(pace_us), last_time(0) |
DavidEGrayson | 0:ffaf699a4eea | 8 | { |
DavidEGrayson | 0:ffaf699a4eea | 9 | timer.start(); |
DavidEGrayson | 0:ffaf699a4eea | 10 | } |
DavidEGrayson | 0:ffaf699a4eea | 11 | |
DavidEGrayson | 0:ffaf699a4eea | 12 | bool ready() |
DavidEGrayson | 0:ffaf699a4eea | 13 | { |
DavidEGrayson | 0:ffaf699a4eea | 14 | return (time() - last_time) >= pace_us; |
DavidEGrayson | 0:ffaf699a4eea | 15 | } |
DavidEGrayson | 0:ffaf699a4eea | 16 | |
DavidEGrayson | 0:ffaf699a4eea | 17 | // This should generally only be called when ready() is true. |
DavidEGrayson | 0:ffaf699a4eea | 18 | void advance() |
DavidEGrayson | 0:ffaf699a4eea | 19 | { |
DavidEGrayson | 0:ffaf699a4eea | 20 | last_time += pace_us; |
DavidEGrayson | 0:ffaf699a4eea | 21 | } |
DavidEGrayson | 0:ffaf699a4eea | 22 | |
DavidEGrayson | 0:ffaf699a4eea | 23 | void clear() |
DavidEGrayson | 0:ffaf699a4eea | 24 | { |
DavidEGrayson | 0:ffaf699a4eea | 25 | last_time = time(); |
DavidEGrayson | 0:ffaf699a4eea | 26 | } |
DavidEGrayson | 0:ffaf699a4eea | 27 | |
DavidEGrayson | 0:ffaf699a4eea | 28 | bool pace() |
DavidEGrayson | 0:ffaf699a4eea | 29 | { |
DavidEGrayson | 0:ffaf699a4eea | 30 | if (ready()) |
DavidEGrayson | 0:ffaf699a4eea | 31 | { |
DavidEGrayson | 0:ffaf699a4eea | 32 | clear(); |
DavidEGrayson | 0:ffaf699a4eea | 33 | return true; |
DavidEGrayson | 0:ffaf699a4eea | 34 | } |
DavidEGrayson | 0:ffaf699a4eea | 35 | else |
DavidEGrayson | 0:ffaf699a4eea | 36 | { |
DavidEGrayson | 0:ffaf699a4eea | 37 | return false; |
DavidEGrayson | 0:ffaf699a4eea | 38 | } |
DavidEGrayson | 0:ffaf699a4eea | 39 | } |
DavidEGrayson | 0:ffaf699a4eea | 40 | |
DavidEGrayson | 0:ffaf699a4eea | 41 | private: |
DavidEGrayson | 0:ffaf699a4eea | 42 | uint32_t time() |
DavidEGrayson | 0:ffaf699a4eea | 43 | { |
DavidEGrayson | 0:ffaf699a4eea | 44 | return (uint32_t)timer.read_us(); // Cast int32_t to uint32_t. |
DavidEGrayson | 0:ffaf699a4eea | 45 | } |
DavidEGrayson | 0:ffaf699a4eea | 46 | |
DavidEGrayson | 0:ffaf699a4eea | 47 | uint32_t pace_us; |
DavidEGrayson | 0:ffaf699a4eea | 48 | uint32_t last_time; |
DavidEGrayson | 0:ffaf699a4eea | 49 | Timer timer; |
DavidEGrayson | 0:ffaf699a4eea | 50 | }; |