#include <Wire.h>
#include <RTClib.h>
#include <TM1637.h>
RTC_DS3231 rtc;
int second, minute, hour, day, month;
long year;
DateTime currentTime;
// Определение пинов для TM1637
const int CLK = 5;
const int DIO = 4;
TM1637 tm1637(CLK, DIO);
void setup()
{
tm1637.init();
tm1637.set(2); // Яркость дисплея 0-7
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(7, OUTPUT);
pinMode(3, INPUT_PULLUP);
rtc.begin();
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Получение начального времени на часовом модуле RTC
}
bool isColonActive = false;
bool isAlarmEnabled = true;
bool isAlarmTriggered = false;
void loop()
{
currentTime = rtc.now(); // Получение текущей даты и времени
second = currentTime.second();
minute = currentTime.minute();
hour = currentTime.hour() + 7;
day = currentTime.day();
month = currentTime.month();
year = currentTime.year();
if ((hour == 20 && minute == 32)) // Будильник
{
if (isAlarmEnabled)
isAlarmTriggered = true;
if (isAlarmEnabled)
{
digitalWrite(7, HIGH); // Светодиод
analogWrite(9, 255 / 2); // Звук
delay(100);
analogWrite(9, 0);
delay(100);
if (!digitalRead(3)) // Кнопка
{
digitalWrite(7, LOW);
isAlarmEnabled = false;
isAlarmTriggered = false;
}
}
}
else
{
digitalWrite(7, LOW);
isAlarmEnabled = true;
isAlarmTriggered = false;
}
tm1637.display(0, hour / 10);
tm1637.display(1, hour % 10);
tm1637.display(2, minute / 10);
tm1637.display(3, minute % 10);
isColonActive = !isColonActive;
tm1637.point(isColonActive);
if (!isAlarmTriggered)
{
delay(1000);
}
}