본문 바로가기
아두이노

아두이노 LED & 스위치 제어: 풀업과 풀다운 방식의 비교

by 모빌리티키즈 2025. 5. 1.
728x90
반응형

1. 프로젝트 개요

아두이노를 활용하여 4개의 스위치와 4개의 LED를 제어하는 회로를 제작하고 있습니다.

이번 실습에서는 SW1을 눌렀을 때 LED1, LED2와 LED3, LED4가 번갈아 가며 꺼지는 동작을 구현하는 것이 목표입니다.

특히 풀업 저항 방식과 풀다운 저항 방식에 따라 코드가 어떻게 달라지는지 비교해봅니다!

 

2. 풀업 저항 방식 코드

첫 번째 코드에서는 스위치를 풀업 방식으로 연결하고, 눌렀을 때 LOW 값을 출력하는 구조를 활용합니다.

 
const int SW1 = 2;  
const int LED1 = 8;  
const int LED2 = 9;  
const int LED3 = 10;  
const int LED4 = 11;  

bool toggleState = false;  

void setup() {  
  pinMode(SW1, INPUT_PULLUP);  
  pinMode(LED1, OUTPUT);  
  pinMode(LED2, OUTPUT);  
  pinMode(LED3, OUTPUT);  
  pinMode(LED4, OUTPUT);  
}

void loop() {  
  if (digitalRead(SW1) == LOW) {  
    delay(200);  // 디바운싱 방지  
    toggleState = !toggleState;  

    if (toggleState) {  
      digitalWrite(LED1, LOW);  
      digitalWrite(LED2, LOW);  
      digitalWrite(LED3, HIGH);  
      digitalWrite(LED4, HIGH);  
    } else {  
      digitalWrite(LED1, HIGH);  
      digitalWrite(LED2, HIGH);  
      digitalWrite(LED3, LOW);  
      digitalWrite(LED4, LOW);  
    }

    while (digitalRead(SW1) == LOW);  // 버튼이 눌린 동안 대기  
  }  
}

✅ 코드 설명

  • INPUT_PULLUP 모드를 사용하여 내부 풀업 저항을 활성화했습니다.
  • 버튼이 눌리면 LOW 값을 읽으며, toggleState를 활용하여 LED 상태를 변경합니다.
  • while (digitalRead(SW1) == LOW);을 적용하여 버튼이 떼어질 때까지 기다리는 방식으로 중복 동작을 방지했습니다.

3. 풀다운 저항 방식 코드

두 번째 코드에서는 스위치를 풀다운 방식으로 연결하여, 버튼을 눌렀을 때 HIGH 값을 출력하는 구조를 적용합니다.

 
const int pinSW[4] = {2, 3, 4, 5};  
const int pinLED[4] = {8, 9, 10, 11};  

bool toggleState = false;  

void setup() {  
  for (int i = 0; i < 4; i++) {  
    pinMode(pinSW[i], INPUT);  // 풀다운이므로 내부 풀업 제거  
    pinMode(pinLED[i], OUTPUT);  
  }  
}

void loop() {  
  if (digitalRead(pinSW[0]) == HIGH) {  // SW1이 눌렸을 때 HIGH  
    delay(200);  // 디바운싱 방지  
    toggleState = !toggleState;  

    if (toggleState) {  
      digitalWrite(pinLED[0], LOW);  
      digitalWrite(pinLED[1], LOW);  
      digitalWrite(pinLED[2], HIGH);  
      digitalWrite(pinLED[3], HIGH);  
    } else {  
      digitalWrite(pinLED[0], HIGH);  
      digitalWrite(pinLED[1], HIGH);  
      digitalWrite(pinLED[2], LOW);  
      digitalWrite(pinLED[3], LOW);  
    }  

    while (digitalRead(pinSW[0]) == HIGH);  // 버튼이 떼어질 때까지 기다림  
  }  
}

✅ 코드 설명

  • 내부 풀업 저항을 제거하고 INPUT 모드를 적용하여 풀다운 회로와 맞췄습니다.
  • 버튼이 눌리면 HIGH 값을 읽으며, toggleState를 활용해 LED 상태를 변경합니다.
  • 풀업 방식과 다르게 digitalRead(pinSW[0]) == HIGH 조건을 적용하여 버튼이 눌렸을 때 작동하도록 했습니다.

4. 결론 및 정리

아두이노에서 버튼을 연결할 때 풀업과 풀다운 방식에 따라 입력 방식이 다르게 처리되어야 합니다.

방식스위치 연결 방식digitalRead() 값
풀업 저항 내부 풀업 저항 사용 (INPUT_PULLUP) 눌림: LOW / 안 눌림: HIGH
풀다운 저항 외부 풀다운 저항 사용 (INPUT) 눌림: HIGH / 안 눌림: LOW

🔹 풀업 저항 방식에서는 눌렀을 때 LOW 값을 인식하므로 digitalRead(SW1) == LOW로 확인해야 합니다.

🔹 풀다운 저항 방식에서는 눌렀을 때 HIGH 값을 인식하므로 digitalRead(SW1) == HIGH로 확인해야 합니다.

이제 스위치와 LED를 올바르게 제어하는 데 도움이 되었기를 바랍니다!

🎯 혹시 추가적으로 궁금한 점이나 수정할 부분이 있다면 댓글로 남겨주세요. 😊

728x90
반응형