Электронный будильник
Проекты на Arduino Uno и Slot Shield
Если добавить к электронным часам всего один компонент — мерзкую пьезопищалку — проспать важную встречу или ранний подъём на работу точно не получится.
Проект основан на оригинальной Arduino Uno. За время отвечает модуль часов реального времени. Для управления гаджетом используется четырёхкнопочная клавиатура.
- Язык программирования: Arduino (C++)
Что потребуется
Полный сет компонентов проекта. В сет входят:
- четырёхразряный индикатор Quad Display
Видеоинструкция
Как собрать
Установите Troyka Slot Shield на Arduino Uno
Вставьте Quad Display в разъёмы E
и F
. Пин CS
подключу к 10
пину Arduino.
Установите четырёхкнопочную клавиатуру в слот C
. Сигнал первой кнопки подключите к пину 0
, второй к 1
, третьей к 4
и четвёртой к 5
.
Часы реального времени вставьте в пины I²C
разъёма B
. Вставьте батарейку CR1225 в держатель на лицевой панели модуля.
Подключите пьезопищалку к пину 7
слота A
.
Скетч
Прошейте контроллер скетчем через Arduino IDE.
- alarm-clock.ino
// Подключаем библиотеку для работы с дисплеем #include <QuadDisplay2.h> // создаём объект класса QuadDisplay и передаём номер пина CS QuadDisplay qd(10); // библиотека для работы I²C #include <Wire.h> // библиотека для работы с часами реального времени #include "TroykaRTC.h" // создаём объект для работы с часами реального времени RTC clock; // библиотека для работы с кнопками #include "TroykaButton.h" // пины к которым подключены кнопки #define BUTTON_PIN_1 0 #define BUTTON_PIN_2 1 #define BUTTON_PIN_3 4 #define BUTTON_PIN_4 5 // пин к которому подключена пищалка #define BUZZER_PIN 7 // создаём объекты для работы с кнопкой TroykaButton button1(BUTTON_PIN_1); TroykaButton button2(BUTTON_PIN_2); TroykaButton button3(BUTTON_PIN_3); TroykaButton button4(BUTTON_PIN_4); // создаем объект класса long для хранения счетчика для звука unsigned long buzzerTime = millis(); // переменные для хранения времени будильника int hoursAlarm = 0; int minutesAlarm = 0; //пременная для переключения между установкой часов и установкой будильника boolean state = true; void setup() { // инициализация дисплея qd.begin(); // инициализация часов clock.begin(); // метод установки времени и даты в модуль вручную // clock.set(10,25,45,20,05,2019,MONDAY); // метод установки времени и даты автоматически при компиляции clock.set(__TIMESTAMP__); // что бы время менялось при прошивке или сбросе питания // закомментируйте оба метода clock.set(); // инициализация кнопок button1.begin(); button2.begin(); button3.begin(); button4.begin(); //инициализация выхода пищалки pinMode(BUZZER_PIN, OUTPUT); } void loop() { // запрашиваем данные с часов clock.read(); // считываем показания часов и минут в переменные int hours = clock.getHour(); int minutes = clock.getMinute(); // считывание данных с кнопок button1.read(); button2.read(); button3.read(); button4.read(); // если кнопка «1» длительно зажата if (button1.isHold()) { // меняем состояние будильника state = !state; // в зависимости от текущего состояние будильника if (!state) { qd.displayDigits(QD_A, QD_L, QD_NONE, QD_NONE); //clock.setHour(hours - 1); } else { qd.displayDigits(QD_t, QD_I, QD_NONE, QD_NONE); //hoursAlarm--; } // ждём пару секунд delay(2000); } // в зависимости от текущего режима работы будильника // «текущее время / время подъема» // если режим «текущее время» if (state) { // в зависимости от состояние кнопок // увеличиваем / уменьшаем часы и минуты if (button1.isClick()) { clock.setHour(hours + 1); } else if (button2.isClick()) { clock.setHour(hours - 1); } else if (button3.isClick()) { clock.setMinute(minutes - 1); } else if (button4.isClick()) { clock.setMinute(minutes + 1); } // запрашиваем данные с часов clock.read(); // считываем показания часов и минут в переменные hours = clock.getHour(); minutes = clock.getMinute(); // выводим время на дисплей qd.displayScore(hours, minutes, true); } else { // если режим «время подъема» // в зависимости от состояние кнопок // увеличиваем / уменьшаем часы и минуты if (button1.isClick()) { hoursAlarm++; } else if (button2.isClick()) { hoursAlarm--; } else if (button3.isClick()) { minutesAlarm--; } else if (button4.isClick()) { minutesAlarm++; } // запускаем защиту от перехода через 0 parsingAlarmTime(); // выводим время на дисплей qd.displayScore(hoursAlarm, minutesAlarm); } // пришло время подъема? while (hours == hoursAlarm && minutes == minutesAlarm) { if (millis() - buzzerTime > 1000) { // запускаем звуковую функцию подъема tone(BUZZER_PIN, 500, 100); buzzerTime = millis(); } break; } } // функция защиты от перехода через 0 void parsingAlarmTime() { if (hoursAlarm > 23) { hoursAlarm = 0; } else if (hoursAlarm < 0) { hoursAlarm = 23; } if (minutesAlarm > 59) { minutesAlarm = 0; } else if (minutesAlarm < 0) { minutesAlarm = 59; } }
Часто задаваемые вопросы
Где скачать необходимые библиотеки и как их установить?
У моего модуля QuadDisplay всего три ноги и расположены они слева. Можно ли использовать его в этом проекте?
У вас предыдущая версия модуля. Она снята с производства пару лет назад. С этим скетчем, библиотекой и схемой сборки модуль работать не будет.