버튼을 눌러 전환하면서 깜박이기
Coddy Arduino 여정의 delay 없이 타이밍 제어하기 섹션에 포함된 레슨. 18개 중 5번째.
대기하지 않는 스케치는 버튼을 감지하면서 동시에 깜박임을 실행할 수 있습니다. 각 루프는 몇 마이크로초밖에 걸리지 않으므로, 보드는 버튼을 초당 수천 번 확인하고 아주 짧은 탭도 감지합니다.
깜박임은 millis() 패턴입니다. 버튼은 Inputs 섹션의 에지 확인 방식입니다. 즉, 지금 버튼이 눌려 있고 이전 루프에서는 눌려 있지 않았을 때 동작합니다. !는 "아님"을 의미하므로, !wasPressed는 "눌려 있지 않았음"으로 읽습니다.
bool wasPressed = false;
void loop() {
// 깜박임: if (now - previous >= 500) { ... }
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed && !wasPressed) {
// 버튼이 방금 눌렸습니다
}
wasPressed = pressed;
}두 부분을 모두 loop() 안에 차례로 넣고, 둘 다에서 delay()를 사용하지 마세요. 깜박임이 500 ms 동안 기다린다면, 기다리는 동안 시작되고 끝나는 탭은 감지되지 않습니다.
챌린지
중급보드가 두 가지 작업을 동시에 하도록 하세요.
- 핀 13의 빨간색 LED가
millis()를 사용해 500 ms마다 전환됩니다. - 버튼을 누를 때마다 핀 12의 노란색 LED가 켜졌다가, 꺼졌다가, 다시 켜집니다.
버튼을 짧게 눌러도 언제든 작동해야 하며, 버튼을 길게 누르면 노란색 LED는 한 번만 전환됩니다. Run을 누르고, 버튼을 짧게 누른 다음, Check를 누르세요.
직접 해보기
const int redLed = 13;
const int yellowLed = 12;
const int buttonPin = 2;
void setup() {
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// 1. millis()를 사용하여 500 ms마다 빨간색 LED의 상태를 전환합니다
// 2. 버튼을 누를 때마다 노란색 LED가 켜지거나 꺼집니다
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
delay 없이 타이밍 제어하기의 모든 레슨
직접 연습해 보세요: Arduino 플레이그라운드