// Подключаем библиотеку для работы с четырёхразрядным дисплеем #include // Подключаем библиотеку для работы с кнопками #include // Подключаем библиотеку для работы с часами реального времени RTC #include // Создаём объект дисплея на шине SPI и пине 10 QuadDisplay qd(10); // Создаём объекты кнопок на пинах: 2, 3, 4 и 5 TroykaButton buttonS1(5); TroykaButton buttonS2(2); TroykaButton buttonS3(3); TroykaButton buttonS4(4); // Создаём объект часов реального времени на шине I²C RTC clock; // Даём понятное имя пищалке на пине A2 constexpr uint8_t BUZZER_PIN = A2; // Создаём переменные для хранения часов и минут uint8_t hours; uint8_t minutes; // Создаём константы для хранения часов и минут будильника constexpr uint8_t alarmHours = 7; constexpr uint8_t alarmMinutes = 30; void setup() { // Инициализируем дисплей qd.begin(); // Инициализируем кнопки buttonS1.begin(); buttonS2.begin(); buttonS3.begin(); buttonS4.begin(); // Инициализируем часы реального времени clock.begin(); // Настраиваем пин с пищалкой в режим выхода pinMode(BUZZER_PIN, OUTPUT); // Устанавливаем временную отметку в модуль // Выберите метод установки времени: ручной или автоматический // После установки времени в часы, закомментируйте метод clock.set // Ручная установка временной отметки в модуль: 14:25:45 1 августа 2020 года // 14 час, 25 мин, 45 сек, 1 число, август, 2020 год, суббота // clock.set(14, 25, 45, 1, 8, 2020, SATURDAY); // Автоматическая установка временной отметки в модуль // Время берётся из ПК при компиляции clock.set(__TIMESTAMP__); } void loop() { // Запрашиваем данные с часов clock.read(); // Получаем текущие показания часов и минут в переменные hours = clock.getHour(); minutes = clock.getMinute(); // Выводим время на дисплей qd.displayScore(hours, minutes, true); // Обновляем время через функцию обработки кнопок updateTimeButtons(); // Обрабатываем времени будильника alarmRing(); } // Функция обновления времени через кнопки void updateTimeButtons() { // Считываем состояния с кнопок buttonS1.read(); buttonS2.read(); buttonS3.read(); buttonS4.read(); // Настраиваем время на часах с помощью кнопок if (buttonS1.isClick()) { clock.setHour(hours - 1); } else if (buttonS2.isClick()) { clock.setMinute(minutes - 1); } else if (buttonS3.isClick()) { clock.setMinute(minutes + 1); } else if (buttonS4.isClick()) { clock.setHour(hours + 1); } } // Функция обработки времени будильника bool alarmRing() { // Если текущее время совпадает со временем будильника if (hours == alarmHours && minutes == alarmMinutes) { // Мигаем дисплеем и пищим зуммером qd.displayClear(); tone(BUZZER_PIN, 1000, 200); delay(200); qd.displayScore(hours, minutes, false); delay(300); } }