모드를 기억하기
Coddy Arduino 여정의 delay 없이 타이밍 제어하기 섹션에 포함된 레슨. 18개 중 7번째.
버튼을 누르는 시간은 1초도 안 되지만, 버튼을 눌러 시작한 동작은 훨씬 더 오래 지속될 수 있습니다. 버튼에서 손을 뗀 후에도 계속 동작하려면 스케치가 현재 무엇을 하고 있는지 기억해야 합니다. 이를 위한 변수를 상태 또는 모드라고 합니다.
int mode = 0; // 0 = 꺼짐, 1 = 깜빡임loop()를 두 부분으로 나누세요. 먼저 입력에 따라 모드만 변경합니다. 그런 다음 루프의 나머지 부분에서 모드가 지시하는 동작을 수행합니다.
// 1. 입력에 따라 모드가 바뀐다
if (digitalRead(blinkButton) == LOW) {
mode = 1;
}
// 2. 모드에 따라 동작이 결정된다
if (mode == 1) {
// millis()를 사용해 깜박인다
} else {
digitalWrite(ledPin, LOW);
}각 숫자는 스케치가 수행할 수 있는 동작 하나를 나타냅니다. 각 숫자가 무엇을 의미하는지 주석으로 작성하세요. 스케치에는 필요한 만큼 모드를 둘 수 있습니다. 0, 1, 2, 3 등을 사용할 수 있습니다.
챌린지
쉬움초록색 버튼은 핀 2에 있고 빨간색 버튼은 핀 3에 있습니다.
- 초록색 버튼을 누르면
mode가 1로 설정되고, 빨간색 버튼을 누르면 0으로 설정됩니다. mode가 1이면 핀 13의 LED가millis()를 사용해 깜빡입니다. 켜짐 500 ms, 꺼짐 500 ms입니다.mode가 0이면 LED가 꺼집니다.
Run을 누르고, 초록색 버튼을 눌렀다가 놓은 다음 빨간색 버튼을 누르세요. 그런 다음 Check를 누르세요.
직접 해보기
const int ledPin = 13;
const int blinkButton = 2; // 초록색
const int offButton = 3; // 빨간색
int mode = 0; // 0 = 꺼짐, 1 = 깜박임
unsigned long previousMillis = 0;
int ledState = LOW;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(blinkButton, INPUT_PULLUP);
pinMode(offButton, INPUT_PULLUP);
}
void loop() {
// 1. 버튼은 mode만 변경한다
// 2. 그런 다음 mode에 따라 동작한다
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
delay 없이 타이밍 제어하기의 모든 레슨
직접 연습해 보세요: Arduino 플레이그라운드