아두이노

아두이노 기초 - 입출력 포트 설정 및 입출력 포트 제어

게임교수 2022. 10. 19. 09:24
반응형

아두이노 기초 – 입출력 포트 설정 및 제어 완벽 가이드

처음 아두이노를 접하면 가장 먼저 궁금해지는 게 하나 있습니다.

“LED는 어떻게 켜지?”, “버튼은 어디다 연결해야 돼?”, “pinMode는 뭐지?”

사실 이게 아두이노의 핵심입니다. 전자장치는 결국 입력과 출력을 다루는 것이기 때문에, 이 기초만 제대로 잡고 가도 나중에 센서, 통신, 디스플레이 다루기가 훨씬 쉬워집니다.

이번 글에서는 아두이노의 입출력 포트 개념부터 설정 방법, 실습 예제까지 차근차근 일상적인 말투로 설명드릴게요. 혼자 따라 하셔도 무조건 됩니다. 걱정 마세요.


🧰 1. 디지털과 아날로그 포트 이해하기

아두이노에는 두 가지 주요 포트가 있어요:

  • 디지털 포트 (0~13번): ON 또는 OFF, 즉 HIGH 또는 LOW의 2단 상태만 처리합니다.
  • 아날로그 입력 포트 (A0~A5): 01023까지의 값(05V)을 읽어들입니다. 아날로그 출력처럼 보이는 analogWrite()는 사실 PWM 출력이에요.

예를 들어 LED는 디지털 출력으로, 가변저항은 아날로그 입력으로 연결하는 식입니다.


⚙️ 2. pinMode(), digitalWrite(), digitalRead()의 역할

아두이노는 기본적으로 모든 포트를 입출력용으로 쓸 수 있는데, 먼저 목적을 알려줘야 합니다. 그게 pinMode()입니다.

pinMode(7, OUTPUT);  // 7번 핀을 출력용으로 설정
pinMode(2, INPUT);   // 2번 핀을 입력용으로 설정

출력할 때는 digitalWrite()를 씁니다:

digitalWrite(7, HIGH); // 7번 핀에 전압 인가 → LED 켜짐
digitalWrite(7, LOW);  // 전압 차단 → LED 꺼짐

입력값을 읽을 땐 digitalRead():

int btn = digitalRead(2); // 2번 핀 상태 읽기 (HIGH or LOW)

 


🔌 3. 예제 1 – LED 깜빡이기 (Blink)

void setup() {
  pinMode(13, OUTPUT); // 내장 LED 핀
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}

1초 간격으로 LED가 켜지고 꺼지는 가장 기본적인 예제예요.


🖲 4. 예제 2 – 버튼으로 LED 제어하기

const int buttonPin = 2;
const int ledPin = 13;

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int btn = digitalRead(buttonPin);
  if (btn == HIGH) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

버튼을 누르면 LED가 켜지고, 떼면 꺼져요. 이건 외부 입력에 반응하는 간단한 제어 흐름입니다.


🎚 5. 아날로그 입력 – 가변저항값 읽기

int val = analogRead(A0);

analogRead()는 0~1023 사이의 값을 읽습니다. 5V 기준일 때 0은 0V, 1023은 5V입니다. 이걸 이용해서 밝기나 속도 등을 제어할 수 있죠.


💡 6. 아날로그 출력(PWM) – 밝기 조절하기

analogWrite(9, 128); // 0~255 사이 값으로 LED 밝기 조절

PWM은 디지털 핀에서 아날로그처럼 보이는 출력을 만드는 기술이에요. 진짜 아날로그 전압은 아니지만, 사람 눈에는 그렇게 보입니다.

 


🧠 7. 실전 조합 – 밝기 조절 가능한 터치등 만들기

const int pot = A0;
const int led = 9;

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

void loop() {
  int val = analogRead(pot);
  int brightness = map(val, 0, 1023, 0, 255);
  analogWrite(led, brightness);
  delay(10);
}

이렇게만 짜면, 가변저항을 돌릴 때마다 LED 밝기가 부드럽게 변합니다.


📌 8. 정리하며

입출력 포트 제어는 모든 아두이노 프로젝트의 기초입니다. 전자회로의 시작은 결국, ‘무언가를 받아들이고, 무언가를 내보내는 것’입니다. 이 기본을 익히고 나면 그다음은 생각보다 훨씬 쉽고 재밌어져요.

다음 글에서는 아두이노의 인터럽트, 디바운싱, 입출력 타이밍 제어 등을 더 깊이 있게 다뤄보겠습니다. 궁금한 점은 언제든 댓글 남겨주세요!

📌 출처: ythouse.tistory.com

반응형