아두이노

버튼으로 LCD 메뉴 전환하기 — 아두이노 사용자 인터페이스 구성

게임교수 2025. 4. 18. 07:27
반응형

📲 버튼으로 LCD 메뉴 전환하기 — 아두이노 사용자 인터페이스 구성

이제까지 우리는 아두이노로 센서를 읽고, LCD에 데이터를 출력하는 실습을 해봤습니다.
이번 편에서는 버튼을 눌러 LCD 화면의 내용을 순차적으로 전환하는 간단한 UI(User Interface) 시스템을 구현해보겠습니다.

이 구조는 **메뉴 기반 디스플레이** 또는 **다중 센서 출력**에서 필수적인 패턴입니다.

🧰 준비물

  • 아두이노 UNO
  • HD44780 16x2 LCD
  • 푸시버튼 1개
  • 10kΩ 저항 (풀다운)
  • 브레드보드 및 점퍼선

🔌 회로 구성

  • D2 → 버튼 한쪽
  • 버튼 다른 쪽 → 5V
  • D2와 GND 사이에 10kΩ 저항 (풀다운)
  • LCD는 기존 7편 방식과 동일하게 연결

💻 코드 작성: 메뉴 전환 구현

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const int buttonPin = 8;
int lastButton = LOW;
int menuIndex = 0;
unsigned long lastDebounce = 0;

void setup() {
  pinMode(buttonPin, INPUT);
  lcd.begin(16, 2);
  lcd.print("Ready...");
}

void loop() {
  int reading = digitalRead(buttonPin);

  if (reading == HIGH && lastButton == LOW && millis() - lastDebounce > 300) {
    menuIndex = (menuIndex + 1) % 3;
    lastDebounce = millis();
    showMenu(menuIndex);
  }

  lastButton = reading;
}

void showMenu(int index) {
  lcd.clear();
  switch(index) {
    case 0:
      lcd.setCursor(0, 0);
      lcd.print("🌡 Temp View");
      lcd.setCursor(0, 1);
      lcd.print("25.3 C");
      break;
    case 1:
      lcd.setCursor(0, 0);
      lcd.print("💧 Humi View");
      lcd.setCursor(0, 1);
      lcd.print("52 %");
      break;
    case 2:
      lcd.setCursor(0, 0);
      lcd.print("🔧 System Info");
      lcd.setCursor(0, 1);
      lcd.print("Arduino v1.0");
      break;
  }
}

버튼을 누를 때마다 menuIndex가 증가하고, showMenu() 함수에 따라 해당 메뉴가 출력됩니다.

✅ 실습 체크 포인트

  • 버튼 누를 때마다 LCD 메뉴가 순차 전환되는가?
  • 디바운싱 효과 적용되었는가? (밀리초 기반)
  • 화면은 깔끔하게 지워지고 다시 출력되는가?

📚 마무리

이번 실습에서는 버튼 입력을 통해 LCD 화면을 전환하는 사용자 인터페이스 구조를 구현해보았습니다.

다음 편에서는 실제 센서 데이터, 설정 값, 메뉴 UI 등을 조합하여 **스마트 온습도 모니터링 시스템**으로 확장해볼 거예요. 이제는 정말 프로젝트다운 모습으로 가는 중입니다! 😎

반응형