본문 바로가기
-----ETC-----/C++ 임베디드 시스템 프로그래밍 시리즈

[C++ 임베디드 시스템 프로그래밍 시리즈] Day 4: 기본 입출력 프로그래밍

by cogito21_cpp 2024. 8. 1.
반응형

기본 입출력 프로그래밍 개요

임베디드 시스템에서 기본적인 입출력 프로그래밍은 매우 중요합니다. 입출력 핀을 통해 외부 장치와 상호작용하며, 다양한 센서와 액추에이터를 제어할 수 있습니다. 오늘은 GPIO(General Purpose Input/Output)를 사용하여 기본적인 입출력 프로그래밍을 학습하겠습니다.

1. GPIO란?

GPIO는 임베디드 시스템의 마이크로컨트롤러에서 중요한 역할을 하는 핀으로, 입력 또는 출력으로 설정하여 다양한 장치와 상호작용할 수 있습니다. GPIO는 버튼, LED, 센서 등의 장치와 연결되어 데이터를 송수신합니다.

2. GPIO 설정

GPIO 핀은 입력 또는 출력으로 설정할 수 있습니다. 입력 핀은 외부 신호를 읽고, 출력 핀은 신호를 외부로 보냅니다.

 

Arduino에서 GPIO 설정

Arduino는 C++ 기반의 임베디드 프로그래밍 환경을 제공합니다. 다음은 Arduino에서 GPIO 핀을 설정하고 제어하는 방법입니다.

 

예제: LED 제어

LED를 제어하는 기본적인 예제를 통해 GPIO 핀 설정과 제어 방법을 학습하겠습니다.

// 핀 번호 정의
const int ledPin = 13; // 내장 LED 핀

// 초기 설정 함수
void setup() {
    // LED 핀을 출력 모드로 설정
    pinMode(ledPin, OUTPUT);
}

// 메인 루프 함수
void loop() {
    // LED를 켬
    digitalWrite(ledPin, HIGH);
    // 1초 대기
    delay(1000);
    // LED를 끔
    digitalWrite(ledPin, LOW);
    // 1초 대기
    delay(1000);
}

 

위 코드에서는 pinMode 함수를 사용하여 13번 핀을 출력 모드로 설정하고, digitalWrite 함수를 사용하여 핀의 상태를 HIGH(켜짐)와 LOW(꺼짐)으로 제어합니다. delay 함수는 일정 시간 동안 대기하는 역할을 합니다.

 

예제: 버튼 입력

버튼을 입력으로 사용하여 LED를 제어하는 예제를 살펴보겠습니다.

// 핀 번호 정의
const int buttonPin = 2; // 버튼 핀
const int ledPin = 13;   // 내장 LED 핀

// 변수 정의
int buttonState = 0;     // 버튼 상태

// 초기 설정 함수
void setup() {
    // 버튼 핀을 입력 모드로 설정
    pinMode(buttonPin, INPUT);
    // LED 핀을 출력 모드로 설정
    pinMode(ledPin, OUTPUT);
}

// 메인 루프 함수
void loop() {
    // 버튼 핀의 상태를 읽음
    buttonState = digitalRead(buttonPin);

    // 버튼이 눌러졌는지 확인
    if (buttonState == HIGH) {
        // 버튼이 눌러졌다면 LED를 켬
        digitalWrite(ledPin, HIGH);
    } else {
        // 버튼이 눌러지지 않았다면 LED를 끔
        digitalWrite(ledPin, LOW);
    }
}

 

위 코드에서는 digitalRead 함수를 사용하여 버튼의 상태를 읽고, 버튼이 눌러졌을 때와 눌러지지 않았을 때 LED의 상태를 제어합니다.

 

3. GPIO 활용

GPIO를 사용하여 다양한 장치를 제어할 수 있습니다. 다음은 몇 가지 예제입니다.

 

LED 깜빡이기

LED를 주기적으로 깜빡이는 예제입니다.

const int ledPin = 13; // 내장 LED 핀

void setup() {
    pinMode(ledPin, OUTPUT);
}

void loop() {
    digitalWrite(ledPin, HIGH); // LED 켬
    delay(500);                 // 0.5초 대기
    digitalWrite(ledPin, LOW);  // LED 끔
    delay(500);                 // 0.5초 대기
}

 

모스 부호로 신호 보내기

LED를 사용하여 모스 부호로 신호를 보내는 예제입니다.

const int ledPin = 13; // 내장 LED 핀

void setup() {
    pinMode(ledPin, OUTPUT);
}

void loop() {
    sendMorseCode("SOS");
}

void sendMorseCode(String message) {
    for (int i = 0; i < message.length(); i++) {
        char c = message.charAt(i);
        switch (c) {
            case 'S':
                dot(); dot(); dot();
                break;
            case 'O':
                dash(); dash(); dash();
                break;
        }
        delay(300); // 문자 간 간격
    }
}

void dot() {
    digitalWrite(ledPin, HIGH);
    delay(200); // 짧은 신호
    digitalWrite(ledPin, LOW);
    delay(200);
}

void dash() {
    digitalWrite(ledPin, HIGH);
    delay(600); // 긴 신호
    digitalWrite(ledPin, LOW);
    delay(200);
}

 

마무리

오늘은 GPIO를 사용하여 기본적인 입출력 프로그래밍을 학습했습니다. LED와 버튼을 사용하여 입력과 출력을 제어하는 방법을 익혔습니다. 다음 날에는 GPIO 제어 기초에 대해 더 깊이 알아보겠습니다.

질문이나 추가적인 피드백이 있으면 언제든지 댓글로 남겨 주세요.

Day 5 예고

다음 날은 "GPIO 제어 기초"에 대해 다룰 것입니다. GPIO 핀의 다양한 설정과 제어 방법을 학습하고, 실제 프로젝트에 적용하는 방법을 알아보겠습니다.

반응형