-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAlarmSystem.cpp
More file actions
66 lines (54 loc) · 1.42 KB
/
Copy pathAlarmSystem.cpp
File metadata and controls
66 lines (54 loc) · 1.42 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
#include "AlarmSystem.h"
#include <EEPROM.h>
#include <Arduino.h>
#define EEPROM_ALARM_HOUR_ADDR 0
#define EEPROM_ALARM_MIN_ADDR 1
#define EEPROM_ALARM_ENABLED_ADDR 2
void AlarmSystem::begin() {
loadFromEEPROM();
hasRungToday = false;
}
void AlarmSystem::setAlarm(int hour, int minute) {
alarmHour = hour;
alarmMinute = minute;
alarmEnabled = true;
saveToEEPROM();
}
void AlarmSystem::disableAlarm() {
alarmEnabled = false;
saveToEEPROM();
}
bool AlarmSystem::isAlarmSet() {
return alarmEnabled;
}
void AlarmSystem::check(int hour, int minute, int second) {
if (!alarmEnabled) return;
if (hour == alarmHour && minute == alarmMinute && second == 0 && !hasRungToday) {
triggerAlarm();
hasRungToday = true;
}
resetDailyFlag(hour);
}
void AlarmSystem::triggerAlarm() {
for (int i = 0; i < 10; i++) {
digitalWrite(13, HIGH);
delay(250);
digitalWrite(13, LOW);
delay(250);
}
}
void AlarmSystem::resetDailyFlag(int currentHour) {
if (currentHour != alarmHour) {
hasRungToday = false;
}
}
void AlarmSystem::loadFromEEPROM() {
alarmHour = EEPROM.read(EEPROM_ALARM_HOUR_ADDR);
alarmMinute = EEPROM.read(EEPROM_ALARM_MIN_ADDR);
alarmEnabled = EEPROM.read(EEPROM_ALARM_ENABLED_ADDR);
}
void AlarmSystem::saveToEEPROM() {
EEPROM.write(EEPROM_ALARM_HOUR_ADDR, alarmHour);
EEPROM.write(EEPROM_ALARM_MIN_ADDR, alarmMinute);
EEPROM.write(EEPROM_ALARM_ENABLED_ADDR, alarmEnabled);
}