아두이노 코딩 : 데이터 타입, 변수, 상수
데이터 타입, 변수 선언 방법, 상수 선언 방법 그리고 관련 예제를
작성하였습니다.데이터 타입이란?
아래 그림에 다양한 가방이 있습니다. 가방은 크기와 용도에 따라 적절히 사용되어야 합니다. 마트에 장보러 갈 때에 사야 할 물품이 적으면 장바구니를 가져가면 되고, 사야 할 물건이 많으면 휴대용 카드를 사용 할 수 있습니다. 가서 더 살 수도 있으니 고민 없이 휴대요 카트를 가져가시는 분도 계실 것입니다.
가방의 종류
프로그래밍에 사용되는 데이터의 종류(Data Type)도 마찬가지 입니다. 프로그램의 메모리는 한정되어 있기 때문에, 데이터 타입은 데이터 크기(1Byte, 2Byte, 4Byte)에 따라, 데이터 종류에 따라(문자,문자열,정수,소수...) 나뉘어 집니다. 아두이노는 다양한 데이터 타입을 지원하지만, 자주 사용되는 데이터 타입만 정리하면 아래와 같습니다. 프로세서가 변경되는 경우 1int 와 double 의 데이터 크기는 변경 될 수 있습니다.
Arduino Uno 기준 데이터 타입
변수와 상수
데이터 타입은 변수 또는 상수로 구분됩니다. 변수와 상수는 값을 저장하기 위한 메모리 공간입니다. 변수는 변할 수 있는 값을 저장하기 위해 사용하고, 상수는 동일한 값을 가지는 숫자나 문자열을 저장하는 공간입니다.
변수 선언
변수를 선언하는 방법은 아래와 같이 데이터 타입 + 변수명으로 작성합니다. 변수의 값은 변수를 선언할 때 해도 되고, 나중에 해도 무방합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | char cNumber = 65; char cCharacter = 'A'; int iInt = 65; double dPI = 3.1415; void setup(){ Serial.begin(9600); Serial.print("cNumber : "); Serial.print(cNumber); Serial.print('\n'); Serial.print("cCharacter : "); Serial.print(cCharacter); Serial.print('\n'); Serial.print("iInt : "); Serial.print(iInt); Serial.print('\n'); Serial.print("dPI : "); Serial.println(dPI, 4); } void loop(){ } | cs |
변수명으로 시리얼 출력
상수 선언
상수를 선언하는 방법
- 한정자
const를 사용하여const + 데이터타입 + 변수명으로 작성 - 주의사항
- 상수 선언과 동시에 값 초기화 필요
- 상수는 수정이 불가
- 선언 예시
- const double PI = 3.1415;
상수 선언시, 값을 초기화 하지 않으면 에러
상수 수정할 경우 에러
변수 사용 범위
변수의 유효 범위는 선언된 변수가 사용할 수 있는 구역을 의미합니다. 변수가 선언된 위치에 따라 지역 변수(Local variables) 와 전역 변수(global variables) 로 구분 됩니다.
지역 변수
지역 변수는 함수 내에서 선언되는 변수를 의미합니다. 함수는 void setup() void loop() while() 등과 같이 함수명() 와 같은 형태입니다. 함수 내에서 선언된 변수는 다른 함수에서 접근 할 수 없어 지역 변수란 용어로 사용됩니다.
지역 변수 특징
- 선언된 함수에 의해 사용되는 메모리 공간에서 저장 되는 변수
- 선언된 함수에서만 사용 가능
- 다른 함수에서 같은 이름의 지역 변수명 사용 가능
전역 변수
전역 변수는 코드의 선언부에 선언되는 변수입니다. 선언부에 선언된 변수는 프로그램 내 모든 함수에서 접근 및 사용이 가능합니다.
전역 변수 특징
- 프로그램 전 영역에서 엑세스 가능
- 프로그램 내 임의의 함수에서 변경 될 수 있음
※ 참고 : 함수 내에서 전역 변수와 같은 지역 변수가 선언되면, 해당 함수에서 전역 변수 접근/사용이 불가합니다.
변수와 상수 예제
원 둘레 계산
원 반지름이 0 ~ 10 에서 원 둘레가 어떻게 변하는 지를 나타내는 테이블을 출력하는 예제입니다. 수학식 원 둘레 = 2 x 반지름 x 파이 를 이용하였습니다. 원의 반지름은 변수로, 파이는 상수로 선언하였습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | const float fPI = 3.1415; // PI를 fPI 상수명으로 소수점 4자리 까지 초기화 float circumference; // 둘레를 저장할 float 타입 변수 선언 void setup(){ Serial.begin(9600); Serial.println("Circle circumference calculation start..\n"); delay(1000); } void loop(){ // 테이블 머리말 Serial.print("Radius"); Serial.print("\t"); Serial.println("circumference"); for(int radius = 0 ; radius < 10 ; radius++){ // radius 가 0 ~ 9 까지 반복 Serial.print(radius); Serial.print(" mm\t"); circumference = 2 * fPI * radius; // 원 둘레 구하는 공식 Serial.print(circumference, 2); // 둘레 소수점 2자리 까지 출력 Serial.println(" mm"); } while(1){;}; } | cs |
프로그램 내의 상수 또는 변수 선언 부분은 아래와 같습니다. 참고해주세요.
LED 깜빡이기 : 핀 번호를 상수로 선언
이전 디지털핀(Digital I/O)으로 LED 깜빡이기 포스트에서 작성 한 LED 깜박이기 프로그램에, 핀 번호를 상수로 지정하면 아래와 같이 프로그램 수정이 가능합니다.
상수 선언을 적용하면 아래와 같은 장점이 있습니다.
- 프로그래밍시 HW 핀 번호를 기억하지 않고, ledPIN, MotorPin 등의 이름으로만 작성 가능
- 핀 번호가 변경 될 경우 최상 단의 상수 선언 부 코드만 수정
기존 코드
1 2 3 4 5 6 7 8 9 10 11 | // before void setup(){ pinMode(13, OUTPUT); // 13번핀 출력 설정 } void loop(){ // 13번핀 현재 전압의 반전된 값으로 출력 // HIGH 일경우 LOW로, LOW일 경우 HIGH 로 반전 출력 digitalWrite(13, !(digitalRead(13))); delay(500); } | cs |
수정된 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 | // after const int ledPin = 13; void setup(){ pinMode(ledPin, OUTPUT); // 13번핀 출력 설정 } void loop(){ // 13번핀 현재 전압의 반전된 값으로 출력 // HIGH 일경우 LOW로, LOW일 경우 HIGH 로 반전 출력 digitalWrite(ledPin, !(digitalRead(ledPin))); delay(500); } | cs |
마무리
아두이노 프로그래밍의 기본이 되는 데이터 타입, 변수, 상수에 대해 알아 보았습니다. 다음 포스트도 프로그래밍의 기본 요소인 조건문과, 반복문에 대해서 작성해 나갈 예정입니다.
끝까지 읽어주셔서 감사합니다.^^
- 아두이노 데이터 타입 : https://www.arduino.cc/reference/en/#variables [본문으로]
'Embedded > Arduino' 카테고리의 다른 글
아두이노 강좌 #9 프로그래밍 기초 - 반복문 while, for 로 로또 번호 생성 (0) | 2020.07.08 |
---|---|
아두이노 강좌 #8 프로그래밍 기초 - 조건문 if, switch ~ case (0) | 2020.07.07 |
아두이노 강좌 #6 시리얼 통신 3. UART 수신 프로그래밍 (1) | 2020.07.05 |
아두이노 강좌 #5 시리얼 통신 2. UART 초기화 및 송신 프로그래밍 (2) | 2020.07.04 |
아두이노 강좌 #4 시리얼 통신 1. 개요 및 Hello World 출력 (0) | 2020.07.03 |