Menü programozás segítség

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
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ásSzerző: ikarusbus » 2019. március 6. szerda, 19:26

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: 9948
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

HozzászólásSzerző: Robert » 2019. március 7. csütörtök, 5:59

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ásSzerző: ikarusbus » 2019. március 7. csütörtök, 7:36

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: 79
Csatlakozott: 2018. március 13. kedd, 7:18

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

HozzászólásSzerző: Verjoz » 2019. március 7. csütörtök, 9:48

É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: 3292
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

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

HozzászólásSzerző: kapu48 » 2019. március 7. csütörtök, 22:31

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.



Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég