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:
Sat Feb 22 02:23:14 2014 +0000
Revision:
1:415086687bce
Parent:
0:ffaf699a4eea
added pragma once;

Who changed what in which revision?

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