Menü programozás segítség

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
ikarusbus
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2019. február 14. csütörtök, 7:10

Menü programozás segítség

Hozzászólás Szerző: ikarusbus »

Sziasztok :D

Sikerült egy másik menüt összeeszkábálnom, szó szerint. Sok kicsiből. Sajnos nem a tervemnek megfelelően működik. Készítettem egy egyszerű ábrát, hogy hogy szeretném, hogy működjön a menüm.
Kép

Jelenlegi programom viszont 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.

A kód:

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[] = {"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;
    }
}
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Menü programozás segítség

Hozzászólás Szerző: Robert »

void menu_print(int menu,int cursor)

Itt case 1...4-et vizsgálsz, miközben a paraméterátadásod 0...3!
Ha nem néztem el a programot....
http://www.tavir.hu - a gazda :)
ikarusbus
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2019. február 14. csütörtök, 7:10

Re: Menü programozás segítség

Hozzászólás Szerző: ikarusbus »

Sajnos így sem jó, mert 0-3ig pedig az Almás részt dobja be elsőre a kijelzőre.
Valahogy azt kell neki megmondani, hogy Menü1 van, és valahogy a tagjait el kéne nevezni és ha az Item1 értékét növelem 1-el akkor meghívjuk azt a kijelzőképet egy függvénnyel.
Avatar
Verjoz
SzínkódFestő
Hozzászólások: 99
Csatlakozott: 2018. március 13. kedd, 7:18

Re: Menü programozás segítség

Hozzászólás Szerző: Verjoz »

Én azt szoktam ilyen esetben csinálni hogy a számláló változókat ellenőrzés céljából megjelenítem a kijelzőn. És akkor szoktam szembesülni a hibával hogy nem is lép az érték sehova.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Menü programozás segítség

Hozzászólás Szerző: kapu48 »

Kód: Egész kijelölése

if(select){  // a cursort megnyomtuk?
     select=0; // ha igen, vissza allitjuk 0-ba
     cursor=0;<<<<<< Ha itt mindig nullázod a cursort????????M // curosr elejere allitasa
     cursor_seged=0;// curosr_seged elejere allitasa
     menu++; //menu novelese
     menu_print(menu,cursor); <<<<<<< Akkor ezt mindig 0 cursoral hívod meg!!!!!!!!!// uj menu kiiratasa a 0-as itemtol
     cursor=0; <<<<< Itt kellene törölni mikor már kiértékelted!!!!!!!
   }
   Ugyan ez vonatkozik a többi feltételvizsgálatokra is.

Válasz küldése