Arduino- Menü készítése

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

Arduino- Menü készítése

HozzászólásSzerző: ikarusbus » 2019. február 17. vasárnap, 21:54

A problémám az, hogy egy menüt szeretnék készíteni ebből a menüből:

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;
    }


}

Avatar
Verjoz
SzínkódFestő
Hozzászólások: 84
Csatlakozott: 2018. március 13. kedd, 7:18

Re: Arduino- Menü készítése

HozzászólásSzerző: Verjoz » 2019. február 18. hétfő, 18:24

Charral nem próbáltad. Mert szerintem ha szöveget szeretnél mozgatni arra az lenne a jobb.

Avatar
Verjoz
SzínkódFestő
Hozzászólások: 84
Csatlakozott: 2018. március 13. kedd, 7:18

Re: Arduino- Menü készítése

HozzászólásSzerző: Verjoz » 2019. február 18. hétfő, 18:25

Ja bocs. Valamiért az eleje kimaradt a kódod olvasásának.
Nem szóltam.

Avatar
Verjoz
SzínkódFestő
Hozzászólások: 84
Csatlakozott: 2018. március 13. kedd, 7:18

Re: Arduino- Menü készítése

HozzászólásSzerző: Verjoz » 2019. február 19. kedd, 10:52

És mi van rákötve hogy ott a Wire???


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