3D프린터와 아두이노/아두이노

아두이노 스케치의 C언어 변수와 자료형

메카럽 2020. 9. 6. 10:06

안녕하세요. 메카럽입니다.

지난 포스팅에서 간단한 실습을 진행해보니 배우고 싶어지는 의욕이 점점 커지는 것 같습니다. 아직은 초보의 길을 걷고 있지만 언젠가는 제가 원하는 프로그래밍을 통해 3D프린터를 융합할 수 있을 것이라고 생각합니다.

그런데 C언어가 난관입니다. 흰머리는 점점 늘어나는 것 같고 언어를 배운다는 것이 이렇게 어려운지 새삼 느끼게 됩니다. 조금씩 올라가다보면 언젠가 정상에 서는 날이 있겠죠?

서두가 길면 지루해지니 본론으로 들어가서 이번 포스팅에서는 C언어의 변수와 자료형에 대해 알아보도록 하겠습니다.

 

■ 변수와 자료형

REFERENCE 탭

위 그림과 같이 아두이노 웹사이트 메뉴의 "DOCUMENTATION" 탭의 "REFERENCE" 항목을 클릭해봅니다. 아두이노와 관련된 기초적인 내용 대부분을 이곳에서 안내하고 있으며 REFERENCE 메뉴 하부에는 Language, Functions, Variables, Structure 등 아두이노 스케치 작성에 필요한 대부분의 소프트웨어 관련 정보가 나타나 있습니다.

왼쪽 네비게이션 메뉴에 "Variables"를 클릭하면 아두이노에서 정의하는 내용(Arduino data types and constants, 데이터 형태와 상수)과 세부 항목이 나타납니다. 변수 y=ax+b에서 a와 b를 말하는 것으로, 상수(Constants), 변환(Conversion), 데이터 형태(Data Types) 등의 카테고리로 나뉩니다.

일반적으로 변수는 다음과 같은 형태로 사용되며, 앞선 포스팅에서 곱셈 연산을 수행한 코드 4-1의 i, j, k가 바로 변수입니다.

변수의 데이터 형태    변수 이름;

변수란 변하는 값, 가령 정수인 x의 값이, 0<x<10이라 하면, x는 1에서 9까지 변하는 값 중 하나입니다. 상수는 변하지 않는 값, 즉 결정된 값입니다. y=1이라하면, y는 1로 고정된 값인 것처럼 변하지 않고 고정된 값을 뜻합니다.

데이터 형태(Data Type) 또한 아두이노 웹사이트에서 확인할 수 있으며, 이 중 빈번히 사용되는 몇 가지를 중심으로 살펴보겠습니다.

 

◆ boolean

참과 거짓을 표시할 때 사용합니다. 참은 true, 거짓은 false로 나타냅니다. 디지털에서는 참과 거짓처럼 오직 두 가지 값만 갖습니다. 참(true)이거나 거짓(false), 5V(HIGH)이거나 0V(LOW), LED가 켜지거나(ON), 꺼지거나(OFF), 스위치가 열려있거나(OPEN), 닫혀있거나(SHORT).

이처럼 두 가지 상태만을 가지는 논리를 말하며 LED를 켜거나 끄는 것이 가장 좋은 예시입니다.

digitalWrite(LED, HIGH);   //LED를 켠다(HIGH).
digitalWrite(LED, LOW);    //LED를 끈다(LOW).

 

◆ char

키보드로 입력이 가능한 문자(영문자, 숫자, 특수문자 등) 하나를 나타낼 때 사용하며, 아스키 코드(ASCII)를 이용해 문자 하나를 표현합니다. char형 변수는 다음과 같이 작은 따옴표를 붙여 사용합니다.

char ABC='K'  //ABC란 이름을 갖는 char형 변수를 생성하고, 그 변수에 문자 K를 넣는다.

 

◆ float

실수를 나타낼 때 사용하며, 소수점 단위를 다룰 때 필요합니다. float으로 계산할 경우, 소수점을 넣지 않으면 결과값에 이상이 생길 수 있습니다. 다음은 이전 포스팅의 add( ) 함수를 소수점 나누기 예제로 변형한 코드입니다.

void srtup()
{

 Serial. begin(9600);
}

void loop()
{
 float var;
 var=divide(4.5, 2.857);
 Serial.print("divide=");
 Serial.println(var);
}

float divide(float a, float b)
{
 float c;
 c=a/b;
 return c;
}

4.5를 2.857로 나누면 1.575078753···의 결과를 얻습니다. 앞선 예제를 실행해보면 다음과 같이 1.58이 출력됩니다. 4.5와 2.857을 각각 다른 숫자로 바꿔도 이와 같이 소수점 둘째 자리 반올림으로 출력되는데, 이는 소수점 계산 기본값이 둘재 자리 반올림으로 설정되어 있기 때문입니다.

Serial.println(var); 구문을 Serial.println(var, 3);으로 바꿔보고, 이어서 Serial.println(var, 5);로도 바꿔보시면 아래 그림과 같이 소수점 뒷자리가 var 뒤의 숫자만큼 늘어나는 것을 볼 수 있습니다.

기본값 출력 및 자릿수 변경값 출력

위 화면과 같이 프로그래밍 된 출력값을 창을 띄워서 보고 싶다면 "툴-시리얼모니터"를 선택하면 됩니다.

 

◆ int

정수를 저장하는 데 사용하며, Atmega 계열의 MCU를 사용하는 우노, 나노, 프로 미니 등은 -32,768~32767의 저장범위를 갖습니다.

int ABCD=0;  //ABCD라는 정수형 변수를 생성한다.

 

◆ long

정수를 저장할 때 사용하며, int와 다른 점은 저장범위에 있습니다. 우노, 나노, 프로 미니 등은 -2,147,483,648~2,147,483,648의 저장범위를 갖습니다.

 

◆ string

문자열을 저장하고 나타낼 때 사용합니다. 다음 아래 코드를 컴파일 해보고 그 결과를 살펴보겠습니다.

String ABstrings[]={"AB 1", "AB 2", "AB 3", "AB 4", "AB 5", "AB 6"};
void setup()
{
 Serial.begin(9600);
}

void loop()
{
 for (int i=0; i<6; i++)
{
 Serial.println(ABstrings[i]);
 delay(1000);
}
}

String 예제 실행 결과

◆ unsigned int

정수를 저장할 때 사용한다는 점은 int와 동일하지만, 음수를 나타내지 않고 양수만을 나타냅니다. 대신 숫자 범위가 두배로 늘어나 0~65,535까지 나타낼 수 있습니다.

 

◆ void

사전적으로 "텅 비어있다"라는 뜻으로, 주로 setup( )함수와 loop( )함수의 앞에 함께 표시되어 있습니다. void( ), loop( ) 외에도 함수 선언에 사용됩니다.

 

오늘도 예제를 실행해 보니 C언어 프로그래밍의 새로운 면을 보게 되었습니다. 예제와 같이 직접 프로그래밍을 해서 결과값을 도출해 실행되는 것도 신기하고 모든 것이 새로운 요즘입니다. 오늘 포스팅 된 예제를 여러가지로 바꿔서 더 연습을 해 봐야 할 것 같습니다. 주말이 지나고 월요일에 역대급 태풍이 온다고 합니다. 피해 없이 무사히 지나갔으면 하는 바람입니다. 오늘 하루도 행복한 하루 되세요.

728x90