Часы на 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 — и рисуется зелёным цветом.
Задание
СреднеДобавь минутную стрелку:
- часы начинаются в 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); // перерисовывать десять раз в секунду
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Проекты
3Парковочный датчик
Парковочный датчик: расстояниеПарковочный датчик: световые сигналыПарковочный датчик: звуковые сигналыПарковочный датчик: дисплей6Часы на NeoPixel
Часы на NeoPixel: секундыЧасы на NeoPixel: минутыЧасы на NeoPixel: смешиваем стрелкиЧасы на NeoPixel: устанавливаем времяПотренируйтесь самостоятельно: Песочница Arduino