Menu
CoddyTech

Часы на NeoPixel: минуты

Часть раздела Проекты путешествия по Arduino на Coddy. Урок 22 из 24.

Плата Uno не знает время суток: millis() только отсчитывает время с момента включения питания. Поэтому скетч запускает часы со времени, записанного в него, и прибавляет секунды, прошедшие с момента включения питания. На последнем шаге добавим кнопки для настройки времени.

Храни время одним числом — количеством секунд с полуночи. 10:24:50 — это 10 часов, 24 минуты и 50 секунд:

const unsigned long startTime = 10 * 3600UL + 24 * 60 + 50;
unsigned long now = startTime + millis() / 1000;

Суффикс UL после 3600 делает сумму значением типа unsigned long. Без него плата выполняет умножение в типе int, предел которого — 32767, а произведение 10 на 3600 в него не помещается.

Секунды и минуты — это остатки от деления, поэтому каждое значение снова начинается с 0, когда достигает 60:

int seconds = now % 60;
int minutes = (now / 60) % 60;

Стрелка минут также перемещается на один пиксель каждые 5 минут — minutes / 5 — и рисуется зелёным цветом.

challenge icon

Задание

Средне

Добавь минутную стрелку:

  • часы начинаются в 10:24:50: startTime в секундах с начала суток
  • now — это startTime плюс количество секунд с момента включения питания
  • секундная стрелка: (now % 60) / 5, синяя
  • минутная стрелка: ((now / 60) % 60) / 5, зелёная ring.Color(0, 255, 0)

Нажми Run: в 10:25 минутная стрелка переместится на деление. Затем нажми Check.

Попробуйте сами

#include <Adafruit_NeoPixel.h>

const int ringPin = 6;
const int pixelCount = 12;
Adafruit_NeoPixel ring(pixelCount, ringPin, NEO_GRB + NEO_KHZ800);

void setup() {
  ring.begin();
}

void loop() {
  unsigned long seconds = millis() / 1000;  // секунды с момента включения
  int secondPixel = (seconds % 60) / 5;     // один пиксель на каждые 5 секунд

  ring.clear();
  ring.setPixelColor(secondPixel, ring.Color(0, 0, 255));
  ring.show();
  delay(100);  // перерисовывать десять раз в секунду
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Проекты

Потренируйтесь самостоятельно: Песочница Arduino