A jelenlegi kód azt csinálja, hogy lépteti a kijelzőt és azonos menüben azonos Itemhez a hozzá tartozó sort mutatja meg Enter gomb nyomására.
A feladatom, hogy azt szeretném megcsinálni ebből, hogy az első menüt így hagyni ellentétben a másodikkal, és ha az lesőben az első sorra nyomok akkor, a második menüben két választási lehetőség legyen (tehát két különböző felirat legyen a kijelzőn pl, "Alma" , "Korte" ). Aztán ezen belül ha az egyikre is Entert nyomok akkor már egy újabb kijelző képet hoz be, viszont itt a programnak addig itt kell maradni amíg nem nyomok valami más gombot.
Így lehet bonyolult, ezért csináltam egy gyors menü szerkezeti ábrát : http://www.kepfeltoltes.eu/view.php?filename=220k_p.jpg
És lehetőleg úgy próbálkozom, hogy Az a menüsorokat CTRL+C és V-vel másolható legyen egymás alá, mert ebből a tagokból legalább 20-30 db lesz. És csak az első és második (Menü1 és Item) lehet görgetni. De az látszik is az ábrán.
Programkód eddig:
Kód: Egész kijelölése
#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[] = {"182","183","184","282E"}; //1. menu
char* menu2[] = {"Alacskai uti lkt.","Kobanya Kispest"," ", " "}; //2. menu
char* menu3[] = {"Station1","Station2","Station3","Station4"}; //3. menu
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: // elsoben
lcd.print(menu1[cursor]);
lcd.setCursor(1, 1);
if(cursor==3){
lcd.print(menu1[0]);
}else{
lcd.print(menu1[cursor+1]);
}
break;
case 2:// masodikban
lcd.print(menu2[cursor]);
lcd.setCursor(1, 1);
if(cursor==3){
lcd.print(menu2[0]);
}else{
lcd.print(menu2[cursor+1]);
}
break;
case 3:// harmadikban
lcd.print(menu3[cursor]);
lcd.setCursor(1, 1);
if(cursor==3){
lcd.print(menu3[0]);
}else{
lcd.print(menu3[cursor+1]);
}
break;
default:break;
}
}