pinMode 함수 정말 이해하기
아두이노 코드를 작성하다 보면 꼭 등장하는 함수가 있어요. 바로 pinMode()입니다. 지난 시간에 배운 digitalWrite()
와 digitalRead()
를 사용하기 전에 핀의 역할을 먼저 정해주는 함수예요.
이번 글에서는 pinMode 함수가 정확히 무슨 일을 하는지, 왜 꼭 필요한지, 그리고 INPUT_PULLUP 모드까지 쉽게 설명해드릴게요!
pinMode 함수란?
pinMode()
는 아두이노 보드의 디지털 핀의 모드(역할)를 설정하는 함수예요.
pinMode(핀번호, 모드);
이렇게 쓰면 해당 핀을 입력으로 쓸지, 출력으로 쓸지, 또는 입력 + 풀업 저항으로 쓸지 설정할 수 있어요.
모드 종류
OUTPUT
: 출력용 (LED, 부저 등)INPUT
: 입력용 (버튼, 센서 등)INPUT_PULLUP
: 입력 + 내부 풀업 저항 사용
OUTPUT 모드 예제
int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT); // 13번 핀을 출력으로 설정
}
void loop() {
digitalWrite(ledPin, HIGH); // LED 켜기
delay(500);
digitalWrite(ledPin, LOW); // LED 끄기
delay(500);
}
OUTPUT 모드로 설정하면 그 핀에서 전기를 보내거나 끊을 수 있어요. 주로 LED, 부저, 릴레이 등에 사용돼요.
INPUT 모드 예제
int buttonPin = 2;
void setup() {
pinMode(buttonPin, INPUT); // 2번 핀을 입력으로 설정
}
void loop() {
int value = digitalRead(buttonPin); // 버튼 상태 읽기
Serial.println(value);
}
INPUT 모드에서는 핀에 연결된 버튼이나 센서의 상태를 읽을 수 있어요. 단, 이 모드에서는 외부에 풀다운 저항을 연결해 줘야 값이 정확하게 읽혀요.
INPUT_PULLUP 모드란?
아두이노는 내부에 풀업 저항을 내장하고 있어요. INPUT_PULLUP
모드를 사용하면 외부에 저항을 따로 달지 않아도 돼요!
int buttonPin = 2;
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // 내부 풀업 저항 사용
}
void loop() {
int state = digitalRead(buttonPin);
if (state == LOW) {
Serial.println("버튼 눌림");
} else {
Serial.println("버튼 안 눌림");
}
}
중요: 이 모드에서는 버튼이 눌리면 LOW, 안 눌리면 HIGH가 되기 때문에 값이 반대로 나와요.
pinMode는 꼭 setup() 안에!
pinMode 설정은 보통 setup()
함수 안에 한 번만 해주면 돼요. loop 안에 매번 적을 필요는 없어요!
잘못된 예시
void loop() {
pinMode(13, OUTPUT); // 이렇게 loop에 쓰면 매번 다시 설정돼요!
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
이렇게 사용해도 작동은 하지만 불필요하게 반복해서 설정하는 거라 비효율적이에요.
실습 아이디어
- 버튼을 INPUT_PULLUP 모드로 설정하고 LED 제어하기
- OUTPUT 핀 3개를 설정해 신호등 만들기
- INPUT 핀 여러 개 설정해서 키패드 만들기
마무리하며
이제 pinMode 함수가 하는 일을 확실히 알게 되었죠? 아두이노 핀은 입출력을 자유롭게 바꿔서 쓸 수 있지만, 반드시 pinMode로 역할을 먼저 정해줘야 제대로 작동해요.
다음 시간에는 전기의 흐름과 아두이노 보드의 전원 구조에 대해 간단히 알아볼 거예요. 프로젝트를 더 잘 이해하는 데 큰 도움이 될 거예요!