아두이노 우노 Q

아두이노 우노 Q 04강 — 디지털·아날로그 입출력: 버튼과 가변저항

🎯 학습 목표

  • digitalRead로 버튼 입력을 읽는다.
  • analogRead로 가변저항 값을 읽는다.
  • analogWrite(PWM)로 LED 밝기를 조절한다.

💻 버튼 입력 — digitalRead

버튼은 눌렀는지(1) 안 눌렀는지(0)를 읽는 디지털 입력입니다. 내부 풀업 저항을 쓰면 배선이 간단합니다.

const int BTN = 2;
const int LED = 13;

void setup() {
  pinMode(BTN, INPUT_PULLUP); // 내부 풀업 사용: 안 누르면 HIGH, 누르면 LOW
  pinMode(LED, OUTPUT);
}

void loop() {
  if (digitalRead(BTN) == LOW) {  // 눌림
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}
// 배선: 버튼 한쪽 → 2번 핀, 다른 쪽 → GND

💻 가변저항 읽기 — analogRead

가변저항(노브)을 돌리면 전압이 0V~기준전압 사이에서 연속적으로 변합니다. 이 아날로그 값을 숫자로 읽습니다.

const int POT = A0;   // 아날로그 입력 핀

void setup() {
  // analogRead는 pinMode 설정 없이 바로 사용 가능
}

void loop() {
  int value = analogRead(POT); // 보통 0 ~ 1023 범위의 숫자
  // value 로 무언가 제어...
}
// 배선: 가변저항 양끝 → 전원(+)/GND, 가운데 핀 → A0
// * 값 범위(해상도)는 보드/설정에 따라 다를 수 있으니 공식 문서 확인

💻 LED 밝기 조절 — analogWrite (PWM)

디지털 핀은 원래 0/1만 출력하지만, PWM(아주 빠르게 켰다 껐다 하는 비율 조절)으로 “밝기”처럼 중간값을 흉내 냅니다.

const int POT = A0;
const int LED = 9;        // PWM 지원 핀(보드의 ~ 표시 핀)

void setup() {
  pinMode(LED, OUTPUT);
}

void loop() {
  int v = analogRead(POT);          // 0~1023
  int bright = map(v, 0, 1023, 0, 255); // analogWrite 범위(0~255)로 변환
  analogWrite(LED, bright);         // 가변저항으로 밝기 조절!
}

⚠️ 주의사항

  • analogWrite(PWM)는 ~ 표시가 있는 PWM 지원 핀에서만 동작합니다.
  • 입력 핀을 띄워두면(아무 데도 연결 안 함) 값이 떠다닙니다(플로팅). 풀업/풀다운으로 기준을 주세요.

💡 팁

  • map()은 한 범위의 숫자를 다른 범위로 비례 변환해 주는 편리한 함수입니다.
  • 값이 이상하면 시리얼 출력(Serial.println(value))으로 실제 숫자를 찍어 확인하세요.