LED 전구 On, Off

아두이노에 기본적으로 부착되어 있는 LED 전구를 껏다 켜보는 예제를 해보도록 하겠습니다.

※처음에는 코드 자체를 완전히 이해하려고 하지 않으셔도 됩니다.
깊이 원리를 파악하는 것은 난이도가 있습니다.
이 스텝에서는 간단하게 맛본다는 느낌으로 진행합니다.
여러분들이 키보드 타자를 치는 방법만 알면 컴퓨터를 어느 정도 사용할 수 있듯이, 아두이노 코드에 대해 다 알려고 하지 않으셔도 된다는 점을 기억해주세요.


../_images/Step1_12.jpg

이전 단계를 마쳣다면, 위와 같은 화면이 나타날 것입니다.
현재 미리 작성된 코드가 어떤건지 알기전에, 예제를 하나 불러오도록 하겠습니다.


../_images/Step1_24.png

메뉴중 파일을 클릭합니다.
예제를 클릭합니다.
0.1Basic을 클릭합니다.
Blink 예제를 클릭합니다.


../_images/Step1_33.png

미리 작성된 Blink 예제가 나타납니다.
여기에서 회색표시로 되어 있고 /**/ 사이에 있는 코드들은 주석입니다.

※ 주석은 직접적인 기능이나 역할을 하지 않습니다. 해당 코드에 대한 설명을 적어두거나 코드 변경시 주의사항 같은 부분을 설명해주는 역할을 합니다.
보통 주석은 // 뒤에 나오는 코드들이나 /**/ 사이에 나오는 코드들이 해당됩니다.
현재 아두이노에서는 주석을 보기 쉽도록 회색표시 가 됩니다.


// the setup function runs once when you press reset or power the board
void setup() {
   // initialize digital pin LED_BUILTIN as an output.
   pinMode(LED_BUILTIN, OUTPUT);
}

첫 주석을 건너띄고, 아래에는 코드와 함께 주석이 있습니다.

주석을 먼저 살펴봅니다.
the setup function runs once when you press reset or power the board
: 보드에 전원이 켜지면, 이 부분은 한번만 실행됩니다.
initialize digital pin LED_BUILTIN as an output
: LED_BUILTIN 디지털 핀을 출력으로 설정합니다.

어떤 동작, 설정이 코드에 있는지 주석을 통해 알 수 있습니다.
setup() { } 코드에서 { 와 } 사이에 있는 코드는 한번만 실행 되는 것 을 알 수 있습니다.
void 라고 적힌 부분은 추후 내용에서 설명하겠습니다.
실제 코드만 보면 아래와 같습니다.

void setup() {
   pinMode(LED_BUILTIN, OUTPUT);
}
../_images/Step1_5.jpg

아직 뭐가 뭔지 모르지만 실제 코드는 간단해 보입니다.
pinMode라는 것은 디지털핀의 상태를 출력 혹은 입력으로 사용한다고 설정해주는 것입니다.
OUTPUT은 출력, INPUT은 입력을 의미합니다.
즉, 위 코드는 LED_BUILTIN 핀출력 으로 사용하겠다고 메인 보드에게 알려주는 것입니다.
문장의 마지막에 ; 는 코드가 끝났음을 알려주는 기호입니다.

예를 들어 디지털 3번핀을 출력으로 사용하려면,
pinMode(3, OUTPUT); 을 입력해야합니다.

※ 출력핀으로 사용하겠다는 뜻이지 출력신호를 보내겠다는 것은 아닙니다.


// the loop function runs over and over again forever
void loop() {
   digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
   delay(1000);                       // wait for a second
   digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
   delay(1000);                       // wait for a second
}

다음 부분에도 주석이 있습니다.

the loop function runs over and over again forever
: 이 루프(loop)는 무한히 반복됩니다.

loop() {}에서는 { 와 } 사이에 있는 코드는 무한히 반복 됩니다.
실제 코드만 보면 아래와 같습니다.

void loop() {
   digitalWrite(LED_BUILTIN, HIGH);
   delay(1000);
   digitalWrite(LED_BUILTIN, LOW);
   delay(1000);
}
../_images/Step1_7.jpg

이 부분이 실제 작동 코드입니다. digitalWrite는 digitalWrite(사용할 디지털핀, 출력 상태)입니다.
따라서 첫 코드를 해석해보자면, LED_BUILTIN 핀을 HIGH로 변경한다 입니다.
digitalWrite(LED_BUILTIN, LOW); 는 LED_BUILTIN 핀을 LOW로 변경한다 입니다.

HIGH 상태가 되면, 출력을 내보내는 것이고, LOW는 출력하지 않는 상태라고 보시면 됩니다.

../_images/Step1_82.png

그렇다면 LED_BUILTIN 핀 출력을 HIGH로 바꾸면, 무슨 변화가 있나? 라는 궁금증도 생기실 겁니다.
LED_BUILTIN 핀은 아두이노 나노에 부착된 LED 에 연결되어 있고, 아두이노 나노에서 HIGH 는 5V가 LOW는 0V가 공급됩니다. 즉 HIGH가 되면, LED가 켜지게 됩니다.

결국 digitalWrite(LED_BUILTIN, HIGH); 와 digitalWrite(LED_BUILTIN, LOW);는
LED를 켜고 끄는 것을 의미합니다.

void loop() {
   digitalWrite(LED_BUILTIN, HIGH);
   delay(1000);
   digitalWrite(LED_BUILTIN, LOW);
   delay(1000);
}
../_images/Step1_9.jpg

그러면 delay(1000); 는 무슨 의미인가 하면, delay의 뜻대로 1000ms(=1초) 동안 시간을 기다리라는 의미입니다.

최종적으로는 LED가 켜짐 -> 1초 기다리기 -> LED가 꺼짐 -> 1초 기다리기 를 진행됩니다.
이전 주석 에서 Loop는 무한히 반복된다 하였으므로, 이 코드가 업로드된 상태로 전원을 켜면, LED가 켜짐 -> 1초 기다리기 -> LED가 꺼짐 -> 1초 기다리기 가 무한히 반복되게 됩니다.


어느정도 이해가 되셨나요?
아두이노를 배울 때 대부분이 접하는 첫 코드입니다.
이제 실제로 업로드를 해봅니다.


../_images/Step1_101.png

업로드전 보드의 종류를 선택을 해야 합니다.
메뉴중 툴을 클릭합니다.
보드 항목을 클릭합니다.
Arduino Nano 를 선택해줍니다.


../_images/Step1_112.png

이제는 USB 포트를 선택해야 합니다. 포트 번호는 USB 소켓 위치에 따라 다릅니다.
메뉴중 툴을 클릭합니다.
포트 항목을 클릭합니다.
현재 활성화된 포트를 클릭합니다.
※다른 USB 연결된 것이 있으면 포트가 여러개 일 수 있습니다.


../_images/Step1_12.png

마지막으로 왼편 상단의 화살표 모양의 업로드 버튼 을 눌러줍니다.
업로드 후 아래와 같이 작동하는지 확인합니다.


../_images/Step3_11.gif

정상적으로 작동한다면, 코드를 일부 수정하여, 2초마다 켜지고, 꺼지도록 해봅니다.