Arduinoban hogyan javítsam meg a menümet? Többi lent!
Készítettem egy változós menüt, ami az egyes sorokat a 2x16-os LCD kijelzőmre írja ki.
Jelenlegi programom azt csinálja, hogy akár melyiket választom ki a Gyümölcs, Zöldség, Édesség, Egyéb közül, utána ha Select-et nyomok, akkor megy az Almára és a többire sorban. És mindig így csinálja akármelyikre megyek. Amit nem tudom hogy kell átírni, hogy úgy működjön, hogy az első menühöz egy adott Itemet jelenítsen meg. Amik közül ugyan úgy tudok választani. Ebben kérnék segítséget, hogy hogyan tudnám ezt átírni, és módosítani egyszerűen.
Menü vázképrajz: [link]
Kód:
#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); //LCD kijelző pinjei
//gombok deklarálása
int upButton = 44; //Fel nyomógomb
int downButton = 48; //Le nyomógomb
int selectButton = 30; //Select nyomógomb
int backButton = 37; //Vissza nyomógomb
//változók deklarálása
int menu = 1; // aktualis menu
int cursor = 0; // az aktualis "menu_itemre" "mutat"
int cursor_seged = 0; // seged valtozo, a kurzor elozo allapotanak tarolasara
int select = 0; //select gomb
int back = 0; //vissza gomb
// menuk elemeinek(szovegeinek) tarolasa tombokben
char* menu1[] = {"Gyumolcs","Zoldseg", "Edesseg", "Egyeb"}; //1. menu
char* item1[] = {"Alma", "Eper", "Szilva", "Kivi"};
char* item2[] = {"Retek", "Repa", "Uborka", "Salata"};
char* item3[] = {"Csoki", "Cukor", "Edes1", "Edes2"};
char* item4[] = {"Liszt", "So", "Bors", "Fahej"};
void setup()
{
lcd.begin(16, 2);
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
// menu alaphelyzetbe allitasa
//1-es menu 0-as item
menu_print(1,0);
}
void loop() //meghívó rész
{
// gombok allapotvaltozasanak folyamatos figyelese,gombnyomaskor az lcd valtoztatasa
//ha lenyomtuk a "Le" gombot a cursort csokkentjuk(visszafele lepunk az itemek kozt)
if (!digitalRead(downButton)) //ha megnyomom a Le gombot,
{
if(cursor==0){ //elejen vagyunk?
cursor=3; // ha igen akkor a vegere allitjuk
}else{cursor--;} // ha nem akkor csokkentjuk tovabb
delay(100);
}
//ha lenyomtuk a "Fel" gombot a kurzormutatot noveljuk(elorefele lepunk az itemek kozt)
if (!digitalRead(upButton)) //ha megnyomom a Fel gombot
{
if(cursor==3){ //vegen vagyunk?
cursor=0; //ha igen az elejere allitjuk
}else{cursor++;} //ha nem akkor noveljuk tovabb
delay(100);
}
if (!digitalRead(selectButton)){ //ha megnyomom a Select gombot
select=1; //select valtozo 1-be allitasa
delay(100);
}
/* if (!digitalRead(backButton)){ //ha megnyomom a Vissza gombot
back=1; //back valtozo 1-be allitasa
delay(100);
}
*/
/*
*****************************************************************
*/
// ha tortent valtozas a cursor ertekeben akkor nem lesz azonos a cursor_seged(elozo allapot) ertekevel
if(cursor!=cursor_seged){ // ha cursor nem egyezik a cursor_segeddel akkor tortent gombnyomas
cursor_seged=cursor; //cursor_seged most mar egyezik a cursorral
menu_print(menu,cursor); // az uj cursor ertekkel meghivjuk a menu_print fuggvenyt
delay(100);
}
//ha megnyotuk a select gombot akkor a select valtozo 1-lesz.
//vizsgaljuk mikor lesz 1-es erteku a valtozo
//a select gomb nyoasara "belepunk a menube"
if(select){ // a cursort megnyomtuk?
select=0; // ha igen, vissza allitjuk 0-ba
cursor=0; // curosr elejere allitasa
cursor_seged=0;// curosr_seged elejere allitasa
menu++; //menu novelese
menu_print(menu,cursor); // uj menu kiiratasa a 0-as itemtol
}
if(back){ // a cursort megnyomtuk?
back=0; // ha igen, vissza allitjuk 0-ba
cursor=0; // curosr elejere allitasa
cursor_seged=0;// curosr_seged elejere allitasa
menu--; //menu csokkentese
menu_print(menu,cursor); // uj menu kiiratasa a 0-as itemtol
}
delay(10);
}
//az lcd-re irja ki az aktualis menut es menupontot
//a fuggvenynek ket erteket kell megadni az aktualis "menut" es azt hogy melyik "item" van kivalasztva
void menu_print(int menu,int cursor){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">");
switch (menu){ //melyik menuben vagyunk?
case 1: // Gyümölcs ->Item1 állapot
lcd.print(menu1[cursor]);
lcd.setCursor(1, 1);
if(cursor==3){
lcd.print(menu1[0]);
}else{
lcd.print(menu1[cursor+1]);
}
break;
case 2: //Gyümölcs kategória
lcd.print(item1[cursor]);
lcd.setCursor(1, 1);
if(cursor==3){
lcd.print(item1[0]);
}else{
lcd.print(item1[cursor+1]);
}
break;
case 3:// Zöldség
lcd.print(item2[cursor]);
lcd.setCursor(1, 1);
if(cursor==3){
lcd.print(item2[0]);
}else{
lcd.print(item2[cursor+1]);
}
break;
case 4:// Édesség
lcd.print(item4[cursor]);
lcd.setCursor(1, 1);
if(cursor==3){
lcd.print(item4[0]);
}else{
lcd.print(item4[cursor+1]);
}
break;
default:break;
}
}
Nincs ötletem már az átírásban. Hogy tudom megjavítani?
//ha megnyotuk a select gombot akkor a select valtozo 1-lesz.
menu++; //menu novelese
menu_print(menu,cursor); // uj menu kiiratasa a 0-as itemtol
nem tudom, jól értelmezem-e, de te fixen ha kiválasztasz egyet, akkor kiírod a menu+1-et?? nem azt, amit kiválasztottál!
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!