-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLedTask.h
More file actions
77 lines (59 loc) · 1.68 KB
/
LedTask.h
File metadata and controls
77 lines (59 loc) · 1.68 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
class LedTask {
private:
int blinkTime;
unsigned long t0, t1;
boolean ledState;
int ledPin;
boolean isTurnOn;// Biến xác định trạng thái tắt/bật của tiến trình
void(LedTask::*runningFunc)();// Con trỏ trỏ tới hàm xử lý của một trạng thái
void resetFunc() {
t0 = millis();
if (isTurnOn)
runningFunc = &checkTimesFunc;
}
void checkTimesFunc() {
t1 = millis();
if ( (t1 - t0) > blinkTime )
runningFunc = &checkLedStateFunc;
}
void checkLedStateFunc() {
ledState = digitalRead(ledPin);
if (ledState == HIGH)
runningFunc = &turnOffLedFunc;
else
runningFunc = &turnOnLedFunc;
}
void turnOnLedFunc() {
digitalWrite(ledPin, HIGH);
if (true)
runningFunc = &resetFunc;
}
void turnOffLedFunc() {
digitalWrite(ledPin, LOW);
if (true)
runningFunc = &resetFunc;
}
public:
void init(int ledPin, int blinkTime) {
this->ledPin = ledPin;
this->blinkTime = blinkTime;
isTurnOn = false;
pinMode(ledPin, OUTPUT);
runningFunc = &resetFunc;// Trạng thái ban đầu là Reset
}
void run() {
(this->*runningFunc)();// Chạy hàm được trỏ bởi con trỏ
}
// Đổi trạng thái tắt/bật tiến trình (Task)
void toggle(boolean toggleState) {
isTurnOn = toggleState;
// Nếu tắt task thì tắt luôn cả led và chuyển về trạng thái reset
if (toggleState == false) {
runningFunc = &resetFunc;
digitalWrite(ledPin, 0);
}
}
boolean isTaskOn() {
return isTurnOn;
}
};