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
반응형
'아두이노' 카테고리의 다른 글
아두이노 시리얼 통신을 활용한 LED 제어 프로젝트 (0) | 2025.05.08 |
---|---|
🚀 Arduino로 미니 레트로 게임 콘솔 DIY! (0) | 2025.05.07 |
LCD 알람 시계 만들기: 아두이노 프로젝트 (0) | 2025.04.30 |
DIY Arduino LED 스트립 조광기: 개념부터 완성까지 (0) | 2025.04.22 |
더 활동적인 생활을 위한 혁신적인 DIY 프로젝트: UpYouGo! (0) | 2025.04.18 |