Kezdőoldal » Számítástechnika » Programozás » Arduinoban hogyan javítsam...

Arduinoban hogyan javítsam meg a menümet? Többi lent!

Figyelt kérdés

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?



2019. márc. 8. 06:55
 1/3 anonim ***** válasza:
71%
Debuggold.
2019. márc. 8. 07:21
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:
56%

//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!

2019. márc. 8. 14:48
Hasznos számodra ez a válasz?
 3/3 A kérdező kommentje:
Jól értelmezted, a +1-es tagot írja ki, amennyiben meg nincs megnyomás, az előtte írt tagot írja ki. Valahogy a sorokat kéne elnevezni amik a Char-ban szerepelnek. És úgy lehetne hivatkozni rá..
2019. márc. 8. 18:54

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!