기본 입출력 프로그래밍 개요
임베디드 시스템에서 기본적인 입출력 프로그래밍은 매우 중요합니다. 입출력 핀을 통해 외부 장치와 상호작용하며, 다양한 센서와 액추에이터를 제어할 수 있습니다. 오늘은 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 핀의 다양한 설정과 제어 방법을 학습하고, 실제 프로젝트에 적용하는 방법을 알아보겠습니다.
'-----ETC----- > C++ 임베디드 시스템 프로그래밍 시리즈' 카테고리의 다른 글
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 6: 인터럽트와 폴링 (0) | 2024.08.01 |
---|---|
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 7: 타이머와 카운터 사용법 (0) | 2024.08.01 |
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 5: GPIO 제어 기초 (0) | 2024.08.01 |
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 3: 개발 환경 설정 (툴체인, IDE) (0) | 2024.08.01 |
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 2: 임베디드 시스템에서의 C++ 사용 사례 (0) | 2024.08.01 |