Skip to content

Commit 213400f

Browse files
committed
SimpleTimer update
1 parent e6075da commit 213400f

File tree

7 files changed

+109
-7
lines changed

7 files changed

+109
-7
lines changed

.circleci/config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ jobs:
99
- run: pio ci --board=esp32dev examples/SerialLogging/ --lib src/
1010
- run: pio ci --board=esp32dev examples/UnitsConversion/ --lib src/
1111
- run: pio ci --board=esp32dev examples/Values/ --lib src/
12+
- run: pio ci --board=esp32dev examples/TimerSimple/ --lib src/
13+
- run: pio ci --board=esp32dev examples/TimerCallbacks/ --lib src/

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,9 @@
1111
## v0.2.0
1212

1313
* Невеликі фікси та перероблений шаблон SerialLog.
14-
* Додано приклади роботи з CLI та з Value.
14+
* Додано приклади роботи з CLI та з Value.
15+
16+
## v0.3.0
17+
18+
* Доданий приклад з UnitCorvesion.
19+
* Функціонал SimpleTimer розширено: додана можливість працювати з калбеками. Додані приклади роботи в різних варіантах.

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ pio ci --board=esp32dev examples/CLI/ --lib src/
5858
pio ci --board=esp32dev examples/SerialLogging/ --lib src/
5959
pio ci --board=esp32dev examples/UnitsConversion/ --lib src/
6060
pio ci --board=esp32dev examples/Values/ --lib src/
61+
pio ci --board=esp32dev examples/TimerSimple/ --lib src/
62+
pio ci --board=esp32dev examples/TimerCallbacks/ --lib src/
6163
```
6264

6365
Use this command to run tests (you have to have connected ESP32 to your computer):
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
2+
// Include library
3+
#include <realtime/simple_timer.h>
4+
5+
// Create timer and set interval
6+
SimpleTimer timer = SimpleTimer(/* interval: */ 5000);
7+
8+
void setup()
9+
{
10+
// Setup Serial port
11+
Serial.begin(115200);
12+
13+
// Add callback
14+
timer.onElapsed(onTimer);
15+
16+
// Set new interval
17+
timer.setInterval(1000);
18+
19+
// Begin timer
20+
timer.begin();
21+
}
22+
23+
void loop()
24+
{
25+
// Check timer
26+
timer.tick();
27+
}
28+
29+
void onTimer(SimpleTimer *t)
30+
{
31+
// Reset timer
32+
t->reset();
33+
34+
// Print message
35+
Serial.println("Timer triggered! " + String(millis()));
36+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
2+
// Include library
3+
#include <realtime/simple_timer.h>
4+
5+
// Create timer
6+
SimpleTimer timer = SimpleTimer();
7+
8+
void setup()
9+
{
10+
// Setup Serial port
11+
Serial.begin(115200);
12+
13+
// Begin timer
14+
timer.begin(/* interval: */ 5000);
15+
}
16+
17+
void loop()
18+
{
19+
if (timer.check())
20+
{
21+
// Reset timer
22+
timer.reset();
23+
24+
// Print message
25+
Serial.println("Timer triggered! " + String(millis()));
26+
}
27+
}

library.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"type": "git",
1616
"url": "https://github.com/DreamerDeLy/dream.git"
1717
},
18-
"version": "0.2.0",
18+
"version": "0.3.0",
1919
"license": "GPL-3.0-or-later",
2020
"frameworks": "arduino",
2121
"platforms":

src/realtime/simple_timer.h

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,33 @@
1818
class 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

Comments
 (0)