NeoPixel 시계: 시곗바늘 혼합하기
Coddy Arduino 여정의 프로젝트 섹션에 포함된 레슨. 24개 중 23번째.
시침은 빨간색입니다. 시계판은 12시간을 표시하므로 시침은 (now / 3600) % 12입니다. 즉, 0부터 11까지이며, 0은 12시를 나타냅니다. 이 값은 이미 픽셀 번호입니다.
이제 시곗바늘이 만날 수 있습니다. 10:24:52에는 초침이 픽셀 10에 있어 시침 위에 겹칩니다. 차례로 그리면 두 번째 바늘이 첫 번째 바늘을 덮어 한 바늘이 사라집니다.
대신 빛을 섞을 수 있습니다. 각 시곗바늘에 고유한 색상 채널(시침은 빨간색, 분침은 초록색, 초침은 파란색)을 지정하고, 각 픽셀을 그 위에 있는 시곗바늘에 따라 만듭니다.
for (int i = 0; i < pixelCount; i++) {
int r = 0;
int g = 0;
int b = 0;
if (i == hourPixel) {
r = 255;
}
if (i == minutePixel) {
g = 255;
}
if (i == secondPixel) {
b = 255;
}
ring.setPixelColor(i, ring.Color(r, g, b));
}시곗바늘이 만나는 곳에서는 색상 채널이 더해집니다. 빨간색과 파란색은 자홍색, 초록색과 파란색은 청록색, 빨간색과 초록색은 노란색이 됩니다. 매 반복마다 모든 픽셀이 설정되므로, 이 루프는 ring.clear()도 대신합니다.
챌린지
어려움시침을 추가하고 바늘들을 혼합하세요:
- 시간은
(now / 3600) % 12이며, 해당 픽셀에 표시됩니다 for루프에서 모든 픽셀을 구성하세요. 시침이 있는 곳은 빨간색 255, 분침은 초록색 255, 초침은 파란색 255로 설정합니다
Run을 누르세요. 시계는 초침과 시침이 겹친 상태로 10:24:50에 시작합니다. 그런 다음 Check를 누르세요.
직접 해보기
#include <Adafruit_NeoPixel.h>
const int ringPin = 6;
const int pixelCount = 12;
Adafruit_NeoPixel ring(pixelCount, ringPin, NEO_GRB + NEO_KHZ800);
// 시계가 시작하는 시각, 자정부터 지난 초 단위: 10:24:50
const unsigned long startTime = 10 * 3600UL + 24 * 60 + 50;
void setup() {
ring.begin();
}
void loop() {
unsigned long now = startTime + millis() / 1000; // 하루 중 현재 시각, 초 단위
int seconds = now % 60;
int minutes = (now / 60) % 60;
ring.clear();
ring.setPixelColor(seconds / 5, ring.Color(0, 0, 255)); // 초침: 파란색
ring.setPixelColor(minutes / 5, ring.Color(0, 255, 0)); // 분침: 초록색
ring.show();
delay(100); // 초당 10번 다시 그리기
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
프로젝트의 모든 레슨
직접 연습해 보세요: Arduino 플레이그라운드