Menu
CoddyTech

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 하나씩이면 됩니다.

두 작업이 마지막 시간 변수를 공유하게 하지 마세요. 더 빠른 작업이 변수를 너무 자주 초기화해서 느린 작업은 간격에 도달하지 못합니다.

challenge icon

챌린지

쉬움

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마다 바뀌도록 하세요
}
quiz icon실력 점검

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

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

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