// Зайцев Алексей
#include "Clock.h"
#include "config.h"
int work_clock[2][4] = {
{7, 0, 8, 20},
{20, 0, 21, 20}
};
const int INTERVAL_MINUTES = 15;
Clock clock;
void setup() {
Serial.begin(115200);
clock.begin();
pinMode(13, OUTPUT); // светодиод
pinMode(7, INPUT); // кнопка
pinMode(11, OUTPUT); // buzzer
}
void alarm(int alarm_level) {
switch (alarm_level) {
case 1:
tone(11, 1000, 1000);
digitalWrite(13, HIGH);
break;
case 2:
tone(11, 1000, 2000);
digitalWrite(13, HIGH);
break;
case 3:
tone(11, 1000, 50000);
break;
default:
break;
}
}
int differenceMinute(DateTime first, DateTime second) {
if (first.hour() < second.hour() || (first.hour() == second.hour() && first.minute() < second.minute())) {
return -1;
} else {
return (first.hour() - second.hour()) * 60 + first.minute() - second.minute();
}
}
void checkTime(DateTime start) {
DateTime current_time = clock.now();
int difference = differenceMinute(current_time, start);
if (difference >= INTERVAL_MINUTES && difference <= INTERVAL_MINUTES * 2) {
alarm(1);
return;
} else if (difference > INTERVAL_MINUTES * 2) {
alarm(2);
return;
} else if (difference > 0 && difference < INTERVAL_MINUTES) {
alarm(3);
return;
} else {
return;
}
}
bool checker(int work_clock[2][4], DateTime current_time) {
for (int i = 0; i < 2; i++) {
if (
(current_time.hour() > work_clock[i][0] || (current_time.hour() == work_clock[i][0] && current_time.minute() >= work_clock[i][1])) &&
(current_time.hour() < work_clock[i][2] || (current_time.hour() == work_clock[i][2] && current_time.minute() <= work_clock[i][3]))
) {
return true;
}
}
return false;
}
int start_time = 0;
void loop() {
DateTime current_time = clock.now();
if (checker(work_clock, current_time))
{
if (!start_time) {
DateTime start_time = clock.now();
}
checkTime(start_time);
if (digitalRead(7) == HIGH) {
int start_time = 0;
}
} else{
digitalWrite(13, LOW);
delay(1000);
}
}