Menu
CoddyTech

NeoPixel 시계: 분

Coddy Arduino 여정의 프로젝트 섹션에 포함된 레슨. 24개 중 22번째.

Uno는 하루 중 시간을 알지 못합니다. millis()는 전원이 켜진 순간부터만 셉니다. 따라서 스케치는 저장된 시간으로 시계를 시작하고 전원이 켜진 이후 경과한 초를 더합니다. 마지막 단계에서는 시간을 설정하는 버튼을 추가합니다.

시간은 자정 이후 경과한 초를 하나의 숫자로 나타냅니다. 10:24:50은 10시간, 24분, 50초입니다.

const unsigned long startTime = 10 * 3600UL + 24 * 60 + 50;
unsigned long now = startTime + millis() / 1000;

3600 뒤의 UL은 합계의 형식을 unsigned long으로 만듭니다. 이것이 없으면 보드는 int로 곱셈을 수행하며, int는 32767에서 멈추기 때문에 10 곱하기 3600은 범위를 벗어납니다.

초와 분은 나머지 값이므로, 각각 60에 도달하면 다시 0부터 시작합니다.

int seconds = now % 60;
int minutes = (now / 60) % 60;

분침은 5분마다 픽셀 하나씩 이동하며, minutes / 5로 계산하고 초록색으로 그립니다.

challenge icon

챌린지

중급

분침을 추가합니다:

  • 시계는 10:24:50에 시작합니다: 자정 이후의 초 단위로 나타낸 startTime
  • now는 startTime에 전원이 켜진 이후 경과한 초를 더한 값입니다
  • 초침: (now % 60) / 5, 파란색
  • 분침: ((now / 60) % 60) / 5, 초록색 ring.Color(0, 255, 0)

Run을 누릅니다. 10:25에 분침이 한 칸 이동합니다. 그런 다음 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() {
  unsigned long seconds = millis() / 1000;  // 전원을 켠 후 경과한 시간(초)
  int secondPixel = (seconds % 60) / 5;     // 5초마다 픽셀 하나

  ring.clear();
  ring.setPixelColor(secondPixel, ring.Color(0, 0, 255));
  ring.show();
  delay(100);  // 초당 10번 다시 그리기
}
quiz icon실력 점검

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

프로젝트의 모든 레슨

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