Menu
CoddyTech

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()도 대신합니다.

challenge icon

챌린지

어려움

시침을 추가하고 바늘들을 혼합하세요:

  • 시간은 (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번 다시 그리기
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

프로젝트의 모든 레슨

직접 연습해 보세요: Arduino 플레이그라운드