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 ~ 1271
unsigned char0 ~ 2561
signed short-32768 ~ 327672
unsigned short0 ~ 655352
int-2147483648 ~ 21474836474
signed long0 ~ 42949672954
float1.175494e-38 ~ 3.402823e+384
double2.225074e-308 ~ 1.797693e+3088

산술연사자의 사용예

산술연산자의미
+i = i + 3i값에 3을 더하여 i에 대입한다
-i = i - 4i값에 4을 빼고 i에 대입한다
*i = i * 5i값에 5을 곱하여 i에 대입한다
/i = i / 6i값에 6으로 나누고 i에 대입한다
%i = i % 7i값에 7로을 나누고 나머지값을 i에 대입한다

비교연산자의 사용예

논리식의미와 결과
A == BA와 B가 같으면 참, 다르면 거짓
A != BA와 B가 다르면 참, 같으면 거짓
A > BA가 B보다 크면 참, 작으면 거짓
A >= BA가 B보다 크거나 같으면 참, 작으면 거짓
A < BA가 B보다 작으면 참, 크면 거짓
A <= BA가 B보다 작거나 같으면 참, 크면 거짓


Please log in to post comments.