-
Notifications
You must be signed in to change notification settings - Fork 0
/
MyTimeAlarm.cpp
84 lines (69 loc) · 1.55 KB
/
MyTimeAlarm.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
77
78
79
80
81
82
83
84
/*
MyTimeAlarm.cpp 2.0 - Library for manage Time with control reset millis() after 49 day and change inteval during working.
Created by Alessandro Colosi - August 31, 2017.
Released into the public domain.
*/
#include "Arduino.h"
#include "MyTimeAlarm.h"
MyTimeAlarm::MyTimeAlarm()
{
Inizialize=true;
}
bool MyTimeAlarm::on(unsigned long interval)
{
if (!Inizialize || AlarmOn || interval<0) return false;
_interval = interval;
previousMillis=millis();
AlarmOn=true;
return true;
}
bool MyTimeAlarm::off()
{
if (!Inizialize || !AlarmOn) return false;
previousMillis=0;
diffMillis=0;
currentMillis=0;
_interval=0;
_intervalchange=0;
_now=false;
AlarmOn=false;
ChangeOn=false;
return true;
}
bool MyTimeAlarm::change(unsigned long intervalchange, bool now)
{
if (!Inizialize || !AlarmOn || intervalchange<0) return false;
if (now) {
_interval=intervalchange;
previousMillis=millis();
}else{
_intervalchange = intervalchange;
}
_now=now;
ChangeOn=true;
return true;
}
bool MyTimeAlarm::active()
{
if (Inizialize && AlarmOn) {
currentMillis=millis();
if (currentMillis<previousMillis) {
diffMillis = 4294967295 - previousMillis + currentMillis;
}else{
diffMillis = currentMillis-previousMillis;
}
if (diffMillis >= _interval) {
previousMillis = currentMillis;
if (!_now && ChangeOn) {
_interval=_intervalchange;
_intervalchange=0;
ChangeOn=false;
}
return true; //Alarm
}else{
return false;
}
}else{
return false;
}
}