====== Цифровые часы Arduino ====== ** [[slot-box:start#хочу_собрать|Проекты на Arduino и Slot Shield]] ** Спроектировать и собрать электронные часы не так просто, как может показаться на первый взгляд. Помимо подключения энергонезависимого модуля часов реального времени, необходимо продумать как задавать текущее время. В нашем примере часы и минуты настраиваются с помощью [[amp>product/troyka-quad-switch?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|четырёхкнопочного модуля]]: верхний ряд добавляет значения, нижний — уменьшает. {{ :slot-box:digital-watch:digital-watch.jpg |}} * Платформы: [[amp>product/arduino-uno?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|Arduino Uno]], [[amp>product/arduino-leonardo?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|Arduino Leonardo]], [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|Iskra Neo]] * Язык программирования: Arduino (C++) ===== Что потребуется ===== [[amp>collection/digital-watch?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki | Полный сет]] компонентов проекта. В сет входят: * [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|Iskra Neo]] * [[amp>product/arduino-troyka-slot-shield?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|Troyka Slot Shield]] * [[amp>product/structor-slot-box?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|#Slot Box]] * [[amp>product/troyka-rtc?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|часы реального времени]] и [[amp>product/battery-cr1225?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|батарейка CR1225]] * четырёхразряный индикатор [[amp>product/troyka-quad-display?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|Quad Display]] * [[amp>product/troyka-quad-switch?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|четырёхкнопочная клавиатура]] * [[https://amperka.ru/product/nylon-screw-m3x8|Нейлоновые винты М3×8 (4 шт.)]] ===== Видеоинструкция ===== {{youtube>ti04ETFHbnM?large}} ===== Как собрать ===== Установите [[amp>product/arduino-troyka-slot-shield?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|Troyka Slot Shield]] на [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|Iskra Neo]] {{ :slot-box:digital-watch:step01.png?500 |}} Возьмите [[amp>product/troyka-rtc?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|часы реального времени]] и вставьте в средний верхний слот. Вставьте батарейку [[amp>product/battery-cr1225?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|CR1225]] в держатель на лицевой панели модуля. {{ :slot-box:digital-watch:step02.png?500 |}} Переверните [[amp>product/troyka-quad-display?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|Quad Display]] на 180 градусов и вставьте в центральный и правый слоты нижнего ряда. {{ :slot-box:digital-watch:step03.png?500 |}} Поверните [[amp>product/troyka-quad-switch?utm_source=proj&utm_campaign=slot-proj-11&utm_medium=wiki|четырёхкнопочную клавиатуру]] на 90 градусов против часовой стрелки и вставьте в правый верхний слот. {{ :slot-box:digital-watch:step04.png?500 |}} Если у вас старый модуль семисегментного индикатора (у него всего три ноги и расположены они слева), схема сборки устройства, скетч и библиотеки будут отличаться. Мы выложили их ниже, в ответах [[digital-watch#часто_задаваемые_вопросы|на часто задаваемые вопросы]]. ===== Скетч ===== Прошейте контроллер скетчем через [[articles:arduino-ide-install|Arduino IDE]]. // библиотека для работы I²C #include // библиотека для работы с часами реального времени #include "TroykaRTC.h" // Подключаем библиотеку для работы с дисплеем #include // создаём объект класса 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-box:start#хочу_собрать|списка проектов на Slot Shield]]. ===== Часто задаваемые вопросы ===== > Где скачать необходимые библиотеки и как их установить? * [[https://github.com/amperka/QuadDisplay2|Библиотека для работы с дисплеем]] * [[https://github.com/amperka/TroykaRTC|Библиотека для часов реального времени]] * [[программирование:библиотеки|Как установить библиотеку]] > У моего модуля QuadDisplay всего три ноги и расположены они слева. Можно ли использовать его в этом проекте? Да, модуль можно использовать, но скетч, библиотеки и схема сборки отличаются. Вставьте QuadDisplay в правый нижний слот {{ :slot-box:digital-watch:step03-old.png?500 |}} Прошейте контроллер скетчем через [[articles:arduino-ide-install|Arduino IDE]]. // библиотека для работы I²C #include // библиотека для работы с часами реального времени #include "TroykaRTC.h" // Подключаем библиотеку для работы с дисплеем #include // номер цифрового пина дисплея #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); } Скачайте и установите [[https://github.com/amperka/QuadDisplay|библиотеку для работы с «трёхногим» дисплеем]].