-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTimedTask.cpp
More file actions
111 lines (81 loc) · 1.76 KB
/
TimedTask.cpp
File metadata and controls
111 lines (81 loc) · 1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*
* TimedTask.cpp
*
* Created by Danilo Queiroz Barbosa, June 18, 2017.
* Member of electronicdrops.com
*
*
* Implementation of the class TimedTask
* A Simple way to use concurrent tasks.
*
*/
#include "Arduino.h"
#include "TimedTask.h"
TimedTask::TimedTask(void (*func)(), unsigned long interval_) {
_interval = interval_;
_function = func;
_previous_run = 0;
_active = 1;
_iterations = -1;
_check_iterations = false;
}
TimedTask::TimedTask(void (*func)(), unsigned long interval_, int start) {
_interval = interval_;
_function = func;
_active = 1;
_iterations = -1;
_check_iterations = false;
if (start > 0){
_previous_run = 0;
_previous_run = millis() * start;
}
}
void TimedTask::run() {
unsigned long current_run = millis();
if (_active) {
if (current_run - _previous_run > _interval) {
check_iterations();
_function();
_previous_run = current_run;
} else {
if (current_run < _previous_run) {
_previous_run = 0xFFFFFFFF - _previous_run;
}
}
}
}
boolean TimedTask::active() {
return _active;
}
boolean TimedTask::active(boolean act) {
_previous_run = millis();
_active = act;
}
unsigned long TimedTask::interval() {
return _interval;
}
unsigned long TimedTask::interval(unsigned long interval_) {
_interval = interval_;
return _interval;
}
long TimedTask::iterations() {
return _iterations;
}
long TimedTask::iterations(long iter) {
_iterations = iter;
_check_iterations = true;
}
void TimedTask::check_iterations() {
if (_check_iterations) {
if (_iterations > 0) {
_iterations--;
}
if (_iterations == 0) {
active(false);
}
}
}
void TimedTask::disable_iterations() {
_check_iterations = false;
_iterations = -1;
}