🗂️ منوی LCD
LCD با سه دکمهی بالا/پایین/انتخاب، LED و بازر.
سطح: چالشی ⭐⭐⭐ · مود: آردوینو (سهبعدی + کد)
قطعات لازم
کد کامل پروژه
#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
}
چطور اجرایش کنم؟
- شبیهساز تینکرکد فارسی را باز کن و «مود آردوینو» را انتخاب کن.
- از پنل «نمونهها»، «منوی LCD» را بارگذاری کن — مدار و کد با هم میآیند.
- دکمهی اجرا ▶ را بزن و خروجی Serial و رفتار قطعات را تماشا کن.
- حالا کد را تغییر بده — عددها، پینها، ترتیب — و دوباره اجرا کن!