Часы с кнопками

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

Задавать часы текущее время с компьютера совсем не удобно. Добавим к четырёхразрядному индикатору маленькую клавиатуру настраивать время станет гораздо проще.

Мозгом таких часов станет оригинальная Arduino Uno, а корпусом — Troyka Slot Shield. На сборку такого гаджета уйдёт меньше минуты.

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

Полный сет компонентов проекта. В сет входят:

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

Как собрать

Установите Troyka Slot Shield на Arduino Uno

Вставьте Quad Display в разъёмы E и F. Пин CS подключу к 10 пину Arduino.

Установите четырёхкнопочную клавиатуру в слот C. Сигнал первой кнопки подключите к пину 0, второй к 1, третьей к 4 и четвёртой к 5.

Скетч

Прошейте контроллер скетчем через Arduino IDE.

clock-with-buttons.ino
// Подключаем библиотеку для работы с дисплеем
#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
// задаем длительность
#define INTERVAL_SECOND 1000
 
// создаем объекты класса int для хранения текущего значения Часов, Минут, Секунд
int hours = 0;
int minutes = 0;
int seconds = 0;
// создаем объекты класса long для хранения счетчика и изменения времени
long lastTime = 0;
long lastTimeButton = 0;
 
 
void setup() {
  //инициализация кнопок
  pinMode(BUTTON_PIN_1,INPUT_PULLUP);
  pinMode(BUTTON_PIN_2,INPUT_PULLUP);
  pinMode(BUTTON_PIN_3,INPUT_PULLUP);
  pinMode(BUTTON_PIN_4,INPUT_PULLUP);
 
  // инициализация дисплея
  qd.begin();
}
 
void loop() {
  // запускаем цикл с заданным интервалом
  while(millis() - lastTime > INTERVAL_SECOND) {
    // обновляем  lastTime и добавляем к счетчику Секунд +1
    lastTime=millis();
    seconds++;
    // как только счетчик секунд достигнет 60, обнуляем его и добавляем к счетчику Минут +1...
    if (seconds >= 60) {
       seconds = 0;
       minutes++;
    }
     // ...тоже самое для Часов...
    if (minutes >= 60) {
       minutes = 0;
       hours++;
    }
     // ... и обнуляем счетчик Часов в конце дня
    if (hours >= 24) {
       hours = 0;
    }
  }
  // в зависимости от состояние кнопок увеличиваем / уменьшаем часы и минуты
  if (millis() - lastTimeButton>500 && !digitalRead(BUTTON_PIN_1)) {
    hours++;
    lastTimeButton = millis();
    } 
  if (millis() - lastTimeButton>500 && !digitalRead(BUTTON_PIN_2)) {
    hours--;
    lastTimeButton = millis();
    //устанавливаем защиту от перехода через 0 для Часов
    if (hours < 0) {
        hours = 23;
      }
    }
  if (millis() - lastTimeButton>500 && !digitalRead(BUTTON_PIN_3)) {
      minutes--;
      lastTimeButton = millis();
      //устанавливаем защиту от перехода через 0 для Минут
      if (minutes < 0) {
          minutes = 59;
        }
    }
  if (millis() - lastTimeButton>500 && !digitalRead(BUTTON_PIN_4)) {
      minutes++;
      lastTimeButton = millis();
    }
  // выводим время на дисплей
  qd.displayScore(hours, minutes, true);
}

Часто задаваемые вопросы

Где скачать необходимые библиотеки и как их установить?
У моего модуля QuadDisplay всего три ноги и расположены они слева. Можно ли использовать его в этом проекте?

У вас предыдущая версия модуля. Она снята с производства пару лет назад. С этим скетчем, библиотекой и схемой сборки модуль работать не будет.