Ch1_7. 프로그래밍에제
예제로부터 배우는 C언어
mbed를 컨트롤하가위한 C/C++ 언어에 대해 기술해 보겠습니다.
보다 자세한 프로그래밍을 위한 도서는 많이 있으니 여기서는 기본적인 C/C++에 대한 설명을 하겠습니다.
앞절에서 인스톨해본 프로그램부터 설명하겠습니다.
1. LED1을 0.2초 간격으로 깜박이는 프로그램
prg.1
#include "mbed.h" DigitalOut myled(LED1); int main() { while (1) { myled = 1; wait(0.2); myled = 0; wait(0.2); } }
#iclude "mbed.h"
mbed의 기능을 간단히 사용하도록하는 라이브러리를 인쿠르드하는 문장입니다
DigitalOut myled(LED1);
이문장은 디지털 출력을 위한 사전 정의문입니다
임의적으로 'myled'라고 명명되었고 ()안에 디지털출력이 이루어지는 장소를 기술합니다.
LED2,LED4등을 추가적으로 지정할수 있으며, mbed의 핀을 지정할수도 있습니다. (예:p10)
int main() { . . . }
C/C++언어에서 유저 프로그램이 시작하는 장소를 나타냅니다.
{ (프로그램시작) } (프로그램 끝)으로표시합니다.
while(1){ . . . }
C/C++제어문의 하나로 ()안이 참(1)이면 {부터 }까지 무한적으로 반복하게됩니다.
myled = 1, myled = 0;
C/C++언어에서, = 은 좌변에 우변을 대입하라는 의미입니다.
디지털출력에 지정된 이름으로 1은 ON(3.3V 출력),0은 OFF(0V 출력)가 됩니다.
mbed 보드의 LED1이 1이면 점등, 0이면 소등하게 됩니다
wait(0.2)
C/C++언어에서는 함수(메소드)라고하는 단위로 처리하는 것이 가능합니다.
wait()함수는 mbd에 초기부터 저의되어 ()의 시간(초)만큼 기다렸다가 그다음동작을 하게됩니다.
만약에 1초를 기다리는 경우는 wait(1.0)으로 쓰면 됩니다.
2. LED1 과 LED2가 1초 간격으로 교환 점멸하는 프로그램 (if-else문 예제)
prg.2
#include "mbed.h" DigitalOut led1(LED1); DigitalOut led2(LED2); int main() { int i = 0; while(1) { if( i % 2 == 0) { led1 = 1; led2 = 0; } else { led1 = 0; led2 = 1; } i++; wait(1.0); } }
if else문
이 제어문은 조건에따라 분류 할수있는 문입니다
int = 0;
이것이 변수선언입니다.
i는 변수이며 초기값을 ㅇ으로 대입하여라하는 의미입니다.
int형은 변수가 정수라는 의미이며 변수에는 정수,실수등 여러가지 형태로 대입할수 있습니다.
문법1
if ( i % 2 == 0 ) { (A) } else { (B) }
이문법은 {}안이 참이면 (A)를 거짓이면 (B)를 수행합니다.
따라서 i값을 2로나누어 나머지가 0이면 (A)를 1이면 (B)를 수행하게 됩니다.
3. LED1 과 LED2가 0.5초 간격으로 2회씩 교환 점멸하는 프로그램 (for문 예제)
prg.3
#include "mbed.h" DigitalOut led1(LED1); DigitalOut led2(LED2); int main() { int i = 0; while(1) { for( i = 0 ; i < 4 ; i++ ) { led1 = !led1; wait(0.5); } for( i = 0 ; i < 4 ; i++ ) { led2 = !led2; wait(0.5); } } }
for문
이 제어문은 조건에따라 참이면 계속 수행하는 문입니다
문법3
if ( i = 0 ; i < 4 ; i++ ) { (A) }
이문장에서 ()안의 i = 0 는 0으로 초기화이고 i < 4 는 조건식으로 i 가 4미만인 경우에는 (A)를 계속 수행하라는 의미입니다.
i++는 반복 수행시마다 i 값에 1만큼 더하여 대입하라는 의미입니다.
따라서 i값이 0 부터 3까지 (A)를 4회 수행하라는 의미입니다.
4. LED1 ~ LED4가 0.5초간으로 순차적으로 켜지고 커지는 프로그램 (switch-case문 예제)
prg.4
#include "mbed.h" DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); int main() { int i = 1; while(1) { switch(i){ case 1: led1 = !led1; break; case 2: led2 = !led2; break; case 3: led3 = !led3; break; case 4: led4 = !led4; i = 0; break; default: break; } i++; wait(0.5); } }
switch case문
이 제어문은 식의 숫자에따라 실행처리를 분류하는 문입니다
문법4
switch(i){ case 1: (A) break; case 2: (B) break; case 3: (C) break; case 4: (D) break; default: (E) break;
이문장에서 ()안의 식이 case의 값과 일치하면 해당하는 case를 실핼하게 됩니다.
break는 }으로 점프하라는 명령어입니다.
보통 default는 해당하는 case가 없을때 (E)가 수행되게 됩니다.
따라서 위의 예에서는 i값이 1이면 case 1을 처리하고 만약 i가 10이면 (E)를 처리하게 된다.
5.참고표
변수의 형태 표
변수형태 | 수치범위 | 사이즈(바이트) |
---|---|---|
signed char | -128 ~ 127 | 1 |
unsigned char | 0 ~ 256 | 1 |
signed short | -32768 ~ 32767 | 2 |
unsigned short | 0 ~ 65535 | 2 |
int | -2147483648 ~ 2147483647 | 4 |
signed long | 0 ~ 4294967295 | 4 |
float | 1.175494e-38 ~ 3.402823e+38 | 4 |
double | 2.225074e-308 ~ 1.797693e+308 | 8 |
산술연사자의 사용예
산술연산자 | 식 | 의미 |
---|---|---|
+ | i = i + 3 | i값에 3을 더하여 i에 대입한다 |
- | i = i - 4 | i값에 4을 빼고 i에 대입한다 |
* | i = i * 5 | i값에 5을 곱하여 i에 대입한다 |
/ | i = i / 6 | i값에 6으로 나누고 i에 대입한다 |
% | i = i % 7 | i값에 7로을 나누고 나머지값을 i에 대입한다 |
비교연산자의 사용예
논리식 | 의미와 결과 | |
---|---|---|
A == B | A와 B가 같으면 참, 다르면 거짓 | |
A != B | A와 B가 다르면 참, 같으면 거짓 | |
A > B | A가 B보다 크면 참, 작으면 거짓 | |
A >= B | A가 B보다 크거나 같으면 참, 작으면 거짓 | |
A < B | A가 B보다 작으면 참, 크면 거짓 | |
A <= B | A가 B보다 작거나 같으면 참, 크면 거짓 |
Please log in to post comments.