Menu
CoddyTech

타이머로 제어하는 조명

Coddy Arduino 여정의 delay 없이 타이밍 제어하기 섹션에 포함된 레슨. 18개 중 6번째.

계단 조명은 버튼을 누르면 켜지고, 조금 뒤에 저절로 꺼집니다. 조명이 켜져 있을 때 다시 누르면 시간이 처음부터 다시 시작됩니다.

이를 위해서는 두 가지가 필요합니다. 마지막으로 버튼을 누른 시각과 조명이 켜져 있는지 여부입니다. 버튼을 누르는 순간을 unsigned long에 저장합니다.

if (digitalRead(buttonPin) == LOW) {
  pressedAt = millis();     // 시간 측정을 시작(또는 다시 시작)합니다
  lightOn = true;
  digitalWrite(ledPin, HIGH);
}

그런 다음 매 루프마다 얼마나 시간이 지났는지 확인합니다.

if (lightOn && millis() - pressedAt >= onTime) {
  lightOn = false;
  digitalWrite(ledPin, LOW);
}

두 부분 모두 기다리지 않으므로 조명이 이미 켜져 있을 때도 언제든 버튼을 누른 것을 감지할 수 있습니다. 버튼을 누른 뒤 delay(2000)를 사용하면 기다리는 동안 두 번째로 누른 버튼 입력은 사라집니다.

challenge icon

챌린지

쉬움

계단 조명을 만드세요:

  • 버튼을 누르면 핀 13의 LED가 즉시 켜집니다
  • 버튼을 누른 뒤 2초가 지나면 조명이 저절로 꺼집니다
  • 조명이 켜져 있을 때 버튼을 누르면 2초 타이머가 다시 시작됩니다

Run을 누르고 버튼을 몇 번 누른 다음 Check를 누르세요.

직접 해보기

const int ledPin = 13;
const int buttonPin = 2;
const unsigned long onTime = 2000;   // 불이 켜져 있는 시간

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  // 버튼이 눌리면: LED를 켜고 그 시각을 기억합니다

  // 그때부터 onTime만큼 시간이 지나면: LED를 끕니다
}
quiz icon실력 점검

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

delay 없이 타이밍 제어하기의 모든 레슨

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