아두이노
아두이노 버튼(Pull-down, Pull-up) & LED 제어 예제
꼬맹님
2025. 4. 22. 09:57
풀다운(Pull-down) 회로 – 버튼 누르면 LED 켜짐
회로 연결
- 버튼 한쪽 → 디지털 2번 핀
- 버튼 다른쪽 → GND
- 디지털 2번 핀 ↔ 10kΩ 저항 ↔ GND (풀다운 저항)
- LED +극(긴 다리) → 디지털 4번 핀
- LED -극(짧은 다리) → 330Ω 저항 → GND
작동 원리
- 버튼을 누르지 않으면 → GND 상태 → LOW
- 버튼을 누르면 → 5V 입력 → HIGH → LED 켜짐
코드
const int buttonPin = 2;
const int ledPin = 4;
int buttonState = 0;
void setup() {
pinMode(buttonPin, INPUT); // 풀다운 회로에서는 INPUT
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH); // 버튼 누르면 LED 켬
} else {
digitalWrite(ledPin, LOW); // 버튼 안 누르면 LED 끔
}
delay(100);
}
풀업(Pull-up) 회로 – 버튼 누르면 LED 켜짐
회로 연결
- 버튼 한쪽 → 디지털 2번 핀
- 버튼 다른쪽 → GND
- 풀업 저항은 내부에서 자동 연결됨 (외부 저항 불필요)
- LED +극 → 디지털 4번 핀
- LED -극 → 330Ω 저항 → GND
작동 원리
- 버튼을 누르지 않으면 → 내부 풀업 → HIGH
- 버튼을 누르면 → GND에 연결 → LOW → LED 켜짐
코드
const int buttonPin = 2;
const int ledPin = 4;
int buttonState = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // 내부 풀업 사용
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
if (buttonState == LOW) {
digitalWrite(ledPin, HIGH); // 버튼 누르면 LED 켬
} else {
digitalWrite(ledPin, LOW); // 버튼 안 누르면 LED 끔
}
delay(100);
}
참고
- 풀다운 회로에서는 버튼을 누르면 HIGH → 조건문에서 buttonState == HIGH
- 풀업 회로에서는 버튼을 누르면 LOW → 조건문에서 buttonState == LOW
- 풀업 회로에서 외부 저항이 필요 없는 이유이 덕분에 별도로 외부 저항(10kΩ 같은 것)을 연결하지 않아도,
버튼이 눌리지 않았을 때 입력 핀은 안정적으로 HIGH 상태를 유지할 수 있습니다. - 아두이노에서 pinMode(pin, INPUT_PULLUP)을 설정하면
해당 입력 핀에 **내부 풀업 저항(약 20~50kΩ)**이 자동으로 연결됩니다. - 풀다운 회로를 사용하려면 외부에 저항(보통 10kΩ)을 직접 연결해야 합니다.
아두이노는 내부 풀다운 저항을 제공하지 않기 때문이에요.