-
Notifications
You must be signed in to change notification settings - Fork 3
/
AlarmHandler.cpp
78 lines (67 loc) · 1.3 KB
/
AlarmHandler.cpp
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
#include "AlarmHandler.h"
AlarmHandler::AlarmHandler(byte pin, TPinCallback pinFunction) {
m_pinCallback = pinFunction;
m_pin = pin;
m_active = 0;
}
void AlarmHandler::Begin() {
if (m_pinCallback) {
m_pinCallback(1, m_pin, OUTPUT);
}
else {
pinMode(m_pin, OUTPUT);
}
Off();
}
void AlarmHandler::Begin(byte pin) {
m_pin = pin;
Begin();
}
void AlarmHandler::On() {
if (m_pinCallback) {
m_pinCallback(2, m_pin, HIGH);
}
else {
digitalWrite(m_pin, HIGH);
}
m_lastToggle = millis();
}
void AlarmHandler::Off() {
if (m_pinCallback) {
m_pinCallback(2, m_pin, LOW);
}
else {
digitalWrite(m_pin, LOW);
}
m_lastToggle = millis();
}
void AlarmHandler::Handle() {
if (m_active) {
if (millis() > m_startTime + m_duration * 1000) {
m_active = false;
Off();
}
else {
if (millis() > m_lastToggle + 2000) {
for (byte i = 0; i < m_sequence; i++) {
On();
delay(100);
Off();
delay(i+1 < m_sequence ? 100 : 0);
}
}
}
}
}
void AlarmHandler::Set(byte sequence, word duration) {
m_sequence = sequence > 5 ? 5 : sequence;
m_duration = duration;
if (m_duration == 0) {
m_active = false;
Off();
}
else {
m_startTime = millis();
m_active = true;
}
}