1818class SimpleTimer
1919{
2020 private: // -----------------------------------------------------------------
21+
22+ // Time typedef
2123 typedef unsigned long long_time_t ;
2224
25+ // Timer interval
2326 long_time_t _interval;
24- long_time_t _last_tick = millis();
27+
28+ // Run callback function on elapsed
29+ bool _callback_on_elapsed = false ;
30+
31+ // Timer cycle start
32+ long_time_t _start_time;
33+
34+ // Callback function
35+ typedef void (*CallbackFunction)(SimpleTimer*);
36+ CallbackFunction _callback_function;
2537
2638 public: // ------------------------------------------------------------------
2739
2840 // Timer constructor
2941 SimpleTimer (long_time_t interval = 1000 ) : _interval(interval) { }
3042
43+ SimpleTimer (long_time_t interval, CallbackFunction f) : _interval(interval)
44+ {
45+ onElapsed (f);
46+ }
47+
3148 // Begin timer
3249 void begin ()
3350 {
@@ -44,7 +61,7 @@ class SimpleTimer
4461 // Reset timer
4562 void reset ()
4663 {
47- _last_tick = millis ();
64+ _start_time = millis ();
4865 }
4966
5067 // Set timer interval
@@ -58,23 +75,36 @@ class SimpleTimer
5875 {
5976 long_time_t current_millis = millis ();
6077
61- return ((current_millis - _last_tick) > _interval);
78+ return ((current_millis - _start_time) > _interval);
79+ }
80+
81+ // Function to call on elapsed
82+ void onElapsed (CallbackFunction f)
83+ {
84+ _callback_on_elapsed = true ;
85+ _callback_function = f;
86+ }
87+
88+ // Check timer and run callback
89+ void tick ()
90+ {
91+ if (_callback_on_elapsed && check ()) _callback_function (this );
6292 }
6393
6494 // The number of milliseconds until the next trigger
6595 long_time_t remains () const
6696 {
6797 long_time_t current_millis = millis ();
6898
69- return ((_last_tick + _interval) - current_millis);
99+ return ((_start_time + _interval) - current_millis);
70100 }
71101
72102 // The number of milliseconds that have passed since the last reset
73103 long_time_t passed () const
74104 {
75105 long_time_t current_millis = millis ();
76106
77- return current_millis - _last_tick ;
107+ return current_millis - _start_time ;
78108 }
79109};
80110
0 commit comments