Цифровые часы Arduino

Проекты на Arduino и Slot Shield

Спроектировать и собрать электронные часы не так просто, как может показаться на первый взгляд.

Помимо подключения энергонезависимого модуля часов реального времени, необходимо продумать как задавать текущее время. В нашем примере часы и минуты настраиваются с помощью четырёхкнопочного модуля: верхний ряд добавляет значения, нижний — уменьшает.

Что потребуется

Видеоинструкция

Как собрать

Установите 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.displayTime(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);
  }
}

Что дальше?

Хотите собрать другой девайс? Выберите своё будущее устройство из списка проектов на 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);
}

Скачайте и установите библиотеку для работы с «трёхногим» дисплеем.