Menu
CoddyTech

Часы на NeoPixel: секунды

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

Последний проект — часы без цифр: кольцо из 12 NeoPixels, как 12 часов на циферблате, где каждая стрелка — цветной светодиод. Пиксель 0 находится наверху, на отметке 12 часов, а числа идут по кругу по часовой стрелке. Две кнопки будут устанавливать время.

Сначала — секундная стрелка. В минуте 60 секунд, а в кольце 12 пикселей, поэтому стрелка перемещается на один пиксель каждые 5 секунд.

seconds % 60 считает от 0 до 59, а затем снова начинает с 0, как секунды на часах. Целочисленное деление на 5 преобразует числа от 0 до 59 в числа от 0 до 11:

unsigned long seconds = millis() / 1000;
int secondPixel = (seconds % 60) / 5;

При каждом проходе loop() рисуй кольцо заново: ring.clear(), установи пиксель стрелки, ring.show(). Если не очистить кольцо, старые позиции останутся гореть, и оно заполнится. Десяти перерисовок в секунду вполне достаточно, поэтому начальный код заканчивается на delay(100).

challenge icon

Задание

Средне

Кольцо подключено к пину 6. Нарисуй секундную стрелку:

  • вычисли количество секунд с момента включения с помощью millis() / 1000
  • пиксель стрелки — это (seconds % 60) / 5
  • очисти кольцо, зажги этот пиксель синим цветом с помощью ring.Color(0, 0, 255) и покажи его

Оставь delay(100). Нажми Run и посмотри, как стрелка движется по кругу, затем нажми 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() {
  // определи положение секундной стрелки и нарисуй её синим цветом

  delay(100);  // перерисовывай десять раз в секунду
}
quiz iconПроверьте себя

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

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

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