LED 두 개, 속도 두 가지
Coddy Arduino 여정의 delay 없이 타이밍 제어하기 섹션에 포함된 레슨. 18개 중 4번째.
delay()를 사용하면 서로 다른 속도로 깜박이는 두 LED는 골칫거리입니다. 한쪽이 기다릴 때마다 다른 쪽 LED도 멈추기 때문입니다. millis()를 사용하면 아무것도 기다리지 않으므로 쉽습니다.
각 작업에 고유한 변수를 지정하세요. 각 작업마다 마지막 시간과 상태 변수를 따로 둡니다. 그런 다음 각 작업에 대해 loop() 안에 고유한 if를 작성하세요. 루프가 반복될 때마다 각 작업은 자체 시계를 확인하고 시간이 되었을 때만 동작합니다:
unsigned long redPrevious = 0;
unsigned long greenPrevious = 0;
void loop() {
unsigned long now = millis();
if (now - redPrevious >= 500) {
redPrevious = now;
// 빨간색 LED의 상태를 전환
}
if (now - greenPrevious >= 200) {
greenPrevious = now;
// 초록색 LED의 상태를 전환
}
}두 작업은 서로 방해하지 않습니다. 같은 방식으로 세 번째와 네 번째 작업을 추가할 수 있습니다. 각각 변수 한 묶음과 if 하나씩이면 됩니다.
두 작업이 마지막 시간 변수를 공유하게 하지 마세요. 더 빠른 작업이 변수를 너무 자주 초기화해서 느린 작업은 간격에 도달하지 못합니다.
챌린지
쉬움13번 핀의 빨간색 LED는 이미 500ms마다 전환됩니다. 초록색 LED도 12번 핀에서 동시에 200ms마다 전환되도록 하세요:
greenPrevious및greenState변수를 추가하세요- 초록색 LED를 위한 두 번째
if를loop()에 추가하세요
Run을 눌러 두 LED가 깜박이는 모습을 확인한 다음, Check를 누르세요.
직접 해보기
const int redLed = 13;
const int greenLed = 12;
unsigned long redPrevious = 0;
int redState = LOW;
// 여기에 초록색 LED의 변수 두 개를 추가하세요
void setup() {
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
}
void loop() {
unsigned long now = millis();
// 빨간색 LED는 500 ms마다 상태가 바뀝니다
if (now - redPrevious >= 500) {
redPrevious = now;
if (redState == LOW) {
redState = HIGH;
} else {
redState = LOW;
}
digitalWrite(redLed, redState);
}
// 여기에서 초록색 LED의 상태가 200 ms마다 바뀌도록 하세요
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
delay 없이 타이밍 제어하기의 모든 레슨
직접 연습해 보세요: Arduino 플레이그라운드