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)。
挑战
中等灯环连接在引脚 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 次
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
项目中的所有课
自己练习: Arduino 在线编辑器