본문 바로가기
소프트웨어

[아두이노를 배워봅시다!] 통신기능을 이용해서 LED를 켜보자.

by 블루덕 2023. 3. 28.

아두이노 UNO 보드의 LED를 통신기능을 이용해서 켜고 끄는 실습을 한번 해봅시다. 방법은 매우 쉽고 간단합니다. 

 

일단 코드를 한번 작성해 봅시다. 

코드가 좀 길어지기는 했습니다. 그런데 어렵지 않으니까 한줄식 이해를 해보면 좋을것 같습니다. 일단 이코드를 아두이노 IDE에 적어주어야 합니다. 그런데 오타가 있으면 당연히 작동을 하지 않겠죠? 

 

아래에 코드 텍스트 파일을 넣어둘테니 다운받아서 나의 아두이노 IDE에 넣어줍니다. 

 

code.txt
0.00MB

 

한줄씩 설명을 해볼까요?

첫번째 줄입니다.  

 

String data;

data라고 하는 글자를 넣어주는 변수를 하나 만들어줍니다. 일단 데이타라는 변수안에 글자를 넣어주기 위해서 만들어주는 겁니다. 

 

void setup() {
  Serial.begin(9600);
  pinMode(13,OUTPUT);
}

 

void setup() {    }는 설정하는 공간이라고 앞시간에 이야기를 했죠?

그안에 내용을 봅시다. 

 

Serial.begin() 명령은 시리얼 통신을 사용하도록 해주는 명령어 입니다. 

안에 적힌 숫자 9600은 통신 속도 입니다. 통신속도 숫자가 높은 숫자일 수록 통신속도는 증가합니다. 우리는 기본적으로 사용하는 9600 이라는 숫자를 사용할 겁니다. 

 

pinMode (13, OUTPUT)은 이제 이해되죠? 디지털 핀 13번을 출력으로 사용하겠다는 의미이죠. 13번 핀은 아두이노 UNO보드의 LED와 연결이 되어있습니다. 

 

아래는 이제 loop 코드 부분입니다. 노란색 하이라이트 되어 있는 부분이 코드이고 그 밑에는 설명이니 헷갈리지 맙시다.

 

 

void loop() {

  if (Serial.available() >0 ) {

if 문이 나오는군요. 이거는 만약에 괄호안에 조건이 맞으면 1번을 실행하고 아니면 2번을 실행하게 하는 명령어 입니다. 

Serial.available()>0 의 의미는 시리얼 통신으로 어떤값이 들어오면 실행하도록 하기 위한 코드 입니다. 시리얼 값이 0보다 큰값이 들어오면 {....} 괄호 안의 코드가 실행이 됩니다.

 


  char a;
  문자 변수 a를 선언합니다. 이것은 시리얼 통신에서 엔터를 누른값을 확인하기 위해서 필요한 변수 입니다. 

 

 a= Serial.read();
 시리얼 통신을 통해 읽은 값을 문자변수 a에 넣으라는 의미 입니다. 왜냐하면 나중에 a에 어떤 값이 들어왔는지를 비교 해야 하기 때문이죠.   

 

 if (a == '\n') {
다시 if 문이 나왔네요. 너무 걱정할 필요가 없습니다. a == '\n' 이라는 의미는 문자변수에 엔터키가 입력되었는지를 확인하는 겁니다. 

 

   if (data =="on") {
      digitalWrite(13, HIGH);
      data="";
    }
  엔터키가 눌렸다면 이 코드가 실행이 됩니다. 그런데 또 한번 if 문을 통해서 조건을 하나더 확인하는겁니다. data변수가 시리얼 통신을 통해 on이라는 문자가 들어오면 13번 핀을 ON하는거죠. 그러면 당연하게도 LED에 불이 들어올겁니다.

불을 키고 나서는 data변수를 지워주네요. 왜냐하면 지우지 않으면 다음에 실행될때 이전값으로 동작을 할 수 있기때문입니다.   

 

 

   else if (data=="off") {
      digitalWrite(13,LOW);
      data="";
    }
    

  위의 코드는 data 변수에 off라는 문자가 들어오면 LED를 끄는 명령입니다. 앞서와 마찬가지로 data변수를 지워주는 코드가 들어있습니다. 

 

   else 
          data="";
    
  } 

 

위의 코드는 data변수에 on 이나 off가 아닌 다른 문자가 들어왔을때에는 무조건 data변수를 지워서 초기화 하는 코드 입니다. 우리는 on 이라는 문자가오면 LED를 켜고, off라는 문자가 오면 LED를 끄도록 하기 때문에 다른 것들은 모두 지워야 합니다.

 


  else {
    data+=a;

  }

  }

}

 

여기서 else는 data값에 a변수를 계속 더해주라는 의미입니다. 그래서 입력되는 문자 on 이나 off를 인식할 수 있도록 해주는 코드 입니다. 

 

그리고 가장 중요한 것은 괄호를 정확히 열어주고 닫아주어야 합니다. 그게 안되면, 에러가 발생하니 주의해야 합니다. 

 

 

아래 이미지는 아두이노 IDE의 모습입니다. 맨 윗줄 우측에 보면 돋보기 모양이 보이죠? 이거를 눌러주면 시리얼 모니터라는 창이 맨 아래에 생깁니다. 지금 아래 이미지 보면 아래쪽에 on 이라고 쓰여진 문자 보이죠? 엔터를 눌러주면 아두이노LED에 불이 들어옵니다. 당연히 off라고 치면 LED 가 꺼지구요. 너무나도 당연한 이야기지만 대소문자를 구분하기 때문에 반드시 소문자로 적어주어야 합니다.

 

 

on 명령어를 보내서 지금 아두이노 UNO 보드를 보면 맨위에 ON 이라고 적힌 LED와 아래쪽에 L 이라고 적혀있는 LED가 켜져 있는 모습을 볼수 있습니다. ON 이라고 적힌 LED는 USB 포트를 연결해서 전원이 들어가면 자동으로 점등되는 LED이고 13번 핀과 연결된 LED는 L 이라고 표시된 LED 입니다. 지금 점등이 되어 있죠? 아두이노 IDE에서 off라고 치고 엔터를 누르면 어떻게 될까요?

 

 

 

그렇죠. 아래 사진처럼 LED가 소등 됩니다. 재미있죠? 알고 코딩을 하면 정말 재미나게 프로그램을 공부할 수 있습니다. 

 

일단 차근차근 따라하다 보면 이해가 될것 같습니다. 

 

오늘 코딩의 핵심은 if 문을 사용하는 것이었습니다. 

 

오늘도 즐거운 하루되시고, 열공합시다. 

 

궁금한 점은 댓글달아주시면 제가 아는 범위에서 대답해 드리도록 하겠습니다. 

 

감사합니다.