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

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?

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