arduino + tft touch panel = menu start , stop

Je cherche à réaliser un menu simple avec deux boutons Start et Stop sur afficheur tft touch panel, j'ai cherché sur le net mais rien de simple

Merci pour votre aide

Faire deux carrés avec le texte "Start" dans l'un et "Stop" dans l'autre .........

Bonjour,

Déjà ce serait bien de préciser :

  • quel écran TFT utilises-tu ?
  • quelle librairie utilises-tu avec l'écran ?

On est pas devin sur ce forum :wink:

Ecran 2.8", 240x320 pixel MI0283QT-9A Adapter de chez Watterott avec la librairie fournie avec.

Pour la réalisation des boutons, pas de soucis, c'est plutôt lier une action à chaque bouton la question.

Bah si l'adresse du touché correspond aux coordonnées d'un rectangle => action

B@tto:
Bah si l'adresse du touché correspond aux coordonnées d'un rectangle => action

On peut pas faire plus simple.

Exemple (partie touch.pde) :

Hello, ca y est j'ai trouvé, y a encore plus simple :), voici un petit exemple qui permet d'allumer ou d'éteindre la led 13.

$
#include <MI0283QT9.h>
#include <ADS7846.h>

#define TP_EEPROMADDR (0x00) //eeprom address for calibration data
MI0283QT9 lcd; 
ADS7846 tp;

//----- pixel central -----
int xo;
int yo;

int X, Y; // variables acquisition touchpad

int testX, testY;                                 // variable de test pour les touches

int taille=70;                                      // largeur de la touche
int ecart=8;                                       // ecart entre les touches
int nombreLignes=1;                            // nombre de lignes
int nombreColonnes=1;                         // nombre de colonnes

int xref=1-1, yref=220-1;                     // coordonnee coin sup gauche du clavier

int ligne, colonne;                               // variables de ligne et de colonne
int ligneSelect, colonneSelect;                // variables de ligne et colonne selectionnee

int appui;                                           // valeur sauvegarde lorsque j'appui

void setup(){
  
//Touch Panel
  lcd.init(4);                //init display
  tp.init();                  //init touch controller
  lcd.clear(COLOR_WHITE);     //clear screen
  tp.service();               //touch-panel calibration
  if(tp.getPressure() > 5)
  {
    tp.doCalibration(&lcd, TP_EEPROMADDR, 0); //dont check EEPROM for calibration data
  }
  else
  {
    tp.doCalibration(&lcd, TP_EEPROMADDR, 1); //check EEPROM for calibration data
  }
  lcd.clear(COLOR_BLACK);    //clear screen     
 
//------- initialisation des variables utilisées
xo=lcd.getWidth()/2;
yo=lcd.getHeight()/2;

for ( ligne=1; ligne<=nombreLignes; ligne++) { // tracé des lignes

  for ( colonne=1; colonne<=nombreColonnes; colonne++) { // tracé des colonnes

    xo=xref+ecart+(taille/2)+((ecart+taille)*(colonne-1));// calcule coordonnée x centre touche
    yo=yref+(taille/2)+((taille+ecart)*(ligne-1));// calcule coordonnée y centre touche

    traceTouche(xo, yo, taille, COLOR_WHITE); // trace la touche
 }

void loop(){

  // TOUCH PANEL
  char tmp[128];
  static uint16_t last_x=0, last_y=0;
  static uint8_t led=60;
  unsigned long m;
  static unsigned long prevMillis=0;
  
  tp.service();                                               // service routine for touch panel
  
  if(startVal==0){
  lcd.printOptions(1, COLOR_BLACK, COLOR_WHITE);
  lcd.printXY(25, 224); //set cursor
  lcd.println("Start"); 
   
  if(tp.getPressure() > 10 && appui==0){                                  // touch press? 
  X=tp.getX(), Y=tp.getY();                                                       // analyse si appui dans la touche
    for (ligne=1; ligne<=nombreLignes; ligne++) {                           // boucle des lignes
    for (colonne=1; colonne<=nombreColonnes; colonne++) {            // boucle des colonnes
    xo=xref+ecart+(taille/2)+((ecart+taille)*(colonne-1));                // calcule coordonnee x centre touche
    yo=yref+(taille/2)+((taille+ecart)*(ligne-1));                             // calcule coordonnee y centre touche

     //---- vérifie si appui dans la touche ---------
     testX=abs(X-xo);                                                                 // calcul valeur absolue de l'ecart de X touchpad à  xo centre trouche
     testY=abs(Y-yo);                                                                 // calcul valeur absolue de l'ecart de Y touchpad à  yo centre trouche

       if (testX<taille/2 && testY<taille/2) {                                   // si appui dans la touche

      traceTouche(xo, yo, taille, COLOR_RED); // trace la touche
      appui=1; 
 
      ligneSelect=ligne;
      colonneSelect=colonne;      
      delay(250); // anti-rebond

      break;                                                    // sort de for si touche trouvée
      } // fin if testX
    } // fin for colonnes
    if (appui==1) break;                                  // sort de la seconde boucle si touche trouvée
  } 
}
 
 else if(tp.getPressure()>10 && appui==1){                                  // touch press? 
    X=tp.getX(), Y=tp.getY();                                   // analyse si appui dans la touche
    for (ligne=1; ligne<=nombreLignes; ligne++) {             // boucle des lignes
    for (colonne=1; colonne<=nombreColonnes; colonne++) {     // boucle des colonnes
    xo=xref+ecart+(taille/2)+((ecart+taille)*(colonne-1));    // calcule coordonnée x centre touche
    yo=yref+(taille/2)+((taille+ecart)*(ligne-1));            // calcule coordonnée y centre touche

     //---- vérifie si appui dans la touche ---------
     testX=abs(X-xo);                                         // calcul valeur absolue de l'écart de X touchpad à  xo centre trouche
     testY=abs(Y-yo);                                         // calcul valeur absolue de l'écart de Y touchpad à  yo centre trouche

     if (testX<taille/2 && testY<taille/2) {                 // si appui dans la touche

     traceTouche(xo, yo, taille, COLOR_WHITE); // trace la touche
     appui=0; 
 
     ligneSelect=ligne;
     colonneSelect=colonne;      
     delay(250); // anti-rebond

     break; // sort de for si touche trouvée
     } // fin if testX
    } // fin for colonnes
    if (appuil==1) break;
   }
   
} //fin touchpad.getPressure()>10

// LED
if (appui == 1){
  digitalWrite(13, 1);
  }
else
  {
  digitalWrite(13, 0);
  }

A+