Menu
CoddyTech

NeoPixel 时钟:秒

本课属于 Coddy Arduino 学习旅程的“项目”单元。第 21 课,共 24 课。

最后一个项目是一个没有数字的时钟:由 12 个 NeoPixels 组成的圆环,像钟面上的 12 个小时刻度,每根指针都是一盏彩色灯。Pixel 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()。如果不清除,旧位置会继续亮着,圆环就会逐渐亮满。每秒重绘 10 次就足够了,所以入门代码最后会调用delay(100)。

challenge icon

挑战

中等

灯环连接在引脚 6 上。画出秒针:

  • 用 millis() / 1000 算出通电后的秒数
  • 秒针对应的像素是 (seconds % 60) / 5
  • 清空灯环,用 ring.Color(0, 0, 255) 点亮对应的蓝色像素,并显示出来

保留 delay(100)。按“运行”,观察秒针转动,然后按“检查”。

亲手试试

#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);  // 每秒重绘 10 次
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

项目中的所有课

自己练习: Arduino 在线编辑器