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

C언어 기초문법 (연산자 / 숫자와 문자 나타내기 / 주요 키워드 / 처리구문 및 공백 / Blink 예제의 변형)

메카럽 2020. 9. 4. 10:04

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

요즘 C언어 때문에 머리가 이만저만 아픈게 아닙니다. 아두이노를 시작한 이상 숙명이라 생각하고 기초라도 배워놔야 겠다는 생각으로 버티며 공부하고 있습니다. 보다보니 그래도 익숙해지는 단어가 있어 조금씩 친숙해 지려한다는 것에 만족합니다.

이번 포스팅에서는 위 제목의 내용인 연산자, 숫자와 문자 나타내기, 주요 키워드, 처리구문 및 공백, Blink 예제의 변형에 대해 알아보도록 하겠습니다.

 

■ 연산자

프로그래밍에는 많은 연산자가 있습니다. 기본적으로 제공되는 다양한 종류의 연산자를 알아보도록 하겠습니다. 내용은 많지만 어렵지 않으므로 여러 번 봐서 익숙해지는 것이 좋겠습니다.

연산자 연산자명 사용 방법 내용
= 대입 const int sensor = A0 const int Sensor에 A0를 넣는다.
+ 덧셈 c=a+b a값과 b값을 더한다.
- 뺄셈 c=a-b a값과 b값을 뺀다.
++ 증가 a++ a값에 1을 더한다.
-- 가감 b-- b값에 1을 뺀다.
== 동일 a==b a값과 b값은 같다.
!= 동일하지 않음 a!=b a값과 b값은 다르다.
< 미만 a<b a는 b보다 작다.
> 초과 a>b a는 b보다 크다.
<= 이하 a<=b a값은 b값과 같거나 작다.
>= 이상 a>=b a값은 b값과 같거나 크다.
&& 둘 다 만족 a&&b a와 b 모두 만족한다.
II 둘 중 하나만 만족 aIIb a와 b중 하나가 만족한다.

수학 연산자의 '='은 대입 연산자로써, 수학에서의 '같다'를 표현하는 아두이노 연산자'=='와 구분된다는 점을 유의할 필요가 있습니다. 아두이노에서의 연산자'='는 변수 선언에서 가장 많이 볼 수 있습니다. 가령 const int Sensor = A0;의 경우 A0핀에 정수형 변후 Sensor를 대입한다는 말과 같습니다.

이 외에 덧셈, 뺄셈 연산자 등은 일반적인 산술연산과 사용법이 같습니다. 관계 연산자에서 '미만', '초과'를 나타내는 <,> 또한 일반적인 산술연산과 동일한 반면, 이하와 이상을 나타내는 <=,>=는 '='표시가 더 붙게 된다는 점이 다릅니다.

관계 연산자 오류

관계 연산자 중 이상과 이하 연산자를 사용 시에는 '='의 위치에 유의하도록 해야합니다. '='의 위치가 바뀌면 에러 메시지가 발생하기 때문입니다.

논리 연산자로 분류되는 AND(&&), OR(II)는 각각 '두 조건 모두다 만족' 하거나, '두 조건 중 하나만 만족' 해도 해당 조건이 참으로 성립됩니다. 이 또한 조건문에서 많이 사용되는 연산자입니다.

 

■ 숫자 나타내기

105, 1542, 9953, 47 등 우리는 통상적으로 10진수 기반의 표현과 셈을 하고 있습니다. IDE에서는 10진수 외에도 2진수, 8진수, 16진수 등 여러 가지로 나타낼 수 있으며, 부호 유무에 따라서도 구분됩니다.

8진수는 값 앞에 숫자'0'을 붙이고, 16진수는 '0X' 또는 '0x'를 붙입니다. IDE에서 스케치를 작성할 때 해당하는 사항이지만, 다른 사람들이 작성한 스케치를 볼 때도 이런 점을 유념하면 가독성이 좋아질 것입니다.

형식 예시 내용
2진수 B01010101, B11001101 앞에 'B'를 붙임
8진수 067, 0315 앞에 '0'을 붙임
10진수 55, 205 -
16진수 0X37, 0xCD 앞에 '0X' 또는 '0x'를 붙임
실수 1.58, -.52, 5.75E3 -
부호가 없는 정수 574U, 975u 뒤에'U' 또는 'u'를 붙임

 

■ 문자와 문자열 나타내기

문자는 1바이트 문자를 의미하고, 문자열은 문자가 여러 개로 구성된 열을 의미합니다. 문자는 작은 따옴표를 사용하여 감싸고('j'), 문자열은 큰 따옴표를 사용하여 감쌉니다("arduino hardware").

 

■ 주요 키워드

키워드는 IDE 내에서 미리 선언된 문자열입니다. 다음 표에 자주 사용되는 키워드를 정리하였습니다. 센서, 함수 등 개별 장에서 설명되는 부분이지만 한 번쯤 훑고 지나가는 것이 좋습니다.

HIGH (5V설정) double (4바이트 실수형 선언) switch (분기 제어문)
LOW (0V 설정) unsigned (부호 없음) case (switch문의 조건)
INPUT (입력 설정) signed (부호 있음) char (문자 선언)
OUTPUT (출력 설정) if - else (분기 제어문) const (상수 선언)
void (반환값 없음을 선언) while (반복 제어문) BIN (2진수 선언)
int (2바이트 정수형 선언) do (do-while 처리) DEC (10진수 선언)
long (4바이트 정수형 선언) for (반복 제어문) OCT (8진수 선언)
float (4바이트 실수형 선언) break (처리 부분에서 나감) HEX (16진수 선언)

 

■ 처리 구문

처리 구문은 함수 내에서 처리 가능한 하나의 단위를 의미합니다. if문처럼 처리 구문이 여러 가지가 필요한 경우에는 중괄호'{ }'로 묶어 사용합니다. 또는, 처리 구문 여러 개를 한꺼번에 사용할 때는 세미콜론';'으로 구분하여 처리하며 아래처럼 for문에서 쉽게 접할 수 있습니다.

for (int i = 0; i<=255;i++)

 

■ 공백

스케치 작성 후 디버깅을 하며 도저히 틀린 부분을 모를 때 공백이 있는지 점검해보는 것이 좋습니다. 공백은 스페이스 바를 통해 만들어지는데, 공백이 들어있는 곳에 따라 오류가 발생할 수 있습니다. 연산자 사이에 공백을 넣거나, 문자열 앞에 공백을 처리하는 경우입니다. 가령 if(x<=y)가 올바른 형태인데, if(x < = y)처럼 공백을 넣어 처리하는 경우입니다.

 

■ Blink 예제의 변형

아래는 Blink 예제를 조금 변형한 코드입니다. 원래 Blink는 우노에 내장된 D13 LED를 1초간 켰다가 끄길 반복하는 예제이므로 우노와 USB 케이블 외에는 준비물이 없습니다. 다음 코드로 우노의 내장 LED를 3초간 켰다가 1초간 끄고, 다시 1초간 켰다가 2초간 끄는 것을 반복하도록 구성하였습니다. loop( ) 문 내의 지연시간을 수정하거나, HIGH와 LOW 상태를 각각 바꾸어 그 결과가 어떤지도 살펴봅니다. 참고로 지연시간은 ms 단위이므로 'delay(1000)'은 1초를 뜻하고 HIGH는 5V, LOW는 0V를 뜻하므로 LED에 전원을 인가하지 않는다는 것을 의미합니다.

void setup( )
{

 pinmode(LED_BUILTIN, OUTPUT);      // LED핀을 출력으로 설정
}

void loop( )
{
 digitalWrite(LED_BUILTIN, HIGH);      // LED상태를 HIGH로(LED ON)
 delay(3000);                                  // 3초간 아무것도 하지 않음(=LED ON 상태 유지)
 digitalWrite(LED_BUILTIN, LOW);      // LED상태를 LOW로(LED OFF)
 delay(1000);                                 // 1초간 아무것도 하지 않음(=LED OFF 상태 유지)
 digitalWrite(LED_BUILTIN, HIGH);
 delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(2000);
}

 

728x90