반응형
📲 버튼으로 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 등을 조합하여 **스마트 온습도 모니터링 시스템**으로 확장해볼 거예요. 이제는 정말 프로젝트다운 모습으로 가는 중입니다! 😎
반응형
'아두이노' 카테고리의 다른 글
DHT11 온습도 센서값을 블루투스로 스마트폰에 전송하기 — HC-06 연동 실습 (0) | 2025.04.18 |
---|---|
아두이노 블루투스 제어 — HC-06으로 스마트폰에서 LED 켜기 (0) | 2025.04.18 |
센서 데이터를 LCD 화면에 출력하기 (0) | 2025.04.18 |
아두이노 DHT11 온습도 센서값을 LCD에 출력하기 — 실시간 환경 정보 표시 (0) | 2025.04.18 |
아두이노로 캐릭터 LCD 출력하기 — HD44780 디스플레이 기본 제어 (0) | 2025.04.18 |