[아두이노] [강좌] 2. Blink 예제 해부하기(1)

이번 강좌에서는 “Blink” 예제를 가지고 아두이노의 기본을 공부해보자.

 

우선 스케치 툴을 실행한다최신 버전으로 스케치 툴을 설치했다면 스케치 툴을 실행했을 때 다음과 같은 화면을 볼 수 있다.


cca51c7c70a0c58364b1ca81582076c3.png

 

바로 setup() 함수와 loop() 함수이다. 1.0.5 이전 버전을 설치했다면 그냥 빈 화면이 나타날 것이다빈 화면일 경우에는 직접 setup() 함수와 loop() 함수를 입력해줘야 한다이 두 함수는 아두이노 소스에서 반드시 있어야 할 함수니까없으면 에러 남.

 


setup() 함수는 말 그대로 아두이노 보드를 설정또는 초기화 하는 함수이다아두이노에 전원을 켜면 최초에 한 번 실행된다주로 핀의 입출력 설정과 객체 초기화가 실행된다함수는 ‘{‘로 시작해서 ‘}’로 끝나니까 이 사이에 초기화 해 줄 구문들을 작성하면 된다.

 

loop() 함수는 setup() 함수가 끝난 후 실행되며아두이노 보드에 전원이 꺼지거나 리셋이 발생하기 전까지 무한 반복되어 실행되는 함수이다아두이노 보드의 주 기능이 여기에 구현된다.

 


Blink 예제를 보면서 설명해보자스케치 툴의 파일→예제→01.BasicsBlink”를 열어보자버전 업이 되면서 Blink 예제가 다음 그림과 약간 다를 수 있다차이는 led 핀 번호를 변수로 썼는가아닌가의 차이.


 c3782267b7011b385a5550579f9d5f5e.png 

  

하는 김에 변수 설명까지 하려고 이전 버전의 예제를 올렸다.

 

변수는 변경할 수 있는 값을 저장하는 하나의 단위”. 저장되는 값은 숫자문자(True) 또는 거짓(False), 또는 다른 변수가 저장된 곳의 주소 등이 될 수 있으며변수가 선언될 때 저장되는 값의 종류를 지정해야 한다.



 int led = 13;

 



여기서 “int”가 변수의 종류 또는 타입을 지정하는 예약어(용도가 미리 정해진 문구)”이며저장되는 값이 정수형 숫자라는 뜻이다아두이노에서 지원하는 변수의 종류는 다음과 같다.

db01b5758738ee61123415d6581236c6.png


많구만.

 

“void”는 변수 종류라기보다는 단지 키워드라고 생각하면 되는데, setup() 함수에서 다시 설명하도록 하고.

 

“boolean"은 (TRUE)’이냐 거짓(FALSE)’이냐를 저장하는 변수 타입, “char”는 하나의 문자를 저장하고, “byte”는 한 바이트(Byte, 8bit) 크기의 숫자, “int” 2 바이트 크기의 정수, “word” 2 바이트 크기의 숫자, “long” 4 바이트 크기의 정수를 저장하는 변수 타입이다.

 

앞에 “unsigned”라고 붙은 건 부호(-/+)를 사용하지 않고 양의 정수만을 저장한다는 뜻. “unsigned”가 붙지 않은 “int”, “long”, “char” 타입은 모두 음의 정수, 0, 양의 정수를 저장할 수 있다참고로 “word”는 또는 양의 정수만을 저장하며, “unsigned int”와 동일하다.

 

같은 정수를 저장하는 타입이지만 “int”와 “long”은 크기가 다른데이는 저장할 수 있는 수의 범위가 다르다는 것을 의미한다. “int” 2 바이트의 크기로 -32,768부터 32,767까지의 수를 저장할 수 있고, “long” 4 바이트의 크기로 -2,147,483,648부터 2,147,483,647까지의 수를 저장할 수 있다. “unsigned int”와 “unsigned long”은 음의 정수를 사용하지 않으므로 각각 0부터 65,535, 0부터 4,294,967,295까지의 수를 저장할 수 있다.

 

“float”과 “double”은 모두 4 바이트의 실수를 저장할 수 있다아두이노 보드 중 듀에(Due)의 경우 “double” 8 바이트의 크기를 가진다듀에는 “int”와 “word”의 크기가 4 바이트로 다른 아두이노 보드와는 약간 다른 점이 있다듀에에 대해서는 나중에 따로 포스팅하도록 하자. (다짐인가?)

 

“string”은 실제로 사용되는 예약어가 아니라 문자 배열을 나타낸다. “char” 형태의 변수가 여러 개 이어져 있는 “char[]” 형이라고 생각하면 된다. “String(첫 문자가 대문자인 것에 유의)” 형태는 문자 배열을 좀 더 효율적이고 사용하기 쉽도록 하기 위해 아두이노에서 제공하는 객체 형태의 변수 타입이다. ‘문자열을 저장하는 변수라고 생각하고 나중에 다시 자세히 설명하도록 하자. (또 다짐인가?)

 

“array”는 역시 예약어가 아니라 배열을 나타내는 말이다. “char” 뿐만이 아니라 모든 변수 타입으로 구성할 수 있다변수명 뒤에 “[]”을 붙여 배열 변수임을 나타내며, “[“와 “]” 사이에 배열의 크기를 지정해야 한다. (문자 배열의 경우는 문자열로 초기화하는 경우에 한해 크기를 지정하지 않아도 됨.)



.. 힘들어.moon_and_james-19

 


 

변수의 종류를 지정했다면 다음으로 변수의 이름을 정해야 하고이를 변수명이라고 한다변수명은 소스 내에서 해당 저장 공간을 나타내는 이름으로 사용된다위의 예제에서 “led”라는 단어가 변수명으로 사용되고 있다.

 

변수명을 정하는데는 몇가지 규칙이 있는데그 규칙은 다음과 같다. (사실 대부분의 프로그래밍 언어에서 다음 규칙을 따라야 한다.)


  1. 알파벳 대문자, 소문자, 숫자,N'_(언더바)'를 사용할 수 있으며, 그 외의 특수 문자는 사용할 수

     없다.

  2. 첫 글자에 숫자가 올 수 없다.

  3. 대, 소문자를 구별한다.

  4. '예약어'를 변수명으로 사용할 수 없다.

 



4번 항목에서 말하는 예약어란 위에서 설명한 변수 종류를 정의한 단어들이나 “if”, “for” 등의 미리 정의된 키워드들을 뜻한다.

 

 

그리고 마지막으로 변수에 값을 저장하기 위해 ‘=’이라는 문자를 사용하며 ‘=’ 뒤에 저장할 값을 적어주고 ‘;(세미콜론)’ 문자로 끝낸다기본적으로 함수 구문의 범위를 결정하는 “{}” 외의 모든 구문은 ‘;’ 문자로 끝나야 한다.



그럼 다시 한번 예제 소스의 변수 선언(변수 타입과 변수명을 처음 정하는 것을 선언하다’ 또는 정의하다라고 쓴다부분을 살펴보자.



 int led = 13;

 



“int”라고 2 바이트의 정수형을 저장할 변수임을 선언하고변수명을 “led”라고 정해준다그리고 “led”라는 변수에 ‘13’이라는 값을 저장한다.

 

변수의 선언은 단 한 번만 쓸 수 있으며두 번 이상 같은 변수명이 선언될 경우 컴파일 에러가 발생한다.

 

변수를 선언할 때 위의 예제처럼 값을 저장할 수도 있고(이를 초기화라고 한다), 나중에 저장할 수도 있다값을 초기화하지 않을 경우에 변수에 어떤 값이 저장되어 있을지는 알 수 없다웬만하면 ‘0’으로라도 초기화를 해주는 것이 좋다.


다음은 여러 형태의 변수를 선언하는 예시이다.



  

 int a;     // 정수형 변수 ‘a’, 초기화 하지 않음

 byte b=0;   // 1 바이트 양수(+)형 변수 ‘b’, 0으로 초기화

 long c1=5;   // 4 바이트 정수형 변수 ‘c1’, 5로 초기화

 float f_d = 0.5;   // 실수형 변수 ‘f_d’

 char charvalue = ‘c’;   // 문자형 변수 ‘charvalue’, 소문자 ‘c’를 저장

 char chararray[] = “Hello”;   // 문자 배열 변수 ‘chararray’, 문자열 “Hello”를 저장

 int intarray[3];    // 정수형 배열 변수 ‘intarray’, int 형 변수 3개를 배열로 선언

 float float_array[5] = {0.0, 1.1, 2.2, 3.3, 4.4};  // 실수형 배열 선언, 5개를 각각의 값으로 초기화

 boolean bl = FALSE;   // 참,거짓형 변수 선언. 'TRUE' 또는 'FALSE' 중 하나를 저장




선언 이후로는 변수 타입 없이 변수명만 사용해서 값을 저장하거나 읽어올 수 있다. 값을 저장할 때는 직접 값을 입력하는 방법과, 다른 변수의 값을 '대입'하는 방법이 있다.



  

 int a=1;

 int b=2;


 a = 3;   // 직접 입력

 b = a;   // 'a'의 값을 대입




변수는 선언하는 위치에 따라 전역 변수와 지역 변수로 나눠지며사용할 수 있는 범위가 달라진다함수 안에서 선언된 변수를 지역 변수라고 하며이 변수는 선언된 함수 안에서만 사용할 수 있다반면에 “Blink” 예제에서처럼 함수와 상관 없이 밖에 선언된 변수를 전역 변수라고 하며전역 변수는 해당 소스 파일 내의 어느 곳에서도 사용할 수 있다.



 

 int a 13;   // 전역 변수

 a = 12;    // 사용할 수 있음


 void setup() {

   int b 10;  // 지역 변수

   b = 11;   // 사용할 수 있음

   b = a;    // 사용할 수 있음

 }


 b = 9;   // 사용할 수 없음

 a = 0;  // 사용할 수 있음



.. 변수 설명이 생각보다 길어졌다. 간단하게 설명하고 넘어갈랬는데, 이 놈의 설명 강박.moon_and_james-12




힘드니까 오늘은 여기까지. “Blink” 예제의 setup() 함수와 loop() 함수는 다음 강좌에서 만나요안녕~

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
118 아두이노 ESP32 Analog Inputs (ADC) +4 icon 양재동메이커 02-12 15,883
117 아두이노 TIP : Serial의 Port가 Open 시점 확인 icon 양재동메이커 01-21 12,794
116 아두이노 ESP32 Boot Mode icon 양재동메이커 12-28 12,586
115 아두이노 아두이노 에러 리스트(Arduino Error list) icon 양재동메이커 11-24 17,515
114 아두이노 ESP32 main.cpp +1 icon 양재동메이커 11-19 12,969
113 아두이노 ESP32 EEPROM 와 IR Remote icon 양재동메이커 08-06 12,878
112 아두이노 Learn ESP32 icon 양재동메이커 06-25 12,446
111 라즈베리 파이 라즈베리 파이 (Raspberry Pi) 기초 icon 양재동메이커 06-19 13,867
110 라즈베리 파이 (동영상 강의) 라즈베리 파이 강좌 Link icon 양재동메이커 06-17 13,038
109 STM32 / MBED [MED] Switch debouncing icon HellMaker 12-30 14,975
108 기타 [타이젠] 아두이노의 16x2 LCD Display라이브러리 LiquidCrystal_I2C의 타이젠 포팅 icon 양재동메이커 09-15 14,593
107 기타 [타이젠] GPIO의 디지탈 출력과 입력 인터럽트의 C++ Class 제작 icon 양재동메이커 09-12 14,064
106 마이크로비트 서보 모터 icon HellMaker 09-03 13,872
105 마이크로비트 아날로그 온도센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 14,414
104 마이크로비트 터치센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 13,489
103 마이크로비트 디지털 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 12,653
102 마이크로비트 리니어 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 12,198
101 마이크로비트 불꽃 감지 센서 (마이크로 비트 센서 활용) icon HellMaker 08-26 12,562
100 마이크로비트 로터리 엔코더 (마이크로 비트 센서 활용) icon HellMaker 08-25 12,682
99 마이크로비트 2컬러 LED(3mm) (센서 활용) icon HellMaker 08-22 12,652