본문 바로가기
아두이노

아두이노 버튼(Pull-down, Pull-up) & LED 제어 예제

by 꼬맹님 2025. 4. 22.

풀다운(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Ω)을 직접 연결해야 합니다.
    아두이노는 내부 풀다운 저항을 제공하지 않기 때문이에요.