🗂️ درس 70: منوی چندصفحهای روی LCD با دکمه
سه دکمه، سه صفحه، یک تنظیم قابل تغییر — مثل منوی یک دستگاه واقعی.
سطح: پیشرفته · زمان: حدود 25 دقیقه · مفاهیم: LCD، منو، ماشین حالت
قدمهای این درس
- منو یک ماشین حالت است
- قدم ۱ — LCD، سه دکمه، LED و بازر
- قدم ۲ — draw و change
- اشتباه رایج: کشیدن صفحه در هر دور
- چالش: صفحهی چهارم
نمونهای از کد این درس
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int UP = 2, DOWN = 3, SEL = 4, LED = 9, BUZZER = 8;
const int PAGES = 3;
int page = 0; // which page we are on
bool editing = false; // false = browsing, true = changing a value
int brightness = 5; // 0..10
bool beepOn = true;
int lastUp = HIGH, lastDown = HIGH, lastSel = HIGH;
void draw() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(editing ? "* " : "> ");
switch (page) {
case 0: lcd.print("Brightness"); lcd.setCursor(2, 1); lcd.print(brightness); break;
case 1: lcd.print("Beep"); lcd.setCursor(2, 1); lcd.print(beepOn ? "ON" : "OFF"); break;
case 2: lcd.print("Info"); lcd.setCursor(2, 1); lcd.print("tinkercad.ir"); break;
}
}
void change(int dir) {
if (!editing) {
page = (page + dir + PAGES) % PAGES; // browse pages, wrap around
} else if (page == 0) {
brightness = constrain(brightness + dir, 0, 10);
} else if (page == 1) {
beepOn = !beepOn;
}
analogWrite(LED, brightness * 25);
draw();
}
void setup() {
pinMode(UP, INPUT_PULLUP);
pinMode(DOWN, INPUT_PULLUP);
pinMode(SEL, INPUT_PULLUP);
pinMode(LED, OUTPUT);
lcd.init();
lcd.backlight();
analogWrite(LED, brightness * 25);
draw();
}
void loop() {
int u = digitalRead(UP), d = digitalRead(DOWN), s = digitalRead(SEL);
if (u == LOW && lastUp == HIGH) change(-1);
if (d == LOW && lastDown == HIGH) change(1);
if (s == LOW && lastSel == HIGH) {
if (page != 2) editing = !editing; // Info has nothing to edit
if (beepOn) tone(BUZZER, 1000, 50);
draw();
}
lastUp = u; lastDown = d; lastSel = s;
delay(20); // crude debounce
}
چرا این درس؟
دورهی تینکرکد فارسی تعاملی است: هر قدم را خودت داخل شبیهساز انجام میدهی — مدار واقعی میچینی، کد واقعی اجرا میکنی و نتیجه را همان لحظه میبینی. این درس روی درسهای قبلی ساخته شده، پس اگر تازه شروع کردهای از درس ۱ بیا!
این درس را رایگان در شبیهساز شروع کن 🎓