Menu
CoddyTech

모드를 기억하기

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 등을 사용할 수 있습니다.

challenge icon

챌린지

쉬움

초록색 버튼은 핀 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에 따라 동작한다
}
quiz icon실력 점검

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

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

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