====== Цифровые часы 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|библиотеку для работы с «трёхногим» дисплеем]].