본문 바로가기

강좌/아두이노 강좌

아두이노 기초강좌 05. 무작정 LED 켜보기 코드 분석


우리는 지난 강좌에서 다음과 같은 코드를 아두이노에 업로드 했었습니다.



void setup()

{

  pinMode(13, OUTPUT);

}


void loop()

{

  // turn the LED on (HIGH is the voltage level)

  digitalWrite(13, HIGH);

  delay(1000); // Wait for 1000 millisecond(s)

  // turn the LED off by making the voltage LOW

  digitalWrite(13, LOW);

  delay(1000); // Wait for 1000 millisecond(s)



이 코드를 한 줄, 한 줄씩 분석해보겠습니다.


void setup()

 void setup()은 아두이노 보드가 실행되면서 제일 먼저 읽는 부분입니다. 일반적으로 보드의 특정 핀 기능 설정, 시리얼 통신 속도 등 기본적인 설정을 하는 부분입니다. 아두이노에 전원을 넣으면 한 번만 읽은 후 다음으로 넘어가게 됩니다.


 {

중괄호를 사용해 코드 블록이 시작됩니다.


pinMode(13,OUTPUT);

 pinMode 명령문은 특정 핀을 어떻게 사용할 지 아두이노에 선언합니다. 디지털 핀인 13번 핀은 INPUT(입력) 아니면 OUTPUT(출력)으로 설정할 수 있습니다. 이 상황에서는 LED를 켜기 위해서 출력 핀이 필요합니다. 그래서 핀 번호와 모드를 괄호 안에 작성했습니다. 명령문이 끝날 때는 매번 ';(세미콜론)'을 붙여줘야 합니다. 또한 아두이노는 대소문자를 구별하기 때문에 Pinmode라거나 pinmode라거나 PinMode라고 잘못된 명령문이라고 인식합니다. OUTPUT역시 마찬가지입니다.


}

여기서 닫는 중괄호는 setup() 함수의 끝을 알립니다.


void loop()

{

loop()는 아두이노의 주 행동을 결정하는 부분입니다. 이 함수는 보드를 끄기 전까지 계속 반복해서 수행됩니다. 즉 몸통 부분이라고 할 수 있습니다. void setup()과 함께 아두이노 스케치에 반드시 존재해야 하는 부분입니다.


//turn the LED on(HIGH is the voltage level)

'//'뒤에 쓰이는 부분은 주석입니다. 아두이노 IDE에 회색으로 나오게 되고, 명령문에 영향을 주지 않습니다. 간단한 메모를 남기는 데 사용되고, 코드를 작성할 때 이 코드를 사용하게 될 다른 사람이 코드를 수정할 때 참고할 글들을 적어놓기도 합니다.


digitalWrite(13,HIGH);

digitalWrite(A,B)를 사용하면 OUTPUT으로 설정된 핀을 끄고 켤 수 있습니다. A의 위치에(이 경우에는 13)는 켜고 끌 핀을 지정합니다. B의 위치에는 켤지(HIGH), 끌지(LOW)를 정하게 됩니다. 


delay(1000); // Wait for 1000milliseconds

주석에서 알 수 있듯이, 1000밀리초, 즉 1초간 기다리게 하는 명령문입니다. delay()는 기본적으로 프로세서가 밀리초 단위의 시간 동안 아무 일도 하지 않고 대기하도록 합니다. 따라서 아두이노는 위에 13번 핀의 LED를 켠 채로 1초간 대기하게 됩니다. 


digitalWrite(13,LOW);

이 명령어는 전에 켰던 13번 핀을 끄게 만듭니다. 


delay(1000);

다시 한 번 1초간 대기합니다


}

닫힘 중괄호는 loop()함수의 끝을 나타냅니다. 



정리해 보면 이 함수는 다음과 같은 일을 반복합니다.

1. 13번 핀을 출력으로 지정 (시작 할 때 한 번만)

2. 반복을 시작

3. 13번 핀의 LED를 킴

4. 1초 간 대기

5. 13번 핀의 LED를 끔

6. 1초 간 대기

7. 3번으로 돌아감


다음 강좌로 넘어가기 전 이번에는 코드를 복사 붙여넣기 하는 방법이 아닌, 직접 아두이노IDE에 코드를 입력해서 업로드 해보기 바랍니다. 일반적으로 쉽게 하는 실수에는 명령문 뒤에 ;(세미콜론)을 안 붙였다거나, 대소문자를 잘못 입력했다거나 하는 것들이 있습니다. 


또 이 코드를 조금씩 수정해보면서 가지고 노는 것을 추천드립니다. 예를 들어 delay 시간을 조정한다거나 다른 핀에 LED를 꽂아본다거나 하는 방식으로요. (하지만 저항이 없다면 13번 핀이 아닌 다른 핀에 LED를 연결하는 것은 절대 절대 하면 안됩니다. 13번 핀에는 기본적으로 저항이 붙어있기 때문에, 13번 핀에는 LED를 저항 없이 연결해도 되지만, 다른 핀에 LED를 연결하게 되면 아두이노와 LED 모두 고장날 수도 있습니다. 여기에 대해서는 다음에 기회가 되면 설명하거나, 인터넷에 LED에 저항을 달아야 하는 이유를 검색해보시면 찾아보실 수 있습니다.) delay 시간을 조정할 때 양쪽의 시간들을 아주 작은 숫자로 줄여보시면 재미있는 현상을 발견하게 될 겁니다.(예를 들어 켜져있는 시간을 1ms, 꺼져있는 시간을 10ms로) 그리고 이 현상은 나중에 PWM(펄스 폭 변조)에 대해 배울 때 유용할 것입니다.