관리 메뉴

나모를 찾아라

아두이노(Arduino UNO R3) - LED 깜박거리기 예제 본문

생활/메이커(Maker)

아두이노(Arduino UNO R3) - LED 깜박거리기 예제

나모찾기 2015. 6. 28. 14:51

Arduino UNO R3는 아두이노를 처음 시작할 때 가장 많이 사용되는 하드웨어라고 한다.

관련 공식 웹사이트 주소는 다음과 같다:

- https://www.arduino.cc/en/Main/ArduinoBoardUno


ATmega328에 기반한 보드라고 하고 자세한 시트는 링크를 참고: 링크

회로도는 다음과 같다: https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf


전원공급

보드에 전원을 공급하기 위한 방법은 2가지가 있다.

1. USB 소켓에 USB-B형 케이블로 연결

2. DC 소켓에 7~12V DC 어댑터(외경 : 5.5mm / 내경 : 2.1mm)를 연결


USB로 연결하면 아래와 같이 LED에 불이 들어 온다.



LED 불 깜박이기(예제)

https://www.arduino.cc/en/Main/ArduinoBoardUno 에 있는 샘플이다.

USB를 연결하고 아두이노 개발 IDE를 띄운다.

예제는 File > Examples > 1.Basics > Blink. 에 있다.


(복사 & 붙여넣기를 위한 코드)


/*

* 깜박이기

*

* LED의 불을 1초는 켜고, 끄는 것을 반복한다.

* 이 예제는 public 도메인에 속한다.

*/ void setup() {  // 출력을 위한 디지털 핀을 초기화한다.  // 대부분의 아두이노 보드들에는 Pin 13에 LED가 연결되어 있다.  pinMode(13, OUTPUT); } void loop() {  digitalWrite(13, HIGH); // LED를 켠다  delay(1000);            // 1초를 기다린다  digitalWrite(13, LOW);  // LED를 끈다  delay(1000);            // 1초를 기다린다 }


자신의 보드 선택하기

도구 메뉴에 보면 보드와 포트가 있는데 자신의 보드에 맞게 선택한다.

나는 Arduino Uno와 /dev/cu.usbmodemfa131을 선택했다.


프로그램 컴파일 / 업로드

스케치(코드)를 작성하고 보드와 포트 설정만 잘 되어 있으면 쉽게 올릴 수 있다.

컴파일: 버튼, 스케치 메뉴 > 확인 / 컴파일 (단축키⌘-R)을 누르면 된다.

업로드: 버튼(단축키: ⌘-U / 메뉴: 스케치 > 업로드)을 누르면 프로그램을 바로 업로드 할 수 있다. 올리고 나면 메모리의 사용량을 알려준다.


올리고 나면 보드의 상태가 바로 바꾼다. 오렌지색 LED가 깜박거림을 알 수 있다.


프로그래밍 리팩토링

프로그래밍 세계에서는 리팩토링(refactoring)이란 용어가 흔희 쓰이는데 '결과의 변경 없이 코드의 구조를 재조정함'을 의미한다. 같은 기능의 코드를 가독성 있고 좀더 알기 쉽게 바꾸는 작업이다.


우선 13이라는 매직넘버를 기호 상수로 의미를 부여할 것이다.

전역 변수로 LED의 값을 뺀다. (LED라는 전역 변수가 등장하였다. 주석(//로 시작되는 회색의 라인)도 같이 나왔다.)

이제 해당 변수로 대체할 예정이다. 13이 무엇을 의미하는지가 좀더 명확해졌다.


다음은 1000이라는 매직넘버에 의미를 부여해 볼 수 있다.


리팩토링과 임베디드에 대한 고찰

매직넘버를 기호 상수로 바꾸기 작업은 사람에게는 가독성을 준다. 하지만 메모리 제약이 있는 임베디드의 세계에서는 어떻게 보면 안그래도 적은 메모리를 더 부족하게 되는 원인이 될 수 있다.

실제 두 개의 전역 변수를 만들고 나서 프로그램을 올려보면 전역변수의 크기가 9바이트에서 13바이트로 4바이트가 늘어난 것을 알 수 있다.

여기서 int타입은 2바이트 임을 알 수 있다. (4바이트 / 2개 = 2바이트)


책에서 나온 소스코드에서는 처음에 led 라는 변수를 통해 코드가 있었지만, 지금 시점의 코드에는 이 변수가 없어진 것도 되짚어 보면 이런 전역 변수를 줄이기 위함이 아닌가 생각이 된다.


맥용 IDE의 버그(?)

스케치 '확인 / 컴파일'의 단축키가 ⌘-R라고 위에서 언급했는데, 이상하게 가끔 아래와 같은 오류 메세지가 뜨는 것이 보였다.

분명히 문법상 오류가 없는데 발생했다.

/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm328p.o:(.init9+0x0): undefined reference to `main' collect2: error: ld returned 1 exit status 컴파일 오류 발생.


알고보니 '입력 소스'가 한글로 되어 있을 경우 ⌘-R을 누르면 위의 화면 처럼 컴파일 오류가 발생함을 알게 되었다.

따라서 단축키로 동작을 할 때 불편하지만 언어를 영어로 바꾸고 해야 한다.

정 불편하면 버튼을 누르면 된다.