Costruzione menu Arduino due e UTFT

Ciao tutti ragazzi, sono alla ricerca di una guida o tutorial o qualsiasi altro modo si possa chiamare per costruire un menu e varie sottosezioni per un TFT sainsmart con touch screen da 7".

Premetto che ho provato le con questo codice:

void loop()
{
  if (digitalRead(CONTROLLO) == HIGH) {
    if (myTouch.dataAvailable() == false) {
      scelta = 1;
    }
    else if (myTouch.dataAvailable() == true) {
      myTouch.read();
      x = myTouch.getX();
      y = myTouch.getY();
      delay(10);
      if ((x > 330) and (x < 430) && (y > 240) and (y < 340)){
        scelta = 2;
      }
      else if ((x > 500) and (x < 600) && (y > 240) and (y < 340)){
        scelta = 3;
      }
    }
    switch(scelta) {
      case 1 :
        MenuIniziale();
      break;
      case 2 :
        Pagina2();
      break;
      case 3 :
        Pagina3();
      break;
    }
   }
  else {
    myGLCD.setColor(255, 0, 0);
    myGLCD.print("ERRORE PROTEZIONI!!!", CENTER, 240);
    delay(500);
    myGLCD.print("                    ", CENTER, 240);
    delay(500);
    myGLCD.print("ERRORE PROTEZIONI!!!", CENTER, 240);
    delay(500);
    myGLCD.print("                    ", CENTER, 240);
    delay(500);
  }
}

In pratica riceve un controllo iniziale che se non rileva da arduino non và avanti, nel caso il controllo è attivo va avanti e mi presenta una schermata dove ho messo due immagini bitmap che vorrei fungessero dal pulsanti per spostarsi in “una pagina diversa dal menù iniziale”, il mio problema è che anche se riceve il comando e sembra che si sposti in un’altra pagina, quest’ultima riceve X e Y come se restasse nel menu principale e quindi se pigio in corrispondenza della seconda immagine si sposta “nell’altra pagina”.

Non so se sono stato chiaro, c’è qualcuno che molto gentilmente può aiutarmi, ho girato questo forum in lungo e largo, ma non riesco a trovare una soluzione =( =( =( =( =( per piacere aiutp

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

faccio subito la presentazione :stuck_out_tongue:

avevo già visto nei link utili, ma non ho trovato nulla a riguardo la mia problematica :frowning:

La tua spiegazione non è molto chiara.
Mi pare di capire che quando tu leggi la posizione x,y non ti curi di capire in quale pagina lo stai facendo.

Ho avuto una necessità simile con un altro microcontrollore.
Io ho risolto facendo una lista di elementi dove ogni elemento contiene le seguenti varaibili:

mode
id
xStart
xEnd
yStart
yEnd
event

mode seve a stabilire il layer sulla quale verrà visualizzato il bottone,
id mi serve a distinguere i vari bottoni;
xStart, xEnd, yStart, yEnd servono a stabilire la posizione;
event contiene la funzione che verrà eseguita al tocco.

La parte "complicata" sta nella aggiunta, rimozione e lettura dei vari elementi, quindi avrai da giocare un bel po' con le funzioni di gestione dinamica della memoria.

Ovviamente per mostrare i diversi bottoni avevo scritto una funziona alla quale passo il numero di layer (mode) e di conseguenza viene scandita tutta lista disegnando sullo schermo solo gli elementi aventi appunto il numero corretto di "mode".

Poi potresti anche togliere else if(...) {}basta un else{}

simonenascivera:
Poi potresti anche togliere else if(…) {}basta un else{}

Ma anche no,
se lo sostituisse con il solo else non avrebbe la seconda condizione, infatti sarebbe come eliminare il secondo bottone ed avere quindi un primo bottone ed un secondo che sarebbe tutto il display tranne il primo bottone… Non so se sono stato chiaro :sweat_smile: :sweat_smile:

Scusa ma non ho capito :slight_smile:

simonenascivera:
Scusa ma non ho capito :slight_smile:

Scusa ma tu a quale if ti riferisci? :sweat_smile: :sweat_smile: :sweat_smile: :sweat_smile:

Il primo else

simonenascivera:
Il primo else

Io mi riferivo al secondo... :smiley: :sweat_smile:

ciao ragazzi, grazie mille delle informazioni che mi avete dato, compresol l'if :sweat_smile: ho ovviato in questa maniera :

In pratica ho costruito il menù principale e i sub-menu utilizzando l'utft-button dove pulisco lo screen, disegno e disabilito i "button" all'occorrenza e che utilizzo nelle pagine

Questo è l'esempio del menu iniziale quello che compare all'accensione dove ci sono i "link" a 2 sotto menu submenu1 e submenu2 i quali sono due bmp opportunamente convertiti

void MenuIniziale(){
  myButtons.disableButton(but3);                    // disabilito but3 altrimenti legge le coordinate
  myButtons.disableButton(but4);                   // disabilito but4 altrimenti legge le coordinate
  myButtons.disableButton(but5);                    // disabilito but5 altrimenti legge le coordinate
  myGLCD.clrScr();                                                    //pulisco lo schermo
  myGLCD.fillScr(255, 255, 255);                           // e lo coloro di bianco
  Sfondo();                                                                  // inserisco le immagini di sfondo
  but1 = myButtons.addButton (330, 240, 100, 100, submenu1, BUTTON_NO_BORDER);      // inserisco il link al submenu1
  but2 = myButtons.addButton (500, 240, 100, 100, submenu2, BUTTON_NO_BORDER);   // ed al submenu2
  myButtons.drawButton(but1);                // disegno but1
  myButtons.drawButton(but2);               // disegno but2
  }

questo è l'esempio di quello che faccio nel submenu1

void submenu1(){
  myButtons.disableButton(but1);        //disabilito il but1 altrimenti legge le coordinate
  myButtons.disableButton(but2);       //disabilito il but2 altrimenti legge le coordinate
  myGLCD.clrScr();                                       //pulisco lo schermo
  myGLCD.fillScr(255, 255, 255);             // e lo coloro di bianco
  Sfondo();                                                     //inserisco le immagini di sfondo
  myGLCD.drawBitmap (676, 10, 76, 76, ident);     //inserisco l'immagine per identificare il sottomenu
  but4 = myButtons.addButton (297, 239, 78, 75, funzione1, BUTTON_NO_BORDER);   // tasto funzione 1
  but5 = myButtons.addButton (297, 327, 78, 75, funzione2, BUTTON_NO_BORDER);  // tasto funzione 2
  but3 = myButtons.addButton (713, 441, 76, 30, back, BUTTON_NO_BORDER);             // tasto per tornare indietro
  myButtons.drawButton(but3);            // disegno but3
  myButtons.drawButton(but4);            // disegno but4
  myButtons.drawButton(but5);            // disegno but5
}

e nel loop ho inserito questo

while(1) 
    {
    if (digitalRead(CONTROLLO) == HIGH) {
    if (myTouch.dataAvailable() == true) 
    {
      pressed_button = myButtons.checkButtons();
      
      if (pressed_button==but1){
        submenu1();
      }
      if (pressed_button==but2){
        submenu2();
      }
      if (pressed_button==but3){
        Indietro();
      }
     if (pressed_button==but4){
        funzione1();
      }
     if (pressed_button==but5){
        funzione2();
      }
}
    }
  else {
    myGLCD.setColor(255, 0, 0);
    myGLCD.setBackColor(255, 255, 255);
    myGLCD.print("ERRORE PROTEZIONI!!!", CENTER, 240);
    delay(500);
    myGLCD.print("                    ", CENTER, 240);
    delay(500);
    myGLCD.print("ERRORE PROTEZIONI!!!", CENTER, 240);
    delay(500);
    myGLCD.print("                    ", CENTER, 240);
    delay(500);
  }
  }
}

ora però mi ritrovo di fronte ad un altro inconveniente...... MOLTO MOLTO IMPORTANTE per me :stuck_out_tongue: utilizzo un touchscreen sainsmart 7" con shield CTE70 e arduino due, sia la shield che il touch hanno la scheda SD ed io, come si può notare anche dal codice, utilizzo molte bmp (naturalmente convertite in file .c) ho abilitato l'utilizzo della SD con il corto sulla shield e vorrei poter mettere le immagini sulla sd per poi richiamarle all'occorrenza, qualcuno mi sà aiutare? io proprio non sò che pesci pigliare :frowning: