Menu
CoddyTech

누를 때마다 토글하기

Coddy Arduino 여정의 입력 섹션에 포함된 레슨. 22개 중 4번째.

지금까지 LED는 버튼을 따라 켜지고 꺼졌습니다. 버튼을 누르고 있는 동안 켜지고, 놓으면 꺼졌습니다. 전등 스위치는 다르게 작동합니다. 한 번 누르면 켜지고, 다시 누르면 꺼집니다. 이것을 토글이라고 합니다.

토글하려면 스케치는 버튼이 눌리는 순간을 알아차려야 합니다. 즉, 지금은 눌려 있지만 이전에 loop()가 실행됐을 때는 눌려 있지 않았던 순간입니다. 이 순간을 에지라고 합니다. 카운터처럼 setup() 위에 변수를 선언해 마지막 읽기 값을 저장하세요.

int lastReading = HIGH;

void loop() {
  int reading = digitalRead(2);
  if (reading == LOW && lastReading == HIGH) {
    // 버튼이 눌렸습니다
  }
  lastReading = reading;
}

버튼을 누르고 있는 동안 읽기 값은 LOW로 유지되므로, 얼마나 오래 누르고 있든 누를 때마다 에지는 한 번 발생합니다.

bool을 뒤집으려면 "아님"을 뜻하는 !를 사용하세요. ledOn = !ledOn;은 true를 false로 바꾸고, 다시 그 반대로 바꿉니다.

challenge icon

챌린지

중급

버튼은 2번 핀(INPUT_PULLUP)에 연결되어 있고 LED는 13번 핀에 연결되어 있습니다. 버튼을 누를 때마다 LED 상태를 전환하세요:

  • 버튼이 눌리면(LOW가 현재 값이고, 이전 값은 HIGH), ledOn을 반전하세요
  • loop()의 끝에서 읽은 값을 lastReading에 저장하세요
  • ledOn에 맞춰 LED를 켜거나 끄세요

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

직접 해보기

const int buttonPin = 2;
const int ledPin = 13;

bool ledOn = false;
int lastReading = HIGH;

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

void loop() {
  int reading = digitalRead(buttonPin);
  // 버튼을 누르면 ledOn 값을 반전합니다
  // 다음 번을 위해 이 읽기 값을 기억합니다
  // ledOn 값에 맞게 LED를 켜거나 끕니다
}
quiz icon실력 점검

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

입력의 모든 레슨

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