아두이노 레시피

아두이노 레시피 : LED 깜빡이기 - 기초편

arduinochef 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를 다루면서 많이 사용할 테니

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

고생하셨어요!!ㅎㅎ