Go Down

Topic: arduino + tft touch panel = menu start , stop (Read 2159 times) previous topic - next topic

Mike74

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

B@tto

Faire deux carrés avec le texte "Start" dans l'un et "Stop" dans l'autre .........
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

skywodd

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 ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Mike74

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.


B@tto

Bah si l'adresse du touché correspond aux coordonnées d'un rectangle => action
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

skywodd


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

On peut pas faire plus simple.

Exemple (partie touch.pde) :
http://skyduino.wordpress.com/2011/07/08/arduinoscillo-news/
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Mike74

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.

Code: [Select]
$
#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+

Go Up