====== Цифровые часы на Arduino Uno====== ** [[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|четырёхкнопочная клавиатура]] ===== Видеоинструкция ===== {{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 |}} ===== Скетч ===== Прошейте контроллер скетчем через [[articles:arduino-ide-install|Arduino IDE]]. // Подключаем библиотеку для работы с дисплеем #include // создаём объект класса QuadDisplay и передаём номер пина CS QuadDisplay qd(10); // создаем объекты класса bute для хранения текущего значения Часов, Минут, Секунд int hours = 0; int minutes = 0; int seconds = 0; // создаем объект класса long для хранения счетчика long lastTime = 0; void setup() { // инициализация дисплея qd.begin(); // инициализируем время setTime(__TIMESTAMP__); } void loop() { // как только разница между текущим временем и временем записанным в lastTime становится больше 1000 миллисекунд... while(millis()-lastTime > 1000) { //...обновляем lastTime и добавляем к счетчику Секунд +1 lastTime = millis(); seconds++; // как только счетчик секунд достигнет 60, обнуляем его и добавляем к счетчику Минут +1... if (seconds >= 60) { seconds = 0; minutes++; } // ...тоже самое для Часов... if (minutes >= 60) { minutes = 0; hours++; } // ... и обнуляем счетчик Часов в конце дня if (hours >= 24) { hours = 0; } } // выводим время на дисплей qd.displayScore(hours, minutes, true); } // функция записи текущего времени в переменные void setTime(const char* compileTimeStamp) { hours = ((compileTimeStamp[11] - '0') * 10 + (compileTimeStamp[12] - '0')); minutes = ((compileTimeStamp[14] - '0') * 10 + (compileTimeStamp[15] - '0')); seconds = ((compileTimeStamp[17] - '0') * 10 + (compileTimeStamp[18] - '0')); } ====== Что дальше? ====== Хотите собрать другой девайс? Выберите своё будущее устройство из [[slot-box:start#хочу_собрать|списка проектов на Slot Shield]]. ====== Часто задаваемые вопросы ====== > Где скачать необходимые библиотеки и как их установить? * [[https://github.com/amperka/QuadDisplay2|Библиотека для работы с дисплеем]] * [[https://github.com/amperka/TroykaRTC|Библиотека для часов реального времени]] * [[программирование:библиотеки|Как установить библиотеку]]