2017-12-19

Arduino LED blink without delay

아두이노 자습서 : Delay 없이 LED 깜빡이기

때때로 한 번에 두 가지 일을 할 필요가 있다.
예를들어 버튼 읽기를 기다리는 동안 LED를 깜빡이길 바랄 거다.
이 경우, delay()를 쓸 수 없는데, 왜냐면
아두이노는 delay() 동안 여러분의 프로그램을 멈추기 때문이다.
아두이노가 delay() 가 지나길 기다리는 동안 버튼이 눌려진다면,
여러분의 프로그램은 버튼 눌림을 놓칠 거다.

이 스케치는 delay()를 쓰지 않고 어떻게 LED를 깜빡일지 보여준다.
LED는 켜지고 그 시간을 기록한다.
그러면,  loop() 가 도는 각 시간마다, 요구되는 깜빡임 시간이 지났는지 점검한다.
그렇게 되면, LED 켜짐 또는 꺼짐은 토글하고 새 시간을 기록한다.
이 방법으로 LED 깜빡임이 계속되며 스케치 실행 동안 단일 명령에 뒤지지 않는다.

비슷한 것이 전자렌지에서 피자를 데우며, 어떤 중요한 이메일을 기다리는 거다.
피자를 전자렌지에 넣고 10분을 맞춘다.
delay()를 쓰는 것과 비슷한 것은 전자렌지 앞에 앉아 카운트가 10분에서 0 될 때까지 시간을 보는 거다.
중요한 메일이 그 시간동안 도착하면 그걸 놓칠 수 있다.

여러분이 실생활에서 할 일은 피자로 돌아와서, 여러분의 메일을 체크하고, 뭔가 다른 일을 하고
(그리 오래 걸리지 않는다!) 전자렌지로 자주 돌아와서 시간이 0이 되어 피자가 다 되었는지 보는 거다.

이 투토리얼에서 여러분은 비슷한 타이머를 어떻게 맞추는지 배울 거다.

하드웨어 요구사항

- 아두이노 또는 제누이노 보드
-  LED
- 220옴 저항

회로

회로를 만들기 위해, 저항의 한 끝을 보드의 핀 13에 연결한다.
LED의 긴 다리(+ 다리, anode라 불림)를 저항의 다른 끝에 연결한다.
LED의 짧은 다리(- 다리, cathode라 불림)를 위 그림과 아래 회로도와 같이 보드의 GND에 연결한다.

대부분의 아두이노와 제누이노 보드는 이미 핀 13에 LED가 붙어있다.
이 예를 하드웨어 없이 돌리면, LED 깜빡임을 볼 것이다.

회로도

회로도를 보드에 만들고 컴퓨터에 연결하고, 아두이노 소프트웨어(IDE)를 시작하고, 아래 코드를 입력하라.

코드

아래 코드는 LED를 깜빡이기 위해 millis() 함수를 쓰는데, 이 함수는 보드가 현재 스케치를 돌리기 시작한 다음 지나간 밀리초 수를 반환한다.

/*
  Blink without Delay

  Turns on and off a light emitting diode (LED) connected to a digital pin,
  without using the delay() function. This means that other code can run at the
  same time without being interrupted by the LED code.

  The circuit:
  - Use the onboard LED.
  - Note: Most Arduinos have an on-board LED you can control. On the UNO, MEGA
    and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN
    is set to the correct LED pin independent of which board is used.
    If you want to know what pin the on-board LED is connected to on your
    Arduino model, check the Technical Specs of your board at:
    https://www.arduino.cc/en/Main/Products

  created 2005
  by David A. Mellis
  modified 8 Feb 2010
  by Paul Stoffregen
  modified 11 Nov 2013
  by Scott Fitzgerald
  modified 9 Jan 2017
  by Arturo Guadalupi

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// constants won't change. Used here to set a pin number:
const int ledPin =  LED_BUILTIN; // LED 핀 번호

// Variables will change:
int ledState = LOW;             // ledState 써서 LED 맞춤

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // LED 가 업데이트된 마지막 시간

// constants won't change:
const long interval = 1000;           // 깜빡일 간격 (마이크로 초)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the difference
  // between the current time and last time you blinked the LED is bigger than
  // the interval at which you want to blink the LED.
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // LED 를 깜빡인 마지막 시간 저장
    previousMillis = currentMillis;

    // LED 가 켜졌으면 끄고, 그 반대도 함
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // LED 맞춤 ledState 변수:
    digitalWrite(ledPin, ledState);
  }
}

위 글은 https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay 를 번역한 것입니다.
그림과 회로도는 원문을 참고하셔요.

댓글 없음:

댓글 쓰기