ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 아두이노 레시피 : LED 깜빡이기 - 기초편
    아두이노 레시피 2025. 2. 25. 15:32

    # Recipe 14. LED 정복하기 시리즈 : Blink

    LED, 별거 아닌 것 같지만 기초 중에 기초라고요!

    photo by create.arduino.cc

    안녕하세요~ 아두이노셰프입니다. 코딩을 배우는 사람이라면, 어떤 언어를 배우던지 처음에 "HELLO WORLD"를 출력해 봤을 거예요. 이 "HELLO WORLD"가 많은 프로그래머의 첫걸음이랍니다. 아두이노의 첫걸음은 무엇일까요? 전 BLINK라고 생각해요. 아두이노의 예제를 보면 첫 예재는 모두 BLINK 예제일만큼 아주 기본적이고 중요한 원리를 다루니까요. 이번 주는 다시 기초 편으로 돌아와서 LED부터 제대로 해보려고 합니다. 너무 쉬워 보일 수 있지만, 누군가에게는 어려울 수도 있으니까요. ‘LED제어’라는 한 주제로 다양한 프로젝트를 보여드릴게요. 대표적인 IF, FOR, WHILE 함수를 제대로 사용해 보죠. LED 뿐이지만 이걸로 다양한 알고리즘을 만들어보자고요!

    오늘은 그 첫 시간. ‘BLINK’; ‘깜빡이기’입니다.

    오늘의 재료 Ingredient


    <메인 재료>

    LED (어떤 색이든 좋습니다~)

    <그 외 재료>

    아두이노 우노

    브레드보드

    1kΩ 저항(1개)

    수-수 케이블(2개)


    메이킹 방법 Steps

    Step 1. 선 연결하기 Wiring

    a. LED 두 다리(극) 중 긴 쪽이 + , 짧은 쪽이 - 에요.(반대로 연결하시면 불이 안 들어와요!)

    b. LED의 +(긴 극)를 저항의 한쪽과 연결해 주세요.

    c. 저항의 남은 한쪽은 아두이노의 D7번에 연결해 주세요.

    d. LED의 -(짧은 극)을 아두이노의 GND에 연결해 주세요.

    (그림을 참고해 주세요!)

    - - - - - - - - - -

    Step 2. 아두이노 코드 Code review

    여러분의 요리가 훨씬 간편해질 수 있도록, 숙성이 필요한 코드는 언제나 제가 준비할게요ㅎㅎ

    Q. 질문 : LED 한 개를 1초 간격으로 깜빡이려면 어떻게 해야 할까요?

    void setup()
    {
      pinMode(7, OUTPUT);
    }
    
    void loop()
    {
      digitalWrite(7, HIGH);
      delay(1000);
      digitalWrite(7, LOW);
      delay(1000);
    }

    Q. 질문 : LED 한 개를 1초 간격으로 깜빡이려면 어떻게 해야 할까요?

    void setup()
    {
      pinMode(7, OUTPUT);
    }
    
    void loop()
    {
      digitalWrite(7, HIGH);
      delay(3000);
      digitalWrite(7, LOW);
      delay(1000);
    }

    Q. LED 한 개를 3번만 깜빡인 후에, 더 이상 동작하지 않게 하려면 어떻게 해야 할까요?

    void setup()
    {
      pinMode(7, OUTPUT);
    
      digitalWrite(7, HIGH);
      delay(1000);
      digitalWrite(7, LOW);
      delay(1000);
      digitalWrite(7, HIGH);
      delay(1000);
      digitalWrite(7, LOW);
      delay(1000);
      digitalWrite(7, HIGH);
      delay(1000);
      digitalWrite(7, LOW);
      delay(1000);
    }
    
    void loop()
    {
      
    }

    Q. LED 한 개를 10번만 깜빡인 후에, 더 이상 동작하지 않게 하려면 어떻게 해야 할까요?

    void setup()
    {
      pinMode(7, OUTPUT);
    
      for(int x=0; x<10; x++){
        digitalWrite(7, HIGH);
        delay(1000);
        digitalWrite(7, LOW);
        delay(1000);
      }
    }
    
    void loop()
    {
    }

    Step 3. 동작시키기 Working

    ● 코드를 아두이노 우노에 업로드해 주세요.

    ● 코드를 하나씩 업로드하여 동작시켜 보세요. 질문한 대로 잘 동작되나요?


    코드의 동작 알고리즘

    알고리즘은 쉬운 말로 ‘진행절차’라고 할 수 있습니다.

    코드가 어떻게 동작되는지 알아볼까요?

    오늘의 코드들의 주요 함수는 pinMode()와 digitalWrite() 이 두 가지뿐입니다.

    각 함수에 대해서 간단히 설명하자면

    pinMode는 아두이노의 핀들(디지털, 아날로그)의 '상태'를 지정하는 함수입니다.

    우리가 D7번 핀을 사용할 거잖아요.

    LED를 켜야 하니, 전기신호를 읽는 게 아니라 전기신호를 주어야겠죠.

    그래서 pinMode함수를 이용해서 D7번 핀의 상태를 OUTPUT모드로 바꿨어요.

    그리고 digitalWrite함수는 말 그대로 digital신호를 주는 함수입니다.

    전기를 내보낸다는 말이에요.

    HIGH면 전기를 내보내는 거고, LOW이면 끕니다.

    OUTPUT모드로 바꿨으니,

    실제 전기를 켜고 끄기 위해서 digitalWrite함수를 사용했어요.

    자, 이제 질문에 대한 답을 알아볼까요?

    Q. 질문 : LED 한 개를 1초 간격으로 깜빡이려면 어떻게 해야 할까요?

    LED를 1초 간격으로 깜빡이려면

    말 그대로, 1초간 켜고, 1초간 끄면 되겠네요.

    delay함수를 이용해서 1초간 현 상태를 유지하게 했습니다.

    이전 명령어가 실행된 상태에서, 정해진 시간만큼 다음 명령을 실행하지 않아요.

    (아두이노에서는 1000이 1초랍니다.)

    void loop() 안에 있으니, 해당코드가 반복실행되면서

    '깜빡'이는 것처럼 실행될 겁니다.

    Q. 질문 : LED 한 개를 3초간 켜고, 1초간 끄려면 어떻게 해야 할까요?

    이것도 어렵지 않겠죠?

    3초간 켜고, 1초간 끄면 되니까요.

    HIGH신호를 주고 delay(3000)을 하면 3초간 켤 거고,

    LOW신호를 주고 delay(1000)을 하면 1초간 끄겠네요.

    void loop() 안에 있으니, 해당코드가 반복실행되면서

    '깜빡'이는 것처럼 실행될 겁니다.

    Q. LED 한 개를 3번만 깜빡인 후에, 더 이상 동작하지 않게 하려면 어떻게 해야 할까요?

    3번만 깜빡이고 더 이상 동작하지 않게 하려면

    void loop() 함수 안에 있으면 안 되겠네요.

    그러면 한 번만 실행되는 void setup함수 안에서 3번만 켜고 끄면 되겠네요.

    무식한 게 가장 단순하지요.ㅋㅋ

    코드를 복붙 해서 HIGH, LOW신호를 3번만 줍시다ㅋ

    Q. LED 한 개를 10번만 깜빡인 후에, 더 이상 동작하지 않게 하려면 어떻게 해야 할까요?

    이것도 더 이상 동작하지 않게 하는 거니까

    코드들이 void setup함수 안에 있어야겠네요.

    그런데 아까처럼 그냥 복붙 하면 코드가 너무 길어지죠..

    한 번 '깜빡'이는데 코드 4줄이니까....

    10번 반복하면 40줄....

    이야... 뭐 어려운 동작도 아닌데 코드가 엄청 길어지네요.

    만약 딱 100번만 깜빡이고 싶다면?

    1000줄의 코드를 작성해야 되나요?

    loop안에는 작성하면 안 되잖아요...ㅠㅠ 끝이 나질 않으니.

    이럴 때 사용하는 제어문이 있는데

    바로 for문입니다.

    if문, while문처럼 특별한 조건을 만들 때 사용합니다.

    if문이, "~라면 ~해라"라는 조건문이었다면

    for문은 "~하는 동안, ~해라"입니다.

    단, ~동안이라는 조건에 끝나는 시기도 정해주어야 돼요.

    코드로 살펴볼까요?

    for(int x =0; x <10; x++)

    for문에는 총 3가지 조건이 들어가야 돼요.

    for(시작조건, 종료조건, 상태)

    한 문장으로 표현하면,

    "0인 x를 1씩 증가시키고 x가 10이 되기 전까지 해당코드를 반복하라"

    (조금 어렵죠..)

    int x= 0;라는 변수를 만들고,

    x <10이라는 종료조건을 만들어서

    x++로 x의 상태를 변화시켜 종료조건이 되게끔 만듭니다.

    (x++는 x+1이라는 뜻입니다.)

    그러면 0부터 1,2,3,4,5,6,7,8,9까지 x가 1씩 더해지는 동안

    총 10번 코드가 실행될 거고,

    마지막 10이 되는 순간

    x <10이라는 조건에 부합하지 않기 때문에

    종료됩니다.

    결론적으로 딱 10번만 해당코드를 실행시킬 수 있는 것이죠.

    for함수는 여러분이 알고리즘을 만들 때,

    아주 유용하게 쓰일 조건문입니다.

    조건들을 직접 바꿔보면서 연습해 보세요~!!

    (앞으로 LED를 다루면서 많이 사용할 테니

    지금 당장 이해가 되지 않아도 괜찮아요~~)

    고생하셨어요!!ㅎㅎ

Designed by Tistory.