알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서...

77
1 아두이노! 알고있노? 아두이노! Chapter 1. 아두이노.................................................................................................................................................. 2 1.1. 아두이노....................................................................................................................................................... 4 1.2. Arduino특징 응용.................................................................................................................... 12 1.3. Arduino 관련 모듈 ............................................................................................................................... 14 Chapter 2. 프로그래밍을 알아보자 ................................................................................................................ 16 2.1. 프로그래밍이란? .................................................................................................................................... 16 2.2. 프로그래밍 언어.................................................................................................................................... 16 2.3. 프로그래밍(코딩)배워야 할까?.......................................................................................... 17 2.4. 아두이노 프로그래밍 .......................................................................................................................... 17 Chapter 3. 전기전자 기초 ................................................................................................................................... 18 3.1. 전기에 대한 이해 ................................................................................................................................. 18 3.2. 직류 전기와 교류 전기...................................................................................................................... 18 3.3. 전기의 원리............................................................................................................................................. 18 3.4. 전기의 성질............................................................................................................................................. 19 3.5. 옴의 법칙.................................................................................................................................................. 19 3.6. 전압 분배 법칙 ...................................................................................................................................... 19 3.7. 아날로그 신호와 디지털 신호........................................................................................................ 20 Chapter 4. Arduino 문법...................................................................................................................................... 21 4.1. 기본 문법(구조) ..................................................................................................................................... 21 4.2. 변수 ............................................................................................................................................................. 33 4.3. 아두이노 지원 함수............................................................................................................................. 36 Chapter 5. 개발 환경 구축................................................................................................................................. 48 5.1. Arduino Software 설치 ....................................................................................................................... 48 5.2. 프로그램 작성 컴파일 ................................................................................................................. 59 5.3. 이미지 로딩 디버그 방법 .......................................................................................................... 64 Chapter 6. 디지털 제어........................................................................................................................................ 69 6.1. LED ............................................................................................................................................................... 69 6.2. Switch.......................................................................................................................................................... 72 6.3. SwitchLED ON/OFF시키기 .......................................................................................................... 75

Transcript of 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서...

Page 1: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

1

아두이노!

알고있노? 아두이노!

Chapter 1. 아두이노.................................................................................................................................................. 2

1.1. 아두이노 ....................................................................................................................................................... 4

1.2. Arduino의 특징 및 응용 .................................................................................................................... 12

1.3. Arduino 관련 모듈 ............................................................................................................................... 14

Chapter 2. 프로그래밍을 알아보자 ................................................................................................................ 16

2.1. 프로그래밍이란? .................................................................................................................................... 16

2.2. 프로그래밍 언어 .................................................................................................................................... 16

2.3. 프로그래밍(코딩)을 왜 배워야 할까? .......................................................................................... 17

2.4. 아두이노 프로그래밍 .......................................................................................................................... 17

Chapter 3. 전기전자 기초 ................................................................................................................................... 18

3.1. 전기에 대한 이해 ................................................................................................................................. 18

3.2. 직류 전기와 교류 전기 ...................................................................................................................... 18

3.3. 전기의 원리 ............................................................................................................................................. 18

3.4. 전기의 성질 ............................................................................................................................................. 19

3.5. 옴의 법칙.................................................................................................................................................. 19

3.6. 전압 분배 법칙 ...................................................................................................................................... 19

3.7. 아날로그 신호와 디지털 신호 ........................................................................................................ 20

Chapter 4. Arduino 문법...................................................................................................................................... 21

4.1. 기본 문법(구조) ..................................................................................................................................... 21

4.2. 변수 ............................................................................................................................................................. 33

4.3. 아두이노 지원 함수 ............................................................................................................................. 36

Chapter 5. 개발 환경 구축 ................................................................................................................................. 48

5.1. Arduino Software 설치 ....................................................................................................................... 48

5.2. 프로그램 작성 및 컴파일 ................................................................................................................. 59

5.3. 이미지 로딩 및 디버그 방법 .......................................................................................................... 64

Chapter 6. 디지털 제어 ........................................................................................................................................ 69

6.1. LED ............................................................................................................................................................... 69

6.2. Switch .......................................................................................................................................................... 72

6.3. Switch로 LED ON/OFF시키기 .......................................................................................................... 75

Page 2: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

2

알고있노?

알고있노? 아두이노! 구성

Page 3: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

3

아두이노!

우노 호환보드

브레드 보드

USB 케이블

브레드 보드 점퍼선

220옴 저항

LED 적

LED 황

LED 청

택트 스위치

1

1

1

50

20

5

5

5

3

Page 4: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

4

알고있노?

Chapter 1. 아두이노

1.1. 아두이노

1.1.1. 아두이노는?

2005년 이탈리아에서 누구나 쉽게 마이크로 컨트롤러(Micro Controller)를 쉽게 교육 받기

위해 아두이노(이하 Arduino와 동일한 표현)를 만들었습니다. 오픈 소스와 통합개발환경

(IDE)을 사용하여 마이크로컨트롤러를 보다 편리하게 하드웨어를 구성하고 동작시킬 수

있습니다. 또한 아두이노 보드는 아두이노사에서 제작된 보드들, 그 기기들과 호환되는

제품들을 말합니다. 본 책에서는 Arduino Uno R3 모델을 사용합니다.

1.1.2. 아두이노의 종류

아두이노 보드는 하드웨어와 소프트웨어 구조가 모두 개방된 오픈 소스 플랫폼이기때문

에 정품뿐만 아니라 수많은 변종 보드들이 존재합니다. 여기에서는 동일한 아두이노 IDE

를 사용해서 개발할 수 있고 기본적으로 많이 사용되는 보드들 위주로 설명하겠습니다.

Page 5: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

5

아두이노!

아두이노 우노는 세계에서 가장 많이 사용되는 기본적인 아두이노 보드입니다. 이 보드의

핀 배일 거의 표준과 같이 사용됩니다.

아두이노 나노는 우노와 거의 동일한 구성을 가지고 있습니다. 브레드 보드에서 실험을

할수 있도록 작은 크기와 핀배열을 가집니다.

아두이노 프로와 프로 미니는 다량의 완성품에 장착하기 용이하도록 소형화시키고 USB시

리얼 변환 칩을 제거한 제품입니다. 따라서 프로그래밍을 위한 별도의 USB 시리얼 변환

기가 필요합니다. ATMega328 기반으로서 아두이노 우노와 거의 동일한 스펙을 가집니다.

Page 6: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

6

알고있노?

아두이노 레오나르도 보드는 USB기능이 내장된 ATMega32u4를 메인 프로세서로 사용합

니다. 따라서 프로그램 다운로드와 시리얼 통신 포트가 독립적으로 동작됩니다. 키보드,

마우스, 조이스틱과 같은 주변기기도 인식시킬 수 있어서 활용도가 높습니다. 아두이노

마이크로 보드는 레오나르도 보드와 동일한 프로세서를 사용하지만 소형화 시킨 소형 보

드입니다.

아두이노 메가 2560 및 메가 ADK는 이름에서 알 수 있듯이 ATMega2560 프로세서를 사

용하여 우노 보드보다 기능과 핀 수가 많은 보드입니다.

Page 7: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

7

아두이노!

아두이노 두에는 다른 아두이노 제품들이 8bit 마이크로 컨트롤러인 AVR을 기반으로 한

것과 달리 아두이노 두에는 32bit ARM core 프로세서를 사용합니다. 기능과 성능이 높고

핀 수가 매우 많아서 보다 전문적인 제품개발과 연구 목적으로 사용합니다.

아두이노 제로는 아두이노사와 Atmel사가 공동 개발한 것으로 프로세서는 AVR이 아니라

ATSAMD21 이라는 ARM 계열의 32bit 프로세서를 채용했습니다. 48MHz의 클럭 주파수로

동작하는데 이것만 놓고 보면 우노 성능의 3배입니다. 클럭 속도 외에 우노와 비교하여

특이한 점은 0번 핀과 1번 핀을 제외한 모든 디지털 핀에서 PWM기능을 사용할수 있다

는 점과 플래시 메모리가 256KB로서 우노의 8배 정도로 늘었다는 점입니다. 개발 환경에

서도 별도의 USB통신 단자를 통해서 Atme사의 Embedded Debugger기능을 사용할수 있

어서 디버깅에 별도의 장치가 필요없다는 점도 있습니다.

Page 8: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

8

알고있노?

아두이노 융(YUN) 보드는 레오나르도 기판과 HTTP통신과 온갖 텍스트 기반의 작업을 처

리하는 Linino(리눅스 변형 OS)를 구동하는 WIFI 리눅스 기판을 내장하고 있습니다. USB

통신뿐만 아니라 와이파이를 통해 프로그램이 가능합니다.

갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환

보드입니다. 최대 400MHz의 클럭속도를 가지는 x86기반의 초전력 프로세서입니다. 아두

이노 우노의 핀 배열을 가지며 유사한 개발환경을 이용할 수 있습니다. 별도의 갈릴레오

보드 전용 IDE가 제공 되지만 사용법은 아두이노 IDE와 동일합니다.

이 외에도 많은 보드들이 있습니다. 하지만 ‘아두이노’는 등록된 상표이기 때문에 정품 보

드만 이 이름을 사용 할수 있습니다. 그래서 보통 파생 제품들은 ‘두이노’라는 접미어로

새오운 이름을 만들어서 사용합니다. 그 중엔 공식 아두이노와 완벽하게 호환이 되면서

가격은 더 저렴한 것들이 많으므로 이것을 사용해도 같은 개발도구와 라이브러리로 작업

을 할 수 있습니다. 더 자세한 정보는 인터넷을 검색해보면 각 디바이스의 스팩과 가격을

알아 볼수 있으니 검색해보시기 바랍니다.

Page 9: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

9

아두이노!

1.1.3. 마이크로컨트롤러, MCU

마이크로 컨트롤러(Microcontroller) 또는 마이크로 컨트롤러 유닛(Micro Controller Unit)은

같은 말이며, 줄여서 MCU라고도 합니다.

집적 회로 안에 프로세서와 메모리, 입출력 버스 등의 최소한의 컴퓨팅 요소를 내장한 초

소형 컨트롤러입니다. PC의 CPU와 비슷하나 저성능, 저전력에 저렴한 가격으로 제작된다

는 점과 자동제어에 이용되기 위한 많은 주변 장치를 포함하고 있다는 점이 다릅니다. 경

우에 따라서 스마트폰 등에 사용 되는 고성능/저전력 프로세서 제품도 포함합니다.

마이크로프로세서(Microprocessor, MPU)와 비교해서 설명을 드리겠습니다.

MPU는 일반 컴퓨터용 CPU로 연산목적에 비중을 둔 CPU와 메모리, I/O가 분리된 형태입

니다. MCU는 가전제품이나 로봇에 많이 쓰이는 User controller CPU로 CPU Core 뿐만 아

니라 주변 장치들이 내장된 것이라 할수 있습니다.

보통 임베디드 시스템에 적합하게 디자인되어 단순하고 신뢰성 있으며 전력소모가 적으

며 저렴하다는 장점을 가지고 있어 냉장고, 전자레인지 등의 제품에 주로 사용됩니다.

Page 10: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

10

알고있노?

1.1.4. Arduino Uno R3

우리가 사용할 아두이노 우노 R3보드입니다. 내부적으로 5V에 동작합니다.

1.1.4.1. 전원을 켜는 방법으론 3가지가 있습니다.

1. USB로부터 5V전원을 공급받아서 동작할 수 있습니다. 따라서 이 보드를 PC와

USB로 연결하면 기본적인 하드웨어 세팅은 끝났습니다.

2. 외부 전원 소켓에 전압 범위가 맞는 DC어댑터를 연결하여 전원을 공급할 수도

있다. 물론 건전지를 직렬 연결하여 사용할 수도 있습니다.

3. Voltage In 핀에 5V 전원을 연결하고 접지 핀에 GND를 연결해도 전원이 공급되

어 아두이노가 동작합니다.

만약 USB와 외부 전원 소켓에 둘 다 연결되어 있다면 외부전원 소켓에서 공급되는 전원

을 자동으로 사용하게 됩니다.

프로세서로는 ATMega328을 사용하고 있으며 0 ~ 13번의 14개의 디지털 입출력 핀을 가

지고 있어 외부의 이진 신호를 읽어 들이거나 또는 이진 신호를 내보낼 수 있습니다.

이진 신호란 ON/OFF나 0/1과 같이 상태값이 두 가지만을 가지는 신호라는 의미입니다.

이 디지털 핀을 이용해서 LED를 켜고/끄거나 외부의 스위치가 눌러져 있는지 아닌지 등

을 검출할 수 있습니다. 구체적으로 0V와 5V 두 전압 중 하나의 값을 가지며 이것으로

프로그램을 제어할 수 있습니다.

Page 11: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

11

아두이노!

1.1.4.2. 디지털 입출력 핀(0번 ~ 13번 핀)

0번과 1번 핀은 시리얼 통신에 사용된. USB로 PC와 통신을 할 수 있습니다.

2번과 3번 핀은 인터럽트 기능을 갖습니다.

3, 5, 6, 9, 10, 11번 핀은 PWM 기능을 가지며 아날로그 출력을 흉내낼 수 있습니

다.(모터를 돌릴 수 있다는 이야깁니다.)

1.1.4.3. 아날로그 입력 핀 6개(A0~A5)

센서와 연결하여 센서의 아날로그 입력값을 읽어들이는데 사용합니다.

아날로그 신호는 디지털 신호와 달리 연속값을 의미하며 이것은 예를 들어서 온

도, 빛의 세기 등이 있고 이것을 물리량이라 합니다.

물리량을 센서가 전기신호로 변환하며 이것을 이 아날로그 핀으로 읽어들일 수

있습니다

센서를 통해 읽은 전압값은 0~1023사이의 숫자로 변환합니다.

기준 전압은 5V이지만 1.1V의 내부 전압이 사용될 수 있습니다.

AREF핀으로 기준 전압을 직접 인가할 수도 있습니다.

디지털 입/출력 핀으로도 사용이 가능합니다.

1.1.4.4. 아날로그 출력 핀 6개(3, 5, 6, 9, 10, 11번 핀)

디지털 출력핀은 0V/5V 두가지 값만을 가질 수 있습니다.

아날로그 출력핀은 0V~5V사이의 전압 값(256단계)를 가질 수 있습니다.

정확히 이야기하면 PWM방식으로 동작하므로 순수 아날로그 방식은 아닙니다.

1.1.4.5. 인터럽트(2, 3번 핀)

2번과 3번핀은 인터럽트 기능을 가집니다.

인터럽트 처리라는 이벤트를 처리하는 사용되는 기능으로서 특정한 신호가 발생

했을 때 정해진 동작을 수행하여야 하는 경우 사용되는 방식입니다.

1.1.4.6. 그 외의 기능들

SPI 통신: ICSP 헤더핀

TWI(I2C)통신: A0, A1핀

Page 12: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

12

알고있노?

1.2. Arduino의 특징 및 응용

1.2.1. Arduino 특징

현재 많은 마이크로 컨트롤러 및 물리적 컴퓨팅에 해당하는 마이크로 컨트롤러 플랫폼이

있습니다. Netmedia의 BX-24, Phidgets, MIT의 HandyBoard, 그리고 많은 다른 유사한 기

능을 제공합니다. 이러한 툴은 모두 마이크로 컨트롤러 프로그래밍의 지저분한 세부 사항

을 가지고 사용하기 쉬운 패키지로 감싸고 있습니다. 아두이노는 마이크로 컨트롤러와 함

께 작동하는 과정을 단순화 하였지만 다른 시스템을 통해 교사, 학생, 관심 있는 아마추

어를 위한 아래와 같은 몇 가지 이점을 제공합니다.

저렴한 가격 - 아두이노 보드는 다른 마이크로 컨트롤러 플랫폼에 비해 상대적

으로 저렴합니다. arduino의 모듈의 가장 저렴한 버전은 손에 의해 조립 될 수

있고, 심지어는 미리 조립된 모듈의 Arduino 모듈은 50달러 미만입니다.

크로스 컴파일 플랫폼 - 대부분의 마이크로 컨트롤러 시스템은 윈도우 운영체제

로 제한이 되지만 아두이노 소프트웨어는 윈도우, 매킨토시 OSX, 리눅스 운영체

제에서 실행됩니다.

단순 명확한 프로그래밍 환경 - 아두이노 프로그래밍 환경은 초보자를 위해 사

용하기 쉬운, 그러나 고급 사용자들도 활용하기 쉽도록 설계됬습니다. 언어는

C++ 라이브러리를 통해 확장 할 수 있고, 기술적으로 세부 사항을 이해하고자

하는 사람들은 아두이노를 통해 AVR C 프로그래밍 언어에 도약 할 수 있습니다.

만약 사용자가 원한다면 아두이노 프로그램에 AVR C코드를 추가 할 수 있습니다.

오픈 소스 및 확장 가능한 하드웨어 - 아두이노는 Atmel사의 ATMEGA8 과 AT-

MEGA168을 기반으로 하는 마이크로 컨트롤러입니다. 모듈에 대한 계획은 경험

많은 회로 설계자가 직접 개선하여 자신의 버전을 만들 수 있습니다. 크리에이티

브 커먼즈 라이선스(CCL)로 배포됩니다. 그렇다 하더라도 상대적으로 경험이 없

는 사용자가 어떻게 작동하는지 이해하고 비용을 절감하기 위해 모듈의 브레드

버전을 구축 할 수 있습니다.

Page 13: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

13

아두이노!

1.2.2. Arduino의 응용

현재 Arduino는 여려 방면에서 사용되고 있습니다. 사용 사례를 보면 원래의 목적인 학생

들의 교육을 위해 기본 보드를 기초로 하여 외부 기기들 제어하는 용도로 사용되고 있으

며 또한 다양한 IT전시회에서 Arduino를 이용한 핸드폰 웹 개발 및 예술가들이 디지털화

된 작품들을 만들 때 많이 응용된다. 아래 그림들은 Arduino의 응용 사례들입니다.

Page 14: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

14

알고있노?

1.3. Arduino 관련 모듈

Arduino 관련 모듈을 살펴보면 공식 사이트(www.arduino.cc)에서도 구입할 수 있으며 그

외 인터넷 사이트를 검색해보면 무수히 많은 모듈들을 찾아볼 수 있습니다. 보드부터 시

작해서 확장 쉴드, 킷 등등 많은 모듈을 제공하고 있으며 공식 사이트의 모듈을 참고로

관련 모듈에 대해 알아보겠습니다. Arduino 공식 사이트에 보면 모듈을 보면 Boards,

SHIELDS, KITS, ACCESSORIS 4가지로 분류하고 있습니다.

Page 15: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

15

아두이노!

SHIELDS

ACCESSORIES

이렇게 정식 사이트에서만 판매하는 모듈만 하더라도 다양한 종류가 있으며 그 외 사이

트에서도 아두이노 관련 모듈을 다양하게 판매하고 있습니다.

Page 16: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

16

알고있노?

Chapter 2. 프로그래밍을 알아보자

2.1. 프로그래밍이란?

프로그래밍은 프로그램을 만드는 과정을 말하며 프로그램은 일의 순서 또는 과정을 말합

니다. 우선 다음의 그림을 보면서 프로그램이 무엇인지 설명드리겠습니다.

사과를 박스포장하는 프로그램을 간략화한 과정입니다. 이 프로그램을 만들어서 로봇에

입력한다면 사과를 박스포장하는 로봇이 되겠지요. 즉, 우리가 스마트폰이나 컴퓨터에서

사용하는 인터넷, 게임 등의 프로그램은 컴퓨터를 통해 제작하는 ‘컴퓨터 프로그램’이며, C

언어, 파이썬, 자바, 등의 프로그래밍 언어를 사용하여 프로그래밍함으로써 프로그램을 만

드는 것입니다.

2.2. 프로그래밍 언어

프로그래밍 언어는 사람과 디바이스(컴퓨터, 아두이노 등)가 의사소통을 가능하게 해주는

언어입니다. 우리가 키보드로 A를 입력하지만 사실 컴퓨터는 0과 1로 이루어진 기계어로

표현합니다. 0 과 1 만을 사용하는 컴퓨터에서 기계어를 사용하여 프로그램을 제작하기란

쉽지 않습니다. 그렇기 때문에 만들어진 것이 C, C++, JAVA 등과 같은 프로그래밍

Page 17: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

17

아두이노!

언어입니다. 즉, 프로그래밍 언어는 사람이 사용하는 언어를 컴퓨터가 사용하는 기계어로

바꿔주는 언어입니다.

아두이노는 C, C++를 사용합니다. C 언어에 대해 설명을 드리자면 세계적으로 많이

쓰이는 영어와 같이 대부분의 컴퓨터 시스템에 사용할 수 있는 프로그래밍 언어입니다.

절차 지향적 언어로 빠른 연산속도를 자랑하며, 운영체제 및 디바이스 드라이버,

마이크로 컨트롤러 임베디드 프로그래밍 등에 사용되고 있습니다.

2.3. 프로그래밍(코딩)을 왜 배워야 할까?

스티브 잡스는 이렇게 말했습니다. “이 나라 모든 사람들은 컴퓨터 프로그래밍을 배워야

하는 이유는 사고하는 법을 배워야 하기 때문이다.”

기본적으로 뭘 모르는지 모르는 것과, 뭘 모르는지 아는 것은 하늘과 땅만큼의 차이를 가

지고 있습니다. 즉, 뭘 모르는지 모른다면 그것은 개선의 의지가 없다는 것이지만 뭘 모

르는지 아는 것은 개선을 할 수 있다는 것입니다. 그리고 컴퓨터를 기반으로 한 응용프로

그램 활용 능력이 달라집니다. 만약 어떤 학교의 학생들의 반평균과 학년 평균을 구하는

경우 이것을 엑셀과 같은 프로그램으로 순식간에 끝낼지, 아니면 계산기나 암산을 통해서

일일이 사칙연산을 하는지는 시간적으로나 비용적으로나 충분히 우리에게 코딩의 중요성

을 일깨워 줍니다.

4차 산업혁명에선 빅 데이터 분석, 인공지능, 로봇공학, 사물인터넷, 무인 운송 수단, 3차

원 인쇄, 나노 기술과 같은 6대 분야에서 새로운 기술혁명입니다. 이들 분야에선 컴퓨터

는 빼놓을 수는 없을 것입니다. 즉, 프로그래밍을 모른다면 살아가는게 힘들 것입니다.

2.4. 아두이노 프로그래밍

아두이노사에서 무상으로 제공되는 아두이노 통합개발환경(IDE)은 아두이노의 모든 기능

을 사용할 수 있도록 지원하는 컴파일러이며, C언어 기반의 프로그래밍 언어를 입력하여

프로그램을 만들수 있습니다. 기존의 C언어는 굉장히 광범위하며 어려운 언어이지만, C언

어를 바탕으로 재구성된 아두이노 언어는 비교적 쉽게 익혀서 사용할수 있습니다. 그 외

에도 아두이노 보드는 스크래치나 엔트리와 같은 프로그램과도 사용할 수 있습니다.

Page 18: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

18

알고있노?

Chapter 3. 전기전자 기초

3.1. 전기에 대한 이해

전기에너지는 화력, 원자력 등의 발전소에서 만들어진 후 재가공을 거쳐 가정이나 공장

등으로 공급이 됩니다. 집에서 흔히 볼수 있는 콘센트나 여러가지 건전지, 배터리들을 통

해 전기에너지를 공급받아 사용합니다.

일상에서 사용하는 전자 제품이나 부품들은 각각 사용하는 전기의 세기나 양이 정해져

있으므로 잘못 사용한다면 제품들이 고장이 나서 화재가 나거나 감전당할 수 있습니다.

우리가 앞으로 사용할 아두이노 보드나 센서, 모터 등의 전자 부품들 또한 전기에너지를

사용하니 올바른 방법으로만 사용하시기 바랍니다.

3.2. 직류 전기와 교류 전기

전기는 크게 직류전기와 교류 전기로 나뉩니다. 그렇다면 직류 전기와 교류 전기는 무엇

이 다를까요? 다음 그림을 보고 설명하겠습니다.

직류전기는 시간에 관계없이 항상 일정하게 음극에서 양극으로 한 뱡향으로만 흐르는 전

기입니다. 건전지가 이 방식에 해당합니다. 멀리 떨어진 곳으로 전기를 송전하기 위해서

는 전압을 고압으로 승압시켜야하지만 직류는 고압으로의 승압이 어렵기 때문에 일반 가

정에 보급하기가 힘듭니다.

교류전기는 전압, 전류 극성의 방향이 함께 바뀝니다. 그리고 일정 시간에 몇번 바뀌는지

에 따라서 주파수가 정해집니다. 우리가 가정에서 사용하고 있는 콘센트는 220VAC 입니

다.

3.3. 전기의 원리

전기는 원자안의 자유 전자가 외부로 이동하여 생기는 에너지의 한 형태입니다. 원자는

원자핵을 기준으로 전자와 원자핵의 인력을 덜 받는 자유전자가 회전하고 있습니다. 자유

전자는 원자의 외부로 벗어날 수 있으며, 이러한 현상을 ‘전기가 흐른다’고 표현할수 있습

니다.

Page 19: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

19

아두이노!

3.4. 전기의 성질

전기의 성질은 전압, 전류, 저항을 통해 정의할 수 있으며, 이는 물이 흐르는 성질에 비유

하여 나타낼 수 있습니다.

전압은 수압에 비유 할 수 있고 저항은 물의 흐름을 방해하는 지형지물과 같습니다. 또한

전류는 물의 흐름입니다.

3.5. 옴의 법칙

전자기학의 법칙 중 하나인 옴의 법칙은 게오르크 옴의 이름을 딴 것입니다. 도체의 두지

점사이에 나타나는 전위차에 의해 흐르는 전류가 일정한 법칙에 따르는 것을 말합니다.

두 지점 사이의 도체에 일정한 전위차가 존재할 때, 도체의 저항의 크기와 전류의 크기는

반비례합니다. 전류(I)는 도선에 흐르는 단위로 암페어(A), 전압(V)은 도체에 양단에 걸리는

전위차로 단위는 볼트(V), 그리고 저항(R)은 도체의 전기저항으로 단위는 옴(Ω)입니다.

I=V/R으로 표현하는데 전류는 전압에 비례하고 저항에 반비례한다고 합니다.

3.6. 전압 분배 법칙

전압 분배 법칙은 전기 회로 안에 다수의 저항기가 있을 경우 저항기를 지날 때 마다 전

압이 사용되어 전압이 떨어지는 현상을 가지고 어떤 회로나 부품에서 필요로 하는 전압

을 만들어줄 때 사용합니다. 즉, 12V의 입력전압을 가지고 5V의 LED를 켜려고 하면 LED

는 고장이 납니다. 그렇기 때문에 저항기를 추가하여 12V의 전압을 5V로 낮춰 LED를 켤

수 있습니다.

Page 20: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

20

알고있노?

3.7. 아날로그 신호와 디지털 신호

전기 신호는 아날로그 신호와 디지털 신호로 나뉘며, 우리가 사용하는 아두이노 우노보드

는 디지털 신호와 아날로그 신호를 사용하여 부품들을 제어 및 센싱할 수 있습니다.

Page 21: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

21

아두이노!

Chapter 4. Arduino 문법

아두이노 프로그램은 세 가지 주요 부분으로 나눌 수 있습니다. 그 세가지는 기본 문법

(구조), 변수, 지원 함수(기능)입니다. 이제 이 세 가지 기능을 각각 알아봅시다.

4.1. 기본 문법(구조)

아두이노 프로그램의 기본 문법에는 가장 기본 적인 setup(), loop() 이며 이외에 기능별로

나누면 제어 구조, Further Syntax, 산술 연산자, Boolean 연산자, 포인터 연산자, bit 연산자,

복합 연산자로 나눌 수 있습니다.

setup()

setup() 함수는 스케치가 시작되면 호출되고 아두이노 보드의 파워 업 또는 리셋

후 한번 실행되며 프로그램에 필요한 변수나 핀 모드의 초기화 라이브러리는 사

용하여 핀을 초가화 하는데 사용됩니다.

loop()

loop()함수는 그 이름이 시사하는 바와 같이 연속적이고 반복적으로 실행되면서

프로그램 변경 및 응답을 하여 적극적으로 아두이노 보드를 제어하는데 사용합

니다.

4.1.1. 제어 구조

4.1.1.1. if 제어문

if 제어문은 비교 연산자와 함께 사용되는 제어문으로 () 안의 특정 조건이 일치(TRUE)하

면 {}안의 코드를 실행하게 되고 특정 조건이 불일치(FALSE) 하게 되면 {} 안의 코드를 실

행하지 않고 제어문을 빠져나옵니다. 만약 ()안의 조건이 비교연산이 아닌 단일 등호가 되

면 그 조건은 항상 참이 되기 때문에 의도한 바 데로 코드가 흘러가지 않으니 조심해야

합니다.

실제 사용 예로는 아래 표를 보면 알 수 있습니다.

1) if(X>120) digitalWrite(LEDpin, HIGH);

2) if(X>120)

digitalWrite(LEDpin, HIGH);

Page 22: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

22

알고있노?

3) if(X>120) {digitalWite(LEDpin,HIGH)};

4) if(X>120)

{

digitalWirte(LEDpin1, HIGH);

digitalWrite(LEDpin2, HIGH);

}

[표 4-1] if() 제어문 사용법

위 표에서 if 제어문을 사용하는 방법을 제시하고 있습니다. 4가지 경우 가 있는데 다 맞

는 문법이며 () 조건이 참이고 {} 안에서 실행해야 할 코드가 많다면 4번의 방법으로 사용

하면 되고 나머지는 1,2,3 번 무엇을 사용하든 무관합니다.

4.1.1.2. if / else 제어문

if / else 제어문은 if 제어문 보다 여러 경우를 그룹화 함으로써 코드의 흐름을 더 잘 제어

할 수 있습니다. 예를 들어 아날로그 입력 시험을 할 때 입력된 아날로그 값이 500 미만

이라면 하나의 작업을 수행하고, 500이상이라면 다른 작업을 수행해야 할 때 if / else 제

어문을 사용하면 적합합니다.

1) if(pinFiveInput<500)

{

//제어 코드

}

else

{

//제어 코드

}

[표 4-2] if / else() 제어문 사용법

만약 여러 If / else 의 조건이 필요하다면 상호 배타적인 테스트는 동시에 실행할 수 있습

니다. 이 말의 뜻은 원하는 조건이 여러 가지일 때 그 조건인 만족될 때까지 계속 비교하

면서 다음 단계로 진행됩니다. 조건이 만족한다면 제어 코드를 실행 할 것이고 조건이 만

족하지 않는다면 다음 if / else 문으로 스킵됩니다. 참고로 if의 조건이 거짓일 시 else if의

조건을 조사하고 참이면 else if를 실행합니다. 하지만 else if도 거짓일 시엔 else를 실행합

니다.

Page 23: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

23

아두이노!

1) if(pinFiveInput<500)

{

//제어 코드

}

else if (pinFiveInput >=1000)

{

//제어 코드

}

else

{

//제어 코드

}

[표 4-3] if / else() 제어문 다중 사용법

4.1.1.3. for() 제어문

for()는 중괄호로 묶인 블록을 반복하는데 사용됩니다. 반복을 하기 위해 증분 카운터를

가지고 있는데 이는 일반적으로 루프를 증가 및 종료하기 위해 사용됩니다. for()문은 반복

적인 작업에 유용하며, 종종 data / pin의 컬렉션에서 작동하도록 배열과 함께 사용됩니다.

for()문을 사용하기 위해서는 세 가지의 해더를 가집니다.

1) for(초기화, 조건, 증가 or 가감)

{

//제어 코드

}

2) for(int x = 0; x < 100; x++)

{

//제어 코드

}

[표 4-4] for()문 기본 틀 및 사용법

1)은 for() 문의 기본 틀이고 2) for()문의 사용법입니다. 위에서 for()문을 사용하기 위해 3

가지 해더를 가진다고 했는데 그 첫 번째 해더가 초기화합니다. 초기화는 for()문이 실행

될 때 한번 발생합니다. 두번째 해더인 조건은 조건에 만족하면 제어코드를 실행하게 됩

니다. 3번째 헤더는 증가 인데 증가는 for()문이 조건에 만족하여 제어코드를 한번 실행

하게 되면 카운터가 증가나 가감됩니다. 2) 예시로 간단하게 설명하면 처음 int로 선언된

Page 24: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

24

알고있노?

변수 x를 0으로 초기화합니다. 초기화된 변수 x가 조건 (x<100) 에 만족 하게 되면 제어

코드가 실행되고 제어코드가 실행되면 변수 x 를 ++연산자를 통해 1을 증가시킵니다. 증

가된 변수 x는 1이 되고 다시 조건에 만족하므로 제어코드를 실행하고 다시 변수 x를 증

가시킵니다. 이런식으로 조건이 거짓이 될 때까지 반복적으로 실행하는 것이 for제어 문

입니다.

4.1.1.4. switch / case 제어문

if()문과 비슷한 제어 문이며 프로그래머가 다양한 조건에서 실행되고 서로 다른 코드를

지정할 수 있도록 함으로써 프로그램의 흐름을 제어합니다. 특히, switch문에서 지정된 변

수를 case문에서 비교하여 변수의 값이 일치하는 case조건에서 코드가 실행됩니다. break

키워드는 switch문을 종료하는 역할을 하며 일반적으로는 각각의 case 끝 부분에 사용됩

니다. break문이 없으면 스위치문이 중단 될 때까지 case마다 조건을 비교하는 코드의 흐

름으로 이루어지거나 switch문의 끝 부분에 도달하게 된다. 예를 들자면 아래의 표와 같

습니다.

1) switch(매개변수)

{

case 비교값:

//제어코드

break;

case 비교값:

//제어코드

break;

default:

//기본값

}

2) switch(VAR)

{

case 1:

//제어코드

break;

Page 25: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

25

아두이노!

case 2:

//제어코드

break;

default:

}

[표 4-5] switch/case()문 기본 틀 및 사용법

1)은 switch/case문의 기본 틀이고 2)는 사용 예제입니다. 기본틀에서 볼 수 있듯이 switch

문에 비교 대상인 매개변수가 들어오면 그 매개 변수를 case문에서 비교하여 매개 변수

의 값과 case문의 비교값이 같으면 제어코드를 실행하고 break문에 의해 switch문을 끝마

치는 구조로 돼있습니다.

4.1.1.5. while() 제어문

while()제어문의 기본적인 의미는 조건이 거짓이 아니면 {} 안에 있는 제어 코드가 무한

루프를 돌면서 실행됩니다. 그 예로는 아래 표를 참조합니다.

1) while(expression)

{

//제어코드

}

2) VAR = 0;

while (VAR<200)

{

VAR++;

}

[표 4-6] while()문 기본 틀 및 사용법

1)은 while()의 기본 틀이며 2)는 사용 예제입니다. 2)의 예제에서 ()식이 참이면 제어 코드

를 실행하고 다시 ()안의 식을 비교 하게 됩니다. 이 식이 거짓이 될 때까지 반복 여 제어

코드를 실행합니다.

Page 26: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

26

알고있노?

4.1.1.6. do / while() 제어문

do/while문은 기본적으로 while()와 거의 같은 일을 하며, 조건에서 벗어날 경우 루프가

종료됩니다. 그리고 do 루프는 무조건 한번은 실행됩니다. 그 예로는 아래의 표를 참조하

세요.

1) do

{

//제어코드

}while(test condition);

2) do

{

delay(50); // wait for sensors to stabilize

x = readSensors(); // check the sensors

} while (x < 100);

[표 4-7] while()문 기본 틀 및 사용법

1)은 while()의 기본 틀이며 2)는 사용 예제입니다.

4.1.1.7. break 제어문

break() 문은 do, for, switch, while 등의 정상적인 루프를 우회 또는 종료하는데 사용되는

제어문입니다. 사용 예는 아래의 표와 같습니다.

1) for (x = 0; x < 255; x ++)

{

digitalWrite(PWMpin, x);

sens = analogRead(sensorPin);

if (sens > threshold){ // bail out on sensor detect

x = 0;

break;

}

delay(50);

}

[표 4-8] break 및 사용법

Page 27: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

27

아두이노!

4.1.1.8. continue 제어문

continue문은 for(), while, do/while문의 루프 내에서 어떤 특정 조건의 처리를 생략하고자

할 때 사용되는 제어문입니다. 아래 예제를 보면 이해가 더 쉽습니다.

1) for (x = 0; x < 255; x ++)

{

if (x > 40 && x < 120){ // create jump in values

continue;

}

digitalWrite(PWMpin, x);

delay(50);

}

[표 4-9] continue 사용법

위 예제에서 살펴보면 if (x > 40 && x < 120) 조건이 만족하였을 때만 continue문을 실행

하게 돼있습니다. 이 뜻은 if(x>40&&x <120) 조건이 만족할 때 DigitalWrite(PWMpin,x)와

delay(50) 함수를 실행하지 않고 넘긴다. 이렇게 특정 조건의 처리를 생략할 때 continue

문을 사용하면 유용합니다.

4.1.1.9. return 문

return문은 함수가 기능을 종료하고 원하는 경우 함수로부터 값을 반환할 때 사용되는 제

어문입니다. 반환하는 값은 모든 변수 또는 상수형입니다. 아래의 표는 사용 예입니다.

1) int checkSensor(){

if (analogRead(0) > 400) {

return 1;

else{

return 0;

}

}

[표 4-10] return 사용법

위 예제를 살펴보면 함수가 int형으로 선언돼있고 함수 내에서 읽은 아날로그 값이 400보

다 작으면 1을 반환하고 400과 같거나 크면 0을 반환하는 형태의 예제입니다. 이 함수를

Page 28: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

28

알고있노?

변수에 초기화하면 아날로그 입력 값에 따라 초기화된 변수의 값이 바뀌게 됩니다.

4.1.1.10. goto 문

프로그램의 특정지점으로 점프하여 그 지점부터 프로그램을 실행하는 제어문입니다.

1) for(byte r = 0; r < 255; r++){

for(byte g = 255; g > -1; g--){

for(byte b = 0; b < 255; b++){

if (analogRead(0) > 250){ goto

bailout;}

// more statements ...

}

}

}

bailout:

[표 4-11] goto문 사용법

4.1.2. Further Syntax

4.1.2.1. ; (세미콜론)

문의 종료를 알리는 구문입니다. 예를 들어 int x = 3; 과 같이 3 뒤에 ' ; ' 이 들어가는 경

우 그 문은 종료되었다 것을 의미합니다.

4.1.2.2. {} (중괄호}

사용자 생성함수나 api함수, 제어문에서 주로 사용되며 사용되는 함수나 제어문의 범위를

나타내는 구문입니다.

4.1.2.3. // (단일 라인 주석)

주석이란 프로그램이 작동하는 방식을 자신이나 다른 사람들에게 알리는데 사용하는 것

입니다. 컴파일러는 이 주석은 컴파일 하는데 포함하지 않고 컴파일합니다.

4.1.2.4. /* ~ */ (여러 라인 주석)

이 주석은 한번에 여러 라인을 주석으로 처리해야 될 때 사용되는 주석으로 /* 시작으로

*/ 나오기 전까지 모든 것을 주석으로 인식하게 됩니다.

Page 29: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

29

아두이노!

4.1.2.5. #define

#define은 프로그래머가 컴파일 전에 일정한 값에 이름을 부여할수 있는 유용한 C프로그

램 성분입니다. 예를 들어 '#define ledpin 3' 이라 정의 하였다면 3이라는 상수에 ledpin

이라는 이름을 부여한 것입니다..

4.1.2.6. #include

#include는 스케치에서 외부 라이브러리를 포함하는데 사용됩니다. 이것은 c표준 라이브

러리의 큰 그룹에 대한 프로그래머 액세스를 제공하고, 또한 Arduino를 위해 특별히 작성

된 라이브러리를 액세스할 수 있습니다.

4.1.3. 산술 연산자

산술 연산자는 총 6가지가 있으며 '=', '+', '-', '*', '/', '%' 연산자가 있습니다.

4.1.3.1. = (대입연산자)

대입 연산자는 등호의 왼쪽에 있는 변수에 등호의 오른쪽에 있는 값을 저장합니다. C프로

그래밍 언어의 단일 등호는 대입 연산자라 칭합니다. 그것은 방정식 또는 평등을 표시하

는 대다수의 클래스와는 다른 의미를 갖습니다.

4.1.3.2. + (덧셈연산자)

덧셈 연산자는 두 피 연산자의 합계를 반환합니다.

4.1.3.3. - (뺄셈연산자)

뺄셈 연산자는 두 피 연산자의 차를 반환합니다.

4.1.3.4. * (곱셈연산자)

곱셈 연산자를 두 피 연산자의 곱을 반환합니다.

4.1.3.5. / (나눗셈연산자)

나눗셈 연산자는 두 피 연산자의 지수를 반환합니다.

4.1.3.6. % (나머지 연산자)

두 피 연산자 나눗셈의 나머지를 반환합니다.

Page 30: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

30

알고있노?

4.1.4. 비교 연산자

비교 연산자에는 ==(같음), !=(같지 않음), <(보다 작음), >(보다 큼), <= (보다 작거나 같음),

>=(보다 크거나 같음)의 6가지 연산자가 있습니다. 산술 연산자와 마찬가지로 연산자 왼

쪽에 있는 대상이 기준이 됩니다

4.1.5. Boolean 연산자

4.1.5.1. && (논리적 and 연산자)

두 피 연산자의 조건이 참인 경우에만 참으로 인식하는 연산자입니다. 예를 들어 ((digi-

talRead (2) == HIGH)&&(digitalRead (3) == HIGH)) 이러한 코드가 있다고 가정할 때 2번

과 3번 pin 이 HIGH 가 되었을 때만 참으로 인식합니다.

4.1.5.2. || (논리적 OR 연산자)

두 피 연산자의 조건 중 하나만 참이면 참으로 인식하는 연산자입니다. 예를 들어 ((digi-

talRead (2) == HIGH)||(digitalRead (3) == HIGH)) 이러한 코드가 있다고 가정할 때 2번과

3번 중 하나가 HIGH가 들어오면 참으로 인식합니다.

4.1.5.3. ! (부정 연산자)

피 연산자가 부정인 경우에 참으로 인식하는 연산자입니다. 예를 들어 if(!x) 이러한 if()문

이 있다면 x가 거짓인 경우에 참으로 인식하여 제어코드를 실행합니다.

4.1.6. 비트 연산자

4.1.6.1. & (비트 AND 연산자)

AND 연산자는 변수를 비트로 변환하여 계산을 수정합니다. 두 개의 비트가 1인 경우 1

의 결과를 출력하고 두 개의 비트 중 하나가 0 이거나 둘 다 0인 경우 0을 출력합니다.

FE 1 1 1 1 1 1 1 0

B0 1 1 0 0 0 0 0 0

& 1 1 0 0 0 0 0 0

[표 4-12] bit AND 연산

4.1.6.2. | (비트 OR 연산자)

Page 31: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

31

아두이노!

OR 연산자는 변수를 비트로 변환하여 계산을 수행합니다. 두 개의 비트 중 하나가 1 이

거나 둘 다 1인 경우 1의 결과를 출력하고 두 비트 다 0일 경우 0을 출력합니다.

FE 1 1 1 1 1 1 1 0

B0 1 1 0 0 0 0 0 0

| 1 1 1 1 1 1 1 0

[표 4-13] bit OR 연산

4.1.6.3. ^ (비트 XOR 연산자)

XOR 연산자는 EXCLUSIVE OR 라고 불리는 연산자로 OR연산자와 매우 유사합니다. 다만

차이점은 입력 비트가 모두가 1인 경우는 0으로 출력합니다.

FE 1 1 1 1 1 1 1 0

B0 1 1 0 0 0 0 0 0

^ 0 0 1 1 1 1 1 0

[표 4-14] XOR 연산

4.1.6.4. ~ (비트 NOT 연산자)

NOT 연산자는 변수를 비트로 변환하여 각 비트를 0->1, 1 ->0으로 변환하는 역할을 합니

다. 그리고 NOT연산자는 다른 비트 연산자들과 달리 하나의 피 연산자에 적용이 가능합

니다.

FE 1 1 1 1 1 1 1 0

~ 0 0 0 0 0 0 0 1

[표 4-15] NOT 연산

NOT연산자를 사용할 때 알아두어야 할 점이 있습니다. 예를 들어 int 선언된 A에 103이

라는 정수를 대입하고 그 A를 NOT 연산하면 -104가 된다. 그 이유는 int 변수의 최상위

비트는 부호 비트이기 때문입니다. 최상위 비트가 1인 경우 숫자는 음수가 됩니다. 이렇

게 양수와 음수의 인코딩은 2의 보수를 취하여 계산해야합니다. 흥미로운 점은 양의 수 x

를 NOT 연산자로 인코딩한 결과는 (-X)+(-1) 과 같다 그래서 103을 not 한 결과가 -104

Page 32: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

32

알고있노?

가 된 이유입니다.

103 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1

~(-

104)

1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0

[표 4-16] NOT 연산

4.1.6.5. << (bit 시프트 연산자)

<< 연산자는 bit 단위로 지정된 숫자만큼 왼쪽으로 이동하는 연산자입니다.

변수 << 시프트 할 bit 숫자

int a = 5

int b = a << 3

a 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1

<<3 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0

b = 40 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0

[표 4-17] << 연산

4.1.6.6. >>(bit 시프트 연산자)

>> 연산자는 bit 단위로 지정된 숫자만큼 오른쪽으로 이동하는 연산자입니다.

변수 >> 시프트 할 bit 숫자

int a = 5

int b = a >> 3

a 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1

>>3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

b = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

[표 4-18] >> 연산

4.1.7. 복합 연산자

4.1.7.1. ++, -- (증감 연산자)

증감 연산자가 지정된 변수를 +1, -1씩 증감 시키는 연산자입니다. 이 연산자가 변수에

앞에 붙어 있을 때와 변수의 뒤에 붙어있을 때는 차이가 있습니다. 변수의 앞에 선언되어

있으면 선증감형 연산자이고 변수의 뒤에 선언되어 있으면 후증감형 연산자입니다. 차이

점을 살펴 보자면 아래와 같습니다.

Page 33: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

33

아두이노!

x = 2;

y = ++x; // 현재 x = 3, y = 3

y = x--; // x = 2, y = 3

[표 4-19] ++, -- 연산자

위 표에서 알 수 있듯이 증감 연산자가 앞에 선언되어 있으면 연산 전에 증감 후에 연산

을 시작하고 뒤에 선언되어 있으면 연산 후에 증감을 합니다.

4.2. 변수

4.2.1. 상수

아두이노에서 상수는 미리 정의된 변수입니다. 그들은 프로그램을 읽기 쉽게하기 위해 사

용됩니다.

4.2.1.1. HIGH/LOW

디지털 핀을 읽거나 쓸때 핀이 취할수 있는 두 개의 가능한 값입니다.

HIGH

HIGH의 의미는 핀이 입력 또는 출력으로 설정되어 있는지 여부에 따라 차이가

있습니다. 핀 설정이 입력으로 설정되고 그 핀을 읽었을 때 3V 이상의 전압이

존재하는 경우 HIGH인식 합니다. 만약 출력으로 설정하고 그 핀에 HIGH를 인가

하였을 때 그 핀의 전압은 5V가 됩니다.

LOW

LOW의 의미는 핀이 입력 또는 출력으로 설정되어 있는지 여부에 따라 차이가

있습니다. 핀 설정이 입력으로 설정되어 있는 경우에 그 핀을 읽었을 때 2V 이

하의 전압이 존재하는 경우 LOW로 인식합니다. 만약 출력으로 설정하고 그 핀

에 LOW를 인가했을 경우 그 핀은 0V입니다.

4.2.1.2. INPUT/OUTPUT/INPUT_PULLUP

디지털 핀을 pinMode()함수를 이용하여 INPUT, OUTPUT, INPUTPULLUP으로 설정하면 전

기적 동작을 변경할 수 있습니다.

INPUT

아두이노의 핀을 pinMode()함수로 INPUT으로 설정하면 그 핀은 하이 임피던스

Page 34: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

34

알고있노?

상태에 있다. INPUT으로 설정된 핀은 매주 작은 샘플링을 하는 회로를 요구하며

이것은 핀의 앞 단 100 Ω에 해당하는 직렬 저항이 달려 있는 것과 같습니다.

INPUT_PULLUP

아두이노의 ATmega칩은 내부 풀업 저항에 액세스 할 수 있습니다. 외부 풀다운

저항을 사용하는 것 대신 INPUT_PULLUP 선호하는 경우에는 pinMode()인자로

사용할 수 있습니다.

OUTPUT

pinMode() 함수로 OUTPUT설정된 핀은 로우 임피던스 상태에 있습니다. 이것은

다른 회로에 상당량의 전류를 제공할 수 있다는 것을 의미합니다. ATMEGA핀은

소스(양의 전류)or 실크(음의 전류)를 다른 장치 및 회로에 40mA까지 공급 할 수

있습니다.

4.2.1.3. true/false

true/false는 아두이노 언어의 참과 거짓을 표현하는데 사용되는 두 가지 상수입니다.

false

거짓은 0으로 정의됩니다.

true

참은 거의 1로 정의 하지만 사실은 더 넓은 의미의 정의를 가지고 있습니다. 0

이 아닌 어떤 정수든 bool의 의미에서는 참이 됩니다. 즉 -1,2,-200등 도 참이 될

수 있습니다.

4.2.2. 데이터 타입

4.2.2.1. void

void라는 키워드는 함수 선언에 사용됩니다. 함수의 타입을 설정하는데 사용되며 이 기능

이 호출 한 함수에 대한 관련 정보를 반환 할 것으로 예상할 수 있습니다. void의 의미는

아무것도 없다는 의미이며 즉 void로 선언된 함수는 반환할 정보가 없다는 의미가 됩니

다.

Page 35: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

35

아두이노!

4.2.2.2. Boolean

Boolean은 true 와 false 값 둘 중 하나의 값만 갖는 데이터 타입입니다. Boolean 데이터

타입은 메모리에 1byte의 공간을 차지합니다.

4.2.2.3. char

char 는 문자 값을 저장하는 1byte의 메모리를 차지하는 데이터 형식입니다. 그러나 문자

는 아스키코드 값으로 저장됩니다. 즉 문자 'A' 는 메모리에 저장 될 때 'A' 로 저장되는

것이 아니라 66의 값으로 인코딩 되어 저장됩니다. char는 1byte 로 숫자의 범위는 -128

~ 127까지 즉 256개를 가지고 있습니다.

4.2.2.4. unsigned char

char와 달리 부호가 없지만 메모리는 1byte의 공간을 차지하는 부분은 같습니다. 숫자의

범위는 부호가 없으므로 0~255까지 즉 256개를 인코딩합니다. 아두이노 프로그래밍의 일

관성을 위해 바이트 데이터 유형이 선호됩니다.

4.2.2.5. byte

byte는 0~255, 8비트 부호 없는 수를 저장합니다.

4.2.2.6. int

int는 번호 저장에 대한 기본 데이터 유형입니다. 아두이노 우노 및 기타 ATmega 기반

보드는 int는 2byte(16bit)로 인식하여 -32,768 ~ 32,767 범위를 산출하고 아두이노 due에

서는 int 를 4byte로 인식하여 저장하고 범위는 -2,147,483,648~2,147,483,647의 범위를

갖습니다.

4.2.2.7. unsigned int

unsigned char 와 마찬가지로 unsigned int도 부호가 없는 정수로 우노 및 기타 ATmega

기반 보드에서는 2byte 로 인식하고 0 ~ 65,535의 범위를 산출하고 아두이노 due에서는

int 를 4byte로 인식하여 0 ~ 4,294,967,295 의 범위를 산출합니다.

4.2.2.8. word

word는 0~65,535 16비트 부호 없는 수를 저장합니다. unsigned int와 동일합니다.

4.2.2.9. long

long은 32bit(4byte) 메모리 크기를 가지며 -2,147,483,648 ~ 2,147,483,647까지 숫자를 저

Page 36: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

36

알고있노?

장 할 수 있는 데이터 유형입니다.

4.2.2.10. unsigned long

unsigned long 다른 것과 마찬가지로 부호가 없고 32bit(4byte) 메모리 크기를 가지며 0~

4,294,967,295 범위의 숫자를 표현할 수 있습니다.

4.2.2.11. short

short 2byte(16bit) 데이터 타입입니다. -32,768 ~ 32,767의 범위를 표현할 수 있습니다.

4.2.2.12. float

부동 소수점 숫자를 표현할 수 있는 데이터 형식입니다. 4byte(32bit) 메모리 크기를 가지

며 1bit는 부호를 표현하는 bit이고 1byte는 지수부를 표현하며 나머지 비트들을 가수부

를 표현하는 비트입니다.

4.2.2.13. double

float의 포인터형 부동 소수점 표현 데이터 형식입니다. ATmega 기반 보드에서는 4byte를

차지합니다. 즉 float와 완전히 동일합니다. 아두이노 due에서는 두 배인 8byte의 메모리

를 차지합니다.

4.2.2.14. string

텍스트 문자열을 표현하는 데이터 형식입니다. char형의 배열이라고 볼 수 있으며 null을

종료로 인식하는 배열입니다.

4.3. 아두이노 지원 함수

4.3.1. Digital I/O

4.3.1.1. pinMode()

지정된 핀을 입력 또는 출력으로 동작하도록 구성하는 함수입니다. INPUT_PULLUP모드로

내부 풀업 저항을 사용하는 것이 가능합니다. INPUT모드는 명시적으로 내부 풀업을 사용

할 수 없습니다. pinMode 함수는 두 개의 인자를 갖는데 하나는 pinnumber이고 하나는

설정 모드입니다. 사용 방법은 아래와 같습니다.

1) int ledPin = 13;

void setup()

Page 37: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

37

아두이노!

{

pinMode(ledPin, OUTPUT); //핀 13번을 출력으로 설정

}

[표 2-20]pinMode 함수 사용 방법

4.3.1.2. digitalWrite()

digitalWrite함수는 디지털 핀에 HIGH 또는 LOW를 출력하는 함수입니다. 만약 핀을

pinMode 함수를 통해 OUTPUT으로 설정하였다면 5V는 HIGH 0V는 LOW로 인식합니다.

digitalWrite()는 두 개의 인자를 가지며 첫 번째 인자는 pin number이고 두 번째 인자는

출력 설정입니다. HIGH인지 LOW인지에 따라 출력 전압이 달라집니다. 사용방법은 아래와

같습니다.

1) int ledPin = 13;

void setup()

{

pinMode(ledPin, OUTPUT); //핀 13번을 출력으로 설정

}

void loop()

{

digitalWrite(ledin, HIGH); //13핀에 HIGH 출력

delay (1000);

digitalWrite(ledPin, LOW); //13핀에 LOW 출력

delay (1000);

}

[표 2-21] digitalWrite 함수 사용법

4.3.1.3. digitalRead()

digitalRead()는 지정된 디지털 핀의 값이 HIGH인지 LOW인지 읽는 함수입니다. 이 함수

는 1개의 인자를 가지며 그 인자는 pin number입니다. 사용방법은 아래와 같습니다.

1) int ledPin = 13;

int inpin = 7;

int val = 0;

void setup()

{

Page 38: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

38

알고있노?

pinMode(ledPin, OUTPUT); //핀 13번을 출력으로 설정

pinMode(inpin, INPUT); //핀 7번을 입력으로 설정

}

void loop()

{

val = digitalRead(inpin); // 핀 7번을 읽는다.

digitalWrite(ledPin,val);

}

[표 2-22] digitalRead 함수 사용법

4.3.2. Analog I/O

4.3.2.1. analogReference()

아날로그 입력에 사용되는 기준 전압을 구성합니다. 옵션은 다음과 같습니다.

DEFAULT: 5V(5V아두이노 보드) 또는 3.3V(3.3V 아두이노보드)

내부: Built-in 기준은 1.1 V 동일하고 ATmega168 이나 ATmega328에 쓰이고

2.56V는 ATmega8의 기준이다.

INTERNAL1V1: 내장된 1.1V 레퍼런스

INTERNAL2V56: 내장된 2.56V 레퍼런스

EXTERNAL: 외부 레퍼런스(AREF핀에 인가된 전압, 0~5V 기준으로 사용)

analogReference()함수에는 1개의 인자를 가지는데 그 인자가 위에서 설명한 DETAULT,

INTERNAL1V1, INTERNAL2V56, EXTERNAL입니다. 아날로그 기준을 변경한 후 analogRead()

시 처음 몇 판독은 정확하지 않을 수 있습니다. 외부 레퍼런스를 사용할 시 analogRead()

를 호출하기 전에 아날로그 기준을 설정해야 합니다. 그렇지 않으면 마이크로 컨트롤러가

손상을 입을 수 있습니다.

4.3.2.2. analogRead()

지정된 아날로그 핀의 값을 읽을 수 있는 함수입니다. 아두이노 보드는 6개의 채널, 10bit

의 디지털 아날로그 변환기가 포함돼있습니다. 이는 0 ~ 5V사이의 전압 값을 0 ~ 1023사

이의 정수 값으로 맵핑 할 수 있다는 뜻과 같습니다. 단위당 볼트 수는 5V/1024 이며 즉

0.0049V입니다. 아날로그 입력 값을 한번 읽는데 걸리는 시간은 100us가 걸립니다. 최대

읽기 속도는 약 초당 10,000번이 됩니다. analogRead()함수는 1개의 인자를 갖는데 그 인

자는 아날로그로 지정된 pin number입니다. analogRead()함수는 0 ~1024의 int값을 반환

합니다. 사용 방법은 아래와 같습니다.

1) int analogPin = 3;

Page 39: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

39

아두이노!

int val = 0;

void setup()

{

Serial.begin(9600);

}

void loop()

{

val = analogRead (analogPin); // 핀 3번의 아날로그 값을

읽는다.

Serial.println(val); //아날로그 값을 출력 한다.

}

[표 2-23] analogRead 함수 사용법

4.3.2.3. analogWrite() -PWM

아날로그 값(PWM Wave)을 핀에 기입하는 함수입니다. 가변 휘도 LED 또는 다양한 속도

로 모터를 구동하기 위해 사용될 수 있습니다. analogWrite()를 호출한 후 핀에 대한 다음

호출이 있을 때까지 지정된 듀티 사이클로 꾸준한 사각파를 생성합니다. 핀에 생성할 수

있는 최대 PWM 주파수는 490Hz입니다. analogWrite를 호출하기 전에 pinMode를 필요로

하지 않습니다. analogWrite()는 두 개의 인자 값을 갖는데 첫 번째 인자는 출력할 아날로

그 pin number이고 두 번째 인자는 0~255까지의 듀티 사이클 값입니다. 사용방법은 아래

와 같습니다.

1) int analogPin = 3;

int ledPin = 9;

int val = 0;

void setup()

{

pinMode(ledPin, OUTPUT);

}

void loop()

{

val = analogRead (analogPin); // 핀 3번의 아날로그 값을

Page 40: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

40

알고있노?

읽는다.

analongWrite(ledPin, val/4); // 그 값을 led로 출력 한다.

}

[표 2-24] analogWrite 함수 사용법

4.3.3. 고급 I/O

4.3.3.1. tone()

tone 함수는 핀에 특정 주파수의 사각파(50% 듀티 사이클)를 생성합니다. noTone 함수를

호출하기 전까지 계속 유지할 수 있습니다. 피에조 부저 또는 톤을 재생하는 다른 스피커

를 제어 하는데 사용될 수 있습니다. tone의 함수는 오직 하나의 핀에서 동작합니다. 만약

tone함수를 미리 다른 핀에서 재생하는 경우 tone함수를 호출하여도 아무런 동작을 하지

않습니다. 같은 핀에서 다시 호출되는 경우 호출 주파수를 변경합니다. tone 함수는 31Hz

이하 의 주파수를 생성 할 수 없습니다. tone 함수의 인자는 두 개인 경우와 3개인 경우

로 나뉘는데 2개인 경우는 첫 번째 인자가 pinnumber 이고 두 번째 인자가 주파수입니

다. 3개인 경우는 첫 번째 인자가 pinnumber 이고 두 번째 인자가 주파수, 3번째 인자가

재생 시간입니다. 여기서 재생 시간은 ms 단위입니다.

4.3.3.2. noTone()

tone() 함수에 의해 트리거된 사각파를 중지 하는데 사용되는 함수입니다. tone이 생성중

인 경우에는 영향을 주지 않습니다. 만약 여러 개의 핀에 다른 피치를 재생하려는 경우

다른 핀에 tone() 함수를 호출하기 전에 noTone()을 호출해야 합니다.

4.3.3.3. shiftOut()

한번에 Data를 bit 단위를 byte 크기만큼 이동하는 함수입니다. 왼쪽 이나 오른쪽 최상이

비트에서부터 시작합니다. 보통 디바이스 앞에 드라이버 IC가 붙어 있는 경우 사용하면

유용합니다. shiftOut()함수가 가지는 인자는 총 4가지가 있으며 첫 번째 인자는 dataPin으

로 Data를 bit화 하여 출력할 핀을 설정하는 인자이고 두 번째 인자는 Clockpin으로

DataPin에 data bit를 입력하고 동작시킬 수 있게 클럭을 인가 해주는 핀 설정이고 3번째

인자는 시작 비트를 설정하는 인자로 MSBFISRST와 LSBFIRST가 있습니다. 4번째 인자는

시프트 할 Data값을 설정하는 인자로 0~255의 범위를 갖습니다.

4.3.3.4. shiftIn()

한번에 Data를 bit 단위를 byte 크기만큼 이동하는 함수입니다. ShiftOut()과는 반대로 비

Page 41: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

41

아두이노!

트를 시프트 시키면서 data핀을 읽습니다. shiftIn()의 인자는 3가지이며 ShiftOut과 같습니

다.

4.3.3.5. pulseIn()

핀의 펄스(HIGH or LOW)를 읽는 함수입니다. 그 핀에 원하는 펄스가 들어오면 타이밍을

하고 펄스가 바뀌면 타이밍을 멈추어 그 타이밍 값을 반환하는 함수입니다. pluseIn() 함수

의 인자는 2가지의 경우와 3가지의 경우로 나뉘고 2가지의 경우는 첫 번째 인자가 펄스

를 체크할 pin number이고 두 번째 인자는 펄스의 값(HIGH, LOW)입니다. 3가지의 경우는

2가지의 경우에 제한 시간이 추가된 것입니다. 제한 시간은 시작하는 펄스를 기다리는 시

간의 수고 단위는 ms이며 디폴트 값은 1초입니다. 만약 제한 시간 안에 시작하는 펄스가

입력되지 않으면 0을 반환합니다. 사용 방법은 아래와 같습니다.

1) int pin = 7;

unsigned long duration;

void setup()

{

pinMode(pin, INPUT);

}

void loop()

{

duration = pulseIn(pin, HIGH);

}

[표 2-25] piulseIn 함수 사용법

4.3.4. Time

4.3.4.1. millis()

millis() 함수는 아두이노 보드가 프로그램을 실행하기 시작한 시간부터 타이밍하여 ms단

위로 경과 시간을 반환하는 함수입니다. 이 숫자는 50일 후에 0으로 오버 플로우 됩니다.

반환 값은 unsigned long 형태로 반환됩니다. 사용 방법은 아래와 같습니다.

1) unsigned long time;

Page 42: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

42

알고있노?

void setup(){

Serial.begin(9600);

}

void loop(){

Serial.print("Time: ");

time = millis();

Serial.println(time);

delay(1000);

}

[표 2-26] millis 함수 사용법

4.3.4.2. micros()

micros()함수는 아두이노 보드가 프로그램을 실행하기 시작한 시간부터 타이밍하여 us단

위로 경과 시간을 반환하는 함수입니다. 이 숫자는 70분 후에 0으로 오버 플로우됩니다.

반환 값은 unsigned long 형태로 반환됩니다. 사용 방법은 아래와 같습니다.

1) unsigned long time;

void setup(){

Serial.begin(9600);

}

void loop(){

Serial.print("Time: ");

time = micros();

Serial.println(time);

delay(1000);

}

[표 2-27] micros 함수 사용법

4.3.4.3. delay()

매개 변수로 지정된 시간(ms 단위)만큼 프로그램을 일시 중지하는 함수입니다. 사용 방법

은 아래와 같습니다. 변수의 크기는 unsigned long 의 범위를 갖습니다.

1) int ledpin = 13;

void setup()

{

Page 43: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

43

아두이노!

pinMode(ledpin, OUTPUT);

}

void loop()

{

digitalWrite(ledpin, HIGH);

delay(1000); //1000ms 동안 지연

digitalWrite(ledpin, LOW);

delay(1000); //1000ms 동안 지연

}

[표 2-28] delay 함수 사용법

4.3.4.4. delayMicroseconds()

매개 변수로 지정된 시간(us)만큼 프로그램을 일시 중지하는 함수입니다. 변수의 크기는

unsigned int 만큼으로 최대값은 16383입니다. 사용법은 아래와 같습니다.

1) int ledpin = 13;

void setup()

{

pinMode(ledpin, OUTPUT);

}

void loop()

{

digitalWrite(ledpin, HIGH);

delayMicroseconds(50); //50us 동안 지연

digitalWrite(ledpin, LOW);

delayMicroseconds(50); //50us 동안 지연

}

[표 2-29] delayMicroseconds 함수 사용법

4.3.5. External Interrupts

4.3.5.1. attachInterrupt()

인터럽트가 발생할 때 호출할 명명 된 인터럽트 서비스 루틴(ISR)을 지정합니다. 대부분의

Page 44: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

44

알고있노?

아두이노 보드는 두 개의 외부 인터럽트가 있습니다. 아래의 표는 보드에서 사용할 수 있

는 인터럽트 핀을 정의한 것입니다.

BOARD Interrupt 0 Interrupt 1 Interrupt 2 Interrupt 3 Interrupt 4 Interrupt 5

Uno,Eth-

enet

2 3 - - - -

MEGA2560 2 3 21 20 19 18

레오나르도 3 2 0 1 7 -

[표 2-30] 아두이노 보드 별 인터럽트 핀 정의

인터럽트 서비스 루틴에서는 delay()가 작동하지 않기 때문에 주의하여 코딩 해야합니다.

그리고 인터럽트 서비스 루틴은 대부분 다른 기능이 없고 제한된 기능을 가지는 특별한

종류입니다. 그렇기 때문에 매개 변수를 가질 수 없다. 또한 아무것도 반환하지 않는다.

일반적으로 인터럽트 서비스 루틴은 가능한 짧고 빠르게 처리해야 합니다. attach Inter-

rupt는 3개의 인자를 가지며 첫 번째 인자는 Interrupt number이고 두 번째 인자는 인터

럽트 서비스 루틴입니다. 세 번째 인자는 mode인데 모드는 5가지를 지원합니다. 그 5가

지는 HIGH(Arduino Due만 해당한다.), LOW, CHANGE, RISING, FALLING 입니다.

LOW - 핀이 LOW일 때 인터럽트 발생

CHANGE - 핀의 값이 변경될 때 인터럽트 발생

RISING - 핀에 LOW에서 HIGH로 변경될 때 인터럽트 발생

FALLING - 핀이 HIGH에서 LOW로 변경될 때 인터럽트 발생

HIGH - 핀이 HIGH 일때 인터럽트 발생(Arduino Due 만 해당)

아래의 표는 attachInterrupt() 사용 방법입니다.

1) int pin = 13;

volatile int state = LOW;

void setup()

{

pinMode(pin, OUTPUT);

attachInterrupt(0, blink, CHANGE);

}

void loop()

Page 45: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

45

아두이노!

{

digitalWrite(pin, state);

}

void blink()

{

state = !state;

}

[표 2-31]attach Interrupt 함수 사용법

4.3.5.2. detachInterrupt()

지정된 인터럽트를 해제합니다. 사용방법은 detachInterrpt(인터럽트)입니다.

4.3.6. Interrupts

4.3.6.1. interrupts()

전체 인터럽트를 활성화 시키는 함수입니다. 인터럽트는 어떤 중요한 작업이 백그라운드

에서 수행할 수 있도록 기본적으로 활성화되어 있습니다. 인터럽트가 비활성화 되어 있는

동안 일부 기능이 작동하지 않습니다. 그리고 들어오는 통신은 무시될 수 있습니다.

4.3.6.2. noInterrupts()

전체 인터럽트를 비활성화 시키는 함수입니다.

4.3.7. 통신

4.3.7.1. Serial

아두이노 보드와 컴퓨터 또는 다른 장치 사이의 통신에 사용됩니다. 모든 아두이노 보드

는(UART or USART) 적어도 하나 이상의 직렬 포트를 가지고 있습니다. Serial은 USB를 통

해 디지털 핀 0(RX)와 1(TX)을 통해 컴퓨터와 통신합니다. 이 기능을 사용하면 유저는 디

지털 입출력 핀 0과 1을 사용할 수 없습니다. 유저는 아두이노 보드와 통신하는 아두이노

환경에 내장된 직렬 모니터를 사용할 수 있습니다. 도구 모음에서 시리얼 모니터 버튼을

클릭하고 정의된 속도와 동일한 속도를 선택하면 보드에서 전송하는 serial data를 아두이

노 환경에서 확인 할 수 있습니다. Serial에는 어려가지 추가 기능들이 있습니다. 그 기능

들은 아래와 같습니다.

Page 46: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

46

알고있노?

if(Serial) - 지정된 직렬포트가 준비 되었는지 확인하는 함수입니다. 지정된 시리

얼 포트를 사용할 수 있는 경우에는 true를 반환합니다.

available() - 시리얼 포트에서 읽을 수 있는 바이트의 수를 가져옵니다. 이 data

는 시리얼을 통해 수신(64byte)된 버퍼의 data입니다.

begin() - 직렬 데이터 전송을 위한 bit의 data rate(전송속도)를 설정합니다. 300,

600, 1200, 2400, 4800, 9600, 14400, 192000, 28800, 57600, 115200 중 하나를 선

택하여 사용합니다.

end() - RX 와 TX핀을 일반적인 디지털 입출력 핀으로 사용할 수 있도록 시리얼

통신을 중지합니다.

find() - 주어진 길이의 대상 문자열이 발견될 때까지 직렬 버퍼에서 데이터를

판독합니다. 대상 문자열이 발견되면 함수는 true를 반환하고, 시간이 초과하는

경우에는 false 를 반환합니다.

findUntil() - 시리얼 버퍼에서 데이터를 읽고 주어진 길이 또는 종료 대상 문자

열을 찾을 때까지 데이터를 판독합니다. 다생 문자열이 발견되면 함수는 true를

반환하고, 시간이 초과하는 경우에는 false를 반환합니다.

flush() - 직렬데이터 전송이 완료될 때까지 기다립니다.

parsefloat() - 시리얼 버퍼에서 첫 번째 유효한 부동 소수점 수를 반환합니다.

숫자가 아닌 문자는 건너 뜁니다. 이 함수는 부동 소수점 숫자가 아닌 첫 번째

문자에서 종료됩니다.

parseInt() - 시리얼 버퍼에서 유효한 정수를 찾습니다. 유효한 정수를 시간 내에

찾을 수 없는 경우 기본값인 0을 반환합니다.

peek() - 내부 시리얼 버퍼에서 한 차례 전송이 끝나고 다음 data가 들어왔을

시 버퍼를 제거하지 않고 저장 후 반환합니다.

print() - 사람이 읽을 수 있는 아스키 text를 시리얼 포트로 프린트하는 함수입

Page 47: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

47

아두이노!

니다. 숫자는 각 숫자에 대한 아스키 문자로 사용하여 인쇄됩니다. 마찬가지로

부동소수점은 소수점 2자리까지 전송되며 문자와 문자열을 그대로 전송됩니다.

println() - 개행문자를 아스키 text를 시리얼 포트로 전송하여 사람이 읽을 수 있

도록 프린트합니다.

read() - 들어오는 시리얼 데이터를 읽습니다.

readBytes() - 직렬 포트의 버퍼에서 문자를 읽는 함수이고 읽기가 완료되면 문

자의 수를 반환합니다. 유효한 데이터가 발견되지 않았다면 0을 반환합니다.

readBytesuntil() - 시리얼 버퍼의 문자를 배열에 저장합니다. 함수는 종결 문자가

검출되는 경우 나 시간이 초과되는 경우 판독이 종료됩니다.

setTimeout() - 이 함수는 직렬 데이터가 들어오는 것을 시간을 설정하여 기다리

는 함수로 단위는 ms 단위입니다.

Write() - 직렬 포트에 이진 데이터를 기록합니다.

serialEvent() - 시리얼 데이터를 사용할 수 있을 때 즉 전송이 완료되고 버퍼를

사용할 수 있을 때 호출 되는 함수입니다. 이 함수는 데이터를 캡처 할 때 사용

됩니다.

각 함수의 사용법은 아두이노 홈페이지에 자세히 명시 되어있으니 참고해봅시다.

Page 48: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

48

알고있노?

실습 과정

Chapter 5. 개발 환경 구축

5.1. Arduino Software 설치

5.1.1. Arduino Software 다운로드

Arduino IDE(통합개발환경)는 Arduino 홈페이지(www.arduino.cc)에서 제공하고 있으며 무료

로 다운받아 설치 할 수 있습니다. 개발 하는 환경에 따라서 다운로드 받아야 할 파일이

상이합니다만 본 매뉴얼에서는 Windows 운영체제 개발 환경에 필요한 IDE를 다운받는

방법을 보여드리겠습니다.

다운로드 방법은 다음과 같습니다.

1. 홈페이지에 접속 후 SOFTWARE - DOWNLOADS 탭을 클릭합니다.

Page 49: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

49

아두이노!

2. Windows Installer, for Windows XP and up을 클릭합니다.

3. JUST DOWNLOAD를 클릭합니다.

Page 50: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

50

알고있노?

5.1.2. Arduino IDE 설치

다운이 완료되면 Arduino-1.8.6-windows을 눌러 설치를 시작합니다.

Page 51: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

51

아두이노!

Page 52: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

52

알고있노?

설치가 완료되면 폴더를 열어 Arduino 응용프로그램을 실행합니다.

우노 보드에 USB를 연결해 전원을 연결합니다.

Page 53: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

53

아두이노!

5.1.3. Arduino driver 설치

연결을 했을 때 다음 그림과 같이 장치관리자에 들어가서 포트에 Arduino Uno(COM4)와

같은 형식이 있다면 드라이버까지 잘 잡힌 것입니다.

만약 드라이버가 잡히지 않았거나 설치가 안 됐을 경우 다음의 방법으로 시도해보기시

바랍니다.

Page 54: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

54

알고있노?

Page 55: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

55

아두이노!

Page 56: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

56

알고있노?

Page 57: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

57

아두이노!

Page 58: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

58

알고있노?

위 그림과 같은 과정을 거치면 Driver설치가 완료됩니다. 이제 Arduino 프로그램에서 코

드 작성 후 컴파일 된 이미지 파일을 보드에 업 로딩하고 코드에서 출력하는 debug 메

시지를 확인 할 수 있는 조건이 갖추어진 것이다.

Page 59: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

59

아두이노!

5.2. 프로그램 작성 및 컴파일

5.2.1. 프로그램 작성

코드 작성에 필요한 준비가 완료되었으니 실제로 아두이노 프로그램에는 어떠한 기능이

있고 어떻게 사용하는지 알아 보도록 합니다. 우선 아두이노 프로그램을 실행하면 아래

그림과 같은 프로그램 실행 화면을 확인할 수 있습니다.

프로그램을 보면 위에 5개의 메뉴와 그 아래 6개의 아이콘들이 있다. 각각 의 아이콘들을

살펴 보면 다음과 같습니다.

1: 컴파일 -> 작성된 프로그램을 컴파일 합니다.

2: 컴파일 및 업로드 -> 작성된 프로그램을 컴파일 후 보드에 업 로딩 합니

다.

3: 새파일 -> 새로운 스케치 파일을 생성합니다.

Page 60: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

60

알고있노?

4: 열기 -> 저장된 스케치 파일을 엽니다.

5: 저장 -> 스케치 파일을 저장합니다.

6: 시리얼모니터 -> 코드상에서 Serial Data 전송 및 출력합니다.

아이콘들의 기능입니다. 이 기능들을 숙지 하고 다음과 같이 타이핑하여 기본적인 소스코

드를 작성해보세요.

소스코드를 설명하자면 13이라는 값을 가지는 int형 변수 led를 선언해서 출력핀으로 설

정하고 1초마다 HIGH와 LOW를 쓰는 소스입니다. 다음에 설명할 블링크 예제와 같은 소

스입니다.

Page 61: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

61

아두이노!

5.2.2. 파일 열기

프로그램의 메뉴에서 파일 ->예제->01.Basics->Blink를 선택합니다.

Blink를 선택 아래의 그림처럼 코드가 작성된 새로운 스케치가 생성됩니다.

Page 62: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

62

알고있노?

[그림 3-9]예제 Blink

주석으로 처리된 구문이 있는데 예제에 대한 설명과 언제, 누가 수정했는지에 대한 설명

이 나옵니다. 여기서는 이 예제에 대한 설명이 나와있는데 우리가 사용하는 우노 보드에

선 LED_BUILTIN는 13번 핀으로 설정 돼있다 정도만 알면 됩니다.

소스 코드를 설명 하자면 Setup() 함수에서 LED와 연결된 핀 (13번)을 pinmode() 라는

api 함수를 통해 출력으로 설정하고 loop() 함수는 출력으로 설정된 LED Pin을 digital-

Write()함수를 통해 HIGH 을 출력으로 내보내고 1000ms 즉 1초 후에 다시 LED pin에

LOW를 출력하는 소스 코드입니다.

동작으로 본다면 1초 LED ON 1초 LED OFF의 동작을 한다. 여기서 setup 함수는 스케치가

실행되면서 처음에 한번 실행되는 함수이고 주로 외부디바이스와 연결된 포트 설정 및

Serial을 초기화합니다. loop()함수는 스케치가 실행되면 처음 setup 함수를 실행한 다음

board가 멈추기 전까지 계속해서 loop() 함수를 실행합니다.

Page 63: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

63

아두이노!

5.2.3. 컴파일 방법

blink 스케치에 대해 알아보았고 소스가 확인되었으므로 컴파일 한다. 컴파일은 메뉴의

스케치->확인/컴파일을 누르거나 아이콘에서 √아이콘(확인)을 클릭합니다.

Page 64: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

64

알고있노?

컴파일 버튼을 클릭하면 위 그림처럼 진행바가 나타나고 진행바가 끝까지 가게 되면 컴

파일이 완료됩니다. 만약 에러가 있을 경우에는 주황색 메시지로 에러 메시지를 표출하게

됩니다.

5.3. 이미지 로딩 및 디버그 방법

5.3.1. 이미지 로딩

위에서 컴파일까지 진행했습니다. 이 컴파일 된 이미지를 보드에 업 로딩 하는 방법을 알

아보고 또한 디버그 방법은 어떻게 하는지 알아보겠습니다.

보드에 이미지 업 로딩을 위해서는 2가지 설정이 완료되어야 합니다. 첫번째 설정은 "보

드" 설정입니다. 아두이노 프로그램은 제공하는 보드에 대한 ISP설정이 각 기기 별로 되

어 있어 그것을 선택해 주기만 하면 업 로딩은 아주 쉬운 구조로 돼있습니다. 선택하는

Page 65: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

65

아두이노!

방법은 메뉴에서 툴->보드->"보드 선택" 선택하여 설정합니다. 아두이노 보드가 여러종류

가 있기때문에 자신의 보드에 맞게 선택합니다.

보드 설정이 완료 되었다면 두 번째로 설정해야 할 것이 시리얼 포트설정입니다+. 아두

이노 프로그램은 이미지를 업 로딩할 때 USB포트를 통해 이루어지기 때문에 USB가 연결

된 포트를 설정해야만 합니다. 설정 방법은 도구->시리얼 포트->"연결된 포트"를 선택합

니다.

시리얼 포트까지 완료되었다면 이미지 업 로딩 준비가 끝났습니다. 보드에 업 로딩은 ->

모양의 Icon을 클릭하여 이루어집니다.

Page 66: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

66

알고있노?

업 로딩이 완료되면 보드의 LED(PIN13에 연결된 LED)가 1초 ON, 1초 OFF 동작 하는 것

을 확인 육안으로 확인 할 수 있습니다.

5.3.2. 디버그 방법

위의 Blink 예제처럼 LED를 제어하여 육안으로 확인이 가능하다면 코드가 돌아 간다는 것

을 확인할수 있습니다. 하지만 코드 중간에 에러가 나거나 코드가 어느 흐름으로 이루어

지는지 알고 싶을 경우에 일일이 LED를 제어할수는 없습니다. 이럴 때 이용하는 것이

Serial 모니터 기능을 이용하여 debug 메시지를 출력하여 확인 할 수 있습니다. Serial 모

니터 기능 사용하기 위해서는 우선 setup 함수에 Serial을 사용할 수 있도록 초기화 하고

loop()함수가 동작 시 원하는 위치에 print()함수를 이용하여 메시지를 출력합니다. 이렇게

되면 코드가 원하는 방향으로 흘러가는지 및 원하는 data가 나오는지를 확인할수 있어

debugging시 상당한 도움됩니다. blink예제에 Serial을 초기화 하고 LED제어 후 println메

시지를 출력해 보도록합니다.

코드는 아래그림과 같습니다.

Page 67: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

67

아두이노!

위 그림에서 빨간색으로 네모 칸 쳐진 곳이 Blink 예제에서 추가된 부분입니다. 설명을 첨

부한다면 setpup() 함수에서 Serial을 115200의 baud rate 의 속도로 초기화 한 것이고

loop()함수에서 LED를 제어 후 Pirint 할 Data를 Serial로 보내고 있습니다. 이것을 컴파일

후 업로딩 하여 시리얼 모니터로 확인할수 있습니다.

Page 68: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

68

알고있노?

위 그림처럼 코드에서 작성한 LED ON, OFF print 문이 시리얼 모니터 창에 표시되는

것을 확인 할 수 있습니다. 이렇게 Serial debugging 을 사용하여 손쉽게 debuging이

가능합니다.

Page 69: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

69

아두이노!

Chapter 6. 디지털 제어

6.1. LED

LED란 (light emitting diode) 우리나라 말로 하면 발광 다이오드로 불려지며 갈륨비소 등

의 화합물에 전류를 흘려 빛을 발산하는 반도체 소자로, m 반도체의 p-n 접합 구조를 이

용하여 소수캐리어 (전자 or 정공)를 주입하고 이들의 재결합에 의하여 발광시킵니다. 전

기에너지를 빛 에너지로 전환하는 효율이 높기 때문에 최고 90%까지 에너지를 절감 할

수 있어, 에너지 효율이 5% 정도 밖에 되지 않는 백열등, 형광등을 대체할 수 있는 차세

대 광원으로 주목되고 있습니다. LED는 아래 위에 전극을 붙인 전도물질에 전류가 통과하

면 전자와 정공이라고 불리는 플러스 전하입자가 이 전극 중앙에서 결합해 빛의 광자를

발산하는 구조로 이루어져 있는데, 이 물질의 특성에 따라 빛의 색깔이 달라집니다.

6.1.1. 제어 방법

LED를 제어하기 위해 알아야 할 것 중 하나가 GPIO (General-purpose Input Output)입니

다. GPIO란 범용으로 사용되는 입출력 포트를 말합니다. 임베디드 시스템의 여러 가지 기

능을 위한 주변장치 및 소자들을 동작시키기 위해서 그것들이 원하는 방식으로 인터페이

스를 하기 위해 적절한 신호를 보내주어야 하며, 이 때, 설계자가 원하는 방식으로 제어

할 수 있도록 제공하는 입출력 포트입니. 간단히 예를 들면, LED ON/OFF, FND 제어,

Buzzer 소리를 켜기 위해서 해당 소자에 0 혹은, 1의 신호를 보내주는 것이고, TEXT-LCD

에 글자를 출력하기 위한 병렬신호를 보내주는 것입니다. GPIO를 이용한 LED 램프 제어

를 위해서는, LED는 양극에 5볼트의 전압을 인가하고 음극에 0볼트(접지)를 유지하면 LED

다이오드에 전류가 흐르게 되어 램프가 점등됩니다. 이때, Microcontroller에 의하여 전압

을 조절함으로써 LED 램프 점멸을 조정합니다.

6.1.2. 준비물

UNO 보드, 브레드 보드, LED, 220 Ω 저항, 전선

Page 70: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

70

알고있노?

6.1.3. 블록도

6.1.4. 결선 방법

Arduino Uno LED

Digital 10 +

GND -

6.1.5. 소스

LED_GPIO.ino

1 #define LED_PIN 10

void setup() {

pinMode(LED_PIN,OUTPUT);

}

void loop() {

digitalWrite(LED_PIN,HIGH);

2

3

4

5

6

Page 71: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

71

아두이노!

7 delay(500);

digitalWrite(LED_PIN,LOW);

delay(500);

}

8

9

10

6.1.6. 동작

LED가 0.5초 켜졌다 0.5초 꺼졌다 반복 동작합니다.

Page 72: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

72

알고있노?

6.2. Switch

우리나라 말로 개폐기라고도 합니다. 전류의 흐름을 막거나 계속 흐르게 하는 용도로 사

용됩니다. 누름 단추 개폐기, 슬라이드 개폐기, 토글 개폐기, DIP 스위치, 로터리 스위치

등의 종류가 있습니다.

6.2.1. 제어방법

플로팅 상태를 피하기 위해서 풀업 저항을 사용하여 연결해줍니다. 버튼이 눌리지 않았을

때는 항상 HIGH로 입력이 됩니다. 이게 풀업 저항의 역할입니다. 버튼이 눌렸을 때 입력

이 LOW로 됩니다. 버튼이 눌릴 때마다, 즉 LOW가 될 때마다 상태가 변화는 토글 스위치

를 구성해서 제어하겠습니다.

6.2.2. 준비물

UNO 보드, 브레드 보드, Switch, 220 Ω 저항, 전선

Page 73: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

73

아두이노!

6.2.3. 블록도

6.2.4. 결선 방법

Arduino Uno Switch

Digital 0 1

GND 2

5V 4

6.2.5. 소스

LED_GPIO.ino

1 #define STATUS_PIN 0

boolean SwitchStatus=LOW;

boolean PushButton;

void setup() {

pinMode(STATUS_PIN,INPUT);

Serial.begin(115200);

}

void loop() {

PushButton = digitalRead(STATUS_PIN);

if(PushButton ==LOW)

{

Serial.println("Toggle");

if(SwitchStatus==HIGH)

2

3

4

5

6

7

8

9

10

11

12

13

Page 74: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

74

알고있노?

14 {

SwitchStatus=LOW;

Serial.println("HIGH->LOW");

}

else

{

SwitchStatus=HIGH;

Serial.println("LOW->HIGH");

}

delay(500);

}

}

15

16

17

18

19

20

21

22

23

24

25

6.2.6. 동작

버튼 스위치를 누를 때마다 상태가 바뀌는 스위치입니다. HIGH인 상태에서 버튼을 누르

면 LOW로 변하고 또 다시 버튼을 누르면 LOW에서 HIGH로 상태가 변합니다. 우리는 흔

히 토글 스위치라고 합니다.

Page 75: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

75

아두이노!

6.3. Switch로 LED ON/OFF시키기

토글 스위치는 우리 주변에서 흔히 찾아볼 수 있습니다. 가정에서 쓰는 등 스위치도 토글

스위치의 원리이고, 컴퓨터 키보드에도 보면 토글키인 Number Lock 버튼과 Caps Lock 버

튼이 있습니다. 이번엔 토글 스위치를 이용해서 LED를 제어해보겠습니다.

6.3.1. 제어방법

플로팅 상태를 피하기 위해서 풀업 저항을 사용하여 연결해서 버튼이 눌릴 때 마다 상태

가 변해서 LED가 켜지고 꺼지고 하는 프로그램을 만들어보겠습니다.

6.3.2. 준비물

UNO 보드, 브레드 보드, Switch, LED, 220 Ω 저항 2개, 전선

Page 76: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

76

알고있노?

6.3.3. 블록도

6.3.4. 결선 방법

Arduino Uno Switch Arduino Uno LED

Digital 1 1 Digital 2 +

GND 2 GND -

5V 4

6.3.5. 소스

LED_GPIO.ino

1 #define STATUS_PIN 1

#define LED_PIN 2

boolean SwitchStatus=LOW;

boolean PushButton;

void setup() {

pinMode(STATUS_PIN,INPUT);

pinMode(LED_PIN,OUTPUT);

Serial.begin(115200);

}

void loop() {

PushButton = digitalRead(STATUS_PIN);

if(PushButton ==0)

{

if(SwitchStatus==HIGH)

2

3

4

5

6

7

8

9

10

11

12

13

14

Page 77: 알고있노 아두이노 - cafe24갈릴레오 보드는 인텔의 퀄크(Quark)프로세서 X1000을 이용한 고성능의 아두이노 호환 보드입니다. 최대 400MHz의 클럭속도를

77

아두이노!

15 {

SwitchStatus=LOW;

Serial.println("HIGH->LOW");

}

else

{

SwitchStatus=HIGH;

Serial.println("LOW->HIGH");

}

digitalWrite(LED_PIN,SwitchStatus);

delay(500);

}

}

16

17

18

19

20

21

22

23

24

25

26

27

6.3.6. 동작

버튼 스위치를 누를 때마다 LED의 상태가 바뀌는 프로그램 입니다. HIGH인 상태에서 버

튼을 누르면 LOW로 변하고 또 다시 버튼을 누르면 LOW에서 HIGH로 상태가 변합니다.

우리는 흔히 토글 스위치라고 합니다.