Цифровые часы Arduino
Проекты на Arduino и Slot Shield
Спроектировать и собрать электронные часы не так просто, как может показаться на первый взгляд.
Помимо подключения энергонезависимого модуля часов реального времени, необходимо продумать как задавать текущее время. В нашем примере часы и минуты настраиваются с помощью четырёхкнопочного модуля: верхний ряд добавляет значения, нижний — уменьшает.
- Язык программирования: Arduino (C++)
Что потребуется
Полный сет компонентов проекта. В сет входят:
- четырёхразряный индикатор Quad Display
Видеоинструкция
Как собрать
Установите Troyka Slot Shield на Iskra Neo
Возьмите часы реального времени и вставьте в средний верхний слот. Вставьте батарейку CR1225 в держатель на лицевой панели модуля.
Переверните Quad Display на 180 градусов и вставьте в центральный и правый слоты нижнего ряда.
Поверните четырёхкнопочную клавиатуру на 90 градусов против часовой стрелки и вставьте в правый верхний слот.
Если у вас старый модуль семисегментного индикатора (у него всего три ноги и расположены они слева), схема сборки устройства, скетч и библиотеки будут отличаться. Мы выложили их ниже, в ответах на часто задаваемые вопросы.
Скетч
Прошейте контроллер скетчем через Arduino IDE.
- digital-watchSPI.ino
// библиотека для работы I²C #include <Wire.h> // библиотека для работы с часами реального времени #include "TroykaRTC.h" // Подключаем библиотеку для работы с дисплеем #include <QuadDisplay2.h> // создаём объект класса QuadDisplay и передаём номер пина CS QuadDisplay qd(10); // пины к которым подключены кнопки #define BUTTON_PIN_1 0 #define BUTTON_PIN_2 1 #define BUTTON_PIN_3 4 #define BUTTON_PIN_4 5 // создаём объект для работы с часами реального времени RTC clock; void setup() { // инициализация дисплея qd.begin(); // инициализация часов clock.begin(); // метод установки времени и даты в модуль вручную // clock.set(10,25,45,27,07,2005,THURSDAY); // метод установки времени и даты автоматически при компиляции clock.set(__TIMESTAMP__); } void loop() { // запрашиваем данные с часов clock.read(); // считываем показания часов и минут в переменные int hour = clock.getHour(); int minute = clock.getMinute(); // выводим время на дисплей qd.displayScore(hour, minute, true); // считываем состояние пина int buttonState1 = digitalRead(BUTTON_PIN_1); int buttonState2 = digitalRead(BUTTON_PIN_2); int buttonState3 = digitalRead(BUTTON_PIN_3); int buttonState4 = digitalRead(BUTTON_PIN_4); // в зависимости от состояние кнопок // увеличиваем / уменьшаем часы и минуты if (!buttonState1) { clock.setHour(hour + 1); delay(300); } else if (!buttonState2) { clock.setHour(hour - 1); delay(300); } else if (!buttonState3) { clock.setMinute(minute - 1); delay(300); } else if (!buttonState4) { clock.setMinute(minute + 1); delay(300); } }
Что дальше?
Хотите собрать другой девайс? Выберите своё будущее устройство из списка проектов на Slot Shield.
Часто задаваемые вопросы
Где скачать необходимые библиотеки и как их установить?
У моего модуля QuadDisplay всего три ноги и расположены они слева. Можно ли использовать его в этом проекте?
Да, модуль можно использовать, но скетч, библиотеки и схема сборки отличаются.
Вставьте QuadDisplay в правый нижний слот
Прошейте контроллер скетчем через Arduino IDE.
- digital-watch.ino
// библиотека для работы I²C #include <Wire.h> // библиотека для работы с часами реального времени #include "TroykaRTC.h" // Подключаем библиотеку для работы с дисплеем #include <QuadDisplay.h> // номер цифрового пина дисплея #define DISPLAY_PIN A0 // пины к которым подключены кнопки #define BUTTON_PIN_1 0 #define BUTTON_PIN_2 1 #define BUTTON_PIN_3 4 #define BUTTON_PIN_4 5 // создаём объект для работы с часами реального времени RTC clock; void setup() { // инициализация часов clock.begin(); // метод установки времени и даты в модуль вручную // clock.set(10,25,45,27,07,2005,THURSDAY); // метод установки времени и даты автоматически при компиляции clock.set(__TIMESTAMP__); } void loop() { // запрашиваем данные с часов clock.read(); int hour = clock.getHour(); int minute = clock.getMinute(); displayTime(DISPLAY_PIN, hour, minute); // считываем состояние пина int buttonState1 = digitalRead(BUTTON_PIN_1); int buttonState2 = digitalRead(BUTTON_PIN_2); int buttonState3 = digitalRead(BUTTON_PIN_3); int buttonState4 = digitalRead(BUTTON_PIN_4); // в зависимости от состояние кнопок // увеличиваем / уменьшаем часы и минуты if (!buttonState1) { clock.setHour(hour + 1); delay(300); } else if (!buttonState2) { clock.setHour(hour - 1); delay(300); } else if (!buttonState3) { clock.setMinute(minute - 1); delay(300); } else if (!buttonState4) { clock.setMinute(minute + 1); delay(300); } delay(300); }
Скачайте и установите библиотеку для работы с «трёхногим» дисплеем.