본문 바로가기

아두이노

아두이노에서 변수 사용하기

아두이노 프로그램에서 변수는 자주 사용하게 되는데 Blink 예제를 이용해서 변수를 알아보자.

 

변수

 

변수는 어떤 값을 기억하는 것이라고 생각하면 되는데 데이터형에 따라서 기억할 수 있는 내용이 다르다.

 

아두이노 데이터형

용량 내용
boolean 1바이트 참,거짓 true(=1) 또는 false(=0)
char 1바이트 문자(아스키코드) -128 ~ 128
byte 1바이트 바이트 0 ~255
int 2바이트 정수 -32,768 ~ 32,767
unsigned int 2바이트 부호가 없는 정수 0 ~ 65,536
long 4바이트 long 정수 -2,147,483,648 ~ 2,147,483,647
unsigned long 4바이트 부호가 없는 long 정수 0 ~ 4,294,967,295
float 4바이트 실수 -3.4028235E+38 ~ 3.4028235E+38
double 4바이트 실수(float와 같음)  

 

여기서 하나를 더 추가하자면 문자열인데, 문자열은 문자 여러 개를 의미하고 큰따옴표("")로 표시한다. 1바이트 문자와는 다르게 구별해서 사용하며 문자는 작은따옴표('')로 표시한다.

 

문자 : 'x' , 'y'
문자열 : "string" , "val"

 

스케치를 보다보면 아래와 같이 다르게 표시할 때도 있다. 

unit8_t <= byte

unit16_t <=  unsigned int

unit32_t  <= unsigned long 

 

 

Blink 예제에서 변수 추가하기

 

원래 Blink 예제에서 주석 들을 지우고 남긴 코드이다.

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   
  delay(1000);                       
  digitalWrite(LED_BUILTIN, LOW);   
  delay(1000);                      
}

 

여기에서 LED 핀을 기억하는 변수 하나와 대기함수(delay) 시간을 기억하는 M 변수를 하나를 만들어보자.

둘 다 숫자형이므로 int 를 앞에 쓰고 그 뒤에는 변수 이름을 쓴다. 그리고 변수에 저장할 값을  = 뒤에 입력한다.

 

 

변수 선언(만들기)

데이터형 변수이름 = 초기값(처음 값);
ex) int name = 0;

 

그리고 LED 변수에는 13을, M 변수에는 1000을 저장하고 각각 맞는 위치에 변수 값을 넣으면 아래와 같다.

int LED = 13;
int m =1000;

void setup() {
  pinMode(LED, OUTPUT);
}

void loop() {
  digitalWrite(LED, HIGH);   
  delay(m);                       
  digitalWrite(LED, LOW);   
  delay(m);                     
}

맨 위에서 변수를 선언하면 그 아래에서 변수 이름을 쓰면 변수에 저장된 값이 대입된다고 보면 된다.

즉, pinMode(LED, OUTPUT) 는 pinMode(13, OUTPUT) 와 같은 의미이다.

 

 

전처리기로 변수 선언하기

 

아두이노에서는 #define을 사용하면 변수를 선언할 수 있다. 여기서 전처리기란 소스 코드를 컴파일하기 전에 먼저 수행되는 걸 의미하는데 헤더 파일 추가나 문자열을 치환할 계산식 등을 현재 열려 있는 소스코드에 삽입하는 역할을 한다.

전처리기 명령 중 자주 사용하는 것은 다음과 같다. 

 

#include <헤더파일명>
#define 문자열 계산식, 숫자, 문자열
#import 
# 조건부 컴파일

 

#define을 사용해서 변수를 선언해서 코드를 수정하면 아래와 같다. 여기서 연산자(=)와 세미콜론(;)은 사용하지 않는다. 전처리기를 사용해서 변수를 선언할 때는 보통 대문자로 쓴다. 

#define LED 13

void setup() {
  pinMode(LED, OUTPUT);
}

void loop() {
  digitalWrite(LED, HIGH);   
  delay(1000);                       
  digitalWrite(LED, LOW);   
  delay(1000);                     
}