Problème tactile

Bonjour,

J'ai un problème depuis que j'ai acheté l'écran tft touch shield 2.0. j'ai fait un programme qui incrémente une variable affiché à l'écran en appuyant sur un bouton "+". Avec l'ancien écran Tft touch shield 1.0, l'acquisition tactile fonctionnait parfaitement, et on voyait bien la variable s'incrémenter en appuyant sur le bouton "+". Sauf qu'avec le nouvel écran, ça ne marche plus avec ce même programme, la variable ne s'incrémente plus, elle reste à 0 par défaut.

Sauriez-vous si le fait d'avoir changer d'écran joue ? Est-ce qu'il faut programmer autrement pour avoir le même résultat ?

Merci de votre compréhension

Aucun code et aucune réference pour les ecrans ... On est pas voyants ...

http://www.seeedstudio.com/wiki/2.8''_TFT_Touch_Shield_V1.0 ancien écran

http://www.seeedstudio.com/wiki/2.8''_TFT_Touch_Shield_V2.0 nouvel écran

Point p = ts.getPoint();
  p.x = map(p.x, TS_MINX, TS_MAXX, 240, 0);
  p.y = map(p.y, TS_MINY, TS_MAXY, 320, 0);
  delay(100);
  if(p.x >=10&& p.x <= 30 && p.y >=280 && p.y <= 300)//haut +
  {
    Tft.fillRectangle(13,277,20,40,RED);
    Tft.fillRectangle(183,277,20,40,RED);
   nombre_reservoir_1_matin++;
  }
  if(p.x >=10 && p.x <= 30 && p.y >=180 && p.y <= 200)//haut+
  {
    Tft.fillRectangle(13,177,20,40,RED);
    Tft.fillRectangle(183,177,20,40,RED);
  nombre_reservoir_1_midi++;
  
  }
  if(p.y >=10 && p.y <= 30 && p.y >=80 && p.y <= 100)//haut+
  {
     Tft.fillRectangle(13,77,20,40,RED);
     Tft.fillRectangle(183,77,20,40,RED);
    nombre_reservoir_1_soir++;
   
  }
  
  if(p.x >=40 && p.x <= 60 && p.y >=280 && p.y <= 300)//haut -
  {
    Tft.fillRectangle(43,277,20,40,RED);
    Tft.fillRectangle(210,277,20,40,RED);
    nombre_reservoir_2_matin++;
    
  }
  if(p.x >=40 && p.x <= 60 && p.y >=180 && p.y <= 200)//haut -
  {
    Tft.fillRectangle(43,177,20,40,RED);
    Tft.fillRectangle(210,177,20,40,RED);
    nombre_reservoir_2_midi++;
    
  }
  if(p.x >=40 && p.x <= 60 && p.y >=80 && p.y <= 100)//haut -
  {
    Tft.fillRectangle(43,77,20,40,RED);
    Tft.fillRectangle(210,77,20,40,RED);
    nombre_reservoir_2_soir++;
    
  }
  
  if(p.x >=180 && p.x <= 200 && p.y >=280 && p.y <= 300)//bas +
  {
    Tft.fillRectangle(183,277,20,40,RED);
    Tft.fillRectangle(13,277,20,40,RED);
    nombre_reservoir_1_matin--;
  }
  if(p.x >=180 && p.x <= 200 && p.y >=180 && p.y <= 200)//bas +
  {
    Tft.fillRectangle(183,177,20,40,RED);
    Tft.fillRectangle(13,177,20,40,RED);
    nombre_reservoir_1_midi--;
  }
  if(p.x >=180 && p.x <= 200 && p.y >=80 && p.y <= 100)//bas +
  {
    Tft.fillRectangle(183,77,20,40,RED);
    Tft.fillRectangle(13,77,20,40,RED);
    nombre_reservoir_1_soir--;
  }
  
  if(p.x >=210 && p.x <= 230 && p.y >=280 && p.y <= 300)//bas -
  {
    Tft.fillRectangle(213,277,20,40,RED);
    Tft.fillRectangle(43,277,20,40,RED);
    nombre_reservoir_2_matin--;
  }
  if(p.x >=210 && p.x <= 230 && p.y >=180 && p.y <= 200)//bas -
  {
    Tft.fillRectangle(213,177,20,40,RED);
    Tft.fillRectangle(43,177,20,40,RED);
    nombre_reservoir_2_midi--;
  }
  if(p.x >=210 && p.x <= 230 && p.y >=80 && p.y <= 100)//bas -
  {
    Tft.fillRectangle(213,77,20,40,RED);
    Tft.fillRectangle(43,77,20,40,RED);
    nombre_reservoir_2_soir--;
  }

Voilà la partie du programme qui fait ça

Édite ton message et mets ton code entre les balises

tu as calibré l’écran ?

Tu as mis à jour les librairies?

J'ai édité mon message.
Les librairies sont bel et bien mis à jour puisque aucune erreur n'a été relevé par le logiciel.
Pour le calibrage d'écran, je n'étais même pas au courant qu'il fallait en faire 1, mais quand je lance l'exemple de la librairie "touchScreen", l'acquistion se fait, et j'ai les coordonnées de là où j'exerce une pression. Donc le tactile fonctionne, mais pas dans le programme que j'ai fait, alors que comme je l'ai dit, il fonctionnait très bien sur l'ancien écran. Donc je ne vois pas pourquoi il ne marcherait pas sur celui-ci :~

Ok le tactile fonctionne, mais est-ce que les conditions dans ton programme correspondent ?

exemple : if(p.x >=10&& p.x <= 30 && p.y >=280 && p.y <= 300)

Si tu cliques dans la bonne zone est-ce que les coordonnées sont bien comprise dans cette plage ?

Comme je l'ai dit dans ma réponse précédente, j'ai bien vérifiée les coordonnées de l'écran avec l'exemple fourni dans les librairies, et ça correspond. Seulement, avec le programme là, ça ne fonctionne pas.

Pourquoi ne pas simplement afficher ces ccordonnées dans un coin de l'écran ? Ca te permettrait de visualiser en temps réel les coordonnées où tu appuies. Parce que si l'exemple utilise une autre calibration ça peut du coup marcher pour lui et pas pour toi ...

Je veux bien essayer mais je ne vois pas pourquoi l'écran utiliserait une calibration différente à chaque nouveau programme.. C'est même d'ailleurs impossible sinon à chaque téléversement il faudrait changer les coordonnées et c'est infaisable on peut pas deviner les coordonnées... Mais je vais quand même essayer pour voir

Kevindu55:
Les librairies sont bel et bien mis à jour puisque aucune erreur n'a été relevé par le logiciel.

Le problème n'est pas la compilation. Le problème c'est qu'entre les 2 versions d'afficheur le driver d'écran à changé. Donc il faut s'assurer que tu as la librairie qui supporte le nouveau driver.

Kevindu55:
Je veux bien essayer mais je ne vois pas pourquoi l'écran utiliserait une calibration différente à chaque nouveau programme.. C'est même d'ailleurs impossible sinon à chaque téléversement il faudrait changer les coordonnées et c'est infaisable on peut pas deviner les coordonnées... Mais je vais quand même essayer pour voir

Pas du tout : il suffit qu'en en tête de lib tu aies deux #define pour corriger le X le Y et à chaque compilation il utilisera ces constantes pour la cal ... De même que toi même dans ton code tu peux introduire une correction des coordonnées.

Je note qu'entre ton code et le code d'exemple touchscreen les axes X et Y sont permutés.
De même entre le code d'exemple de la V1 et le code d'exemple de la V2 les axes sont aussi permutés

Voici les define qu’il y a… Je ne sais pas si tous sont utiles mais je les ai copié de la librairie car je pensais qu’ils étaient tous utiles…

#include <stdint.h>
#include <SeeedTouchScreen.h> 
#include <TFTv2.h>
#include <SPI.h>

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) // mega
#define YP A2   // must be an analog pin, use "An" notation!
#define XM A1   // must be an analog pin, use "An" notation!
#define YM 54   // can be a digital pin, this is A0
#define XP 57   // can be a digital pin, this is A3 

#elif defined(__AVR_ATmega32U4__) // leonardo
#define YP A2   // must be an analog pin, use "An" notation!
#define XM A1   // must be an analog pin, use "An" notation!
#define YM 18   // can be a digital pin, this is A0
#define XP 21   // can be a digital pin, this is A3 

#else //168, 328, something else
#define YP A2   // must be an analog pin, use "An" notation!
#define XM A1   // must be an analog pin, use "An" notation!
#define YM 14   // can be a digital pin, this is A0
#define XP 17   // can be a digital pin, this is A3 

#endif

//Measured ADC values for (0,0) and (210-1,320-1)
//TS_MINX corresponds to ADC value when X = 0
//TS_MINY corresponds to ADC value when Y = 0
//TS_MAXX corresponds to ADC value when X = 240 -1
//TS_MAXY corresponds to ADC value when Y = 320 -1

#define TS_MINX 116*2
#define TS_MAXX 890*2
#define TS_MINY 83*2
#define TS_MAXY 913*2

#ifdef SEEEDUINO
  #define YP A2   // must be an analog pin, use "An" notation!
  #define XM A1   // must be an analog pin, use "An" notation!
  #define YM 14   // can be a digital pin, this is A0
  #define XP 17   // can be a digital pin, this is A3 
#endif

#ifdef MEGA
  #define YP A2   // must be an analog pin, use "An" notation!
  #define XM A1   // must be an analog pin, use "An" notation!
  #define YM 54   // can be a digital pin, this is A0
  #define XP 57   // can be a digital pin, this is A3 
#endif 

//Measured ADC values for (0,0) and (210-1,320-1)
//TS_MINX corresponds to ADC value when X = 0
//TS_MINY corresponds to ADC value when Y = 0
//TS_MAXX corresponds to ADC value when X = 240 -1
//TS_MAXY corresponds to ADC value when Y = 320 -1

#define TS_MINX 140
#define TS_MAXX 900

#define TS_MINY 120
#define TS_MAXY 940


// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// The 2.8" TFT Touch shield has 300 ohms across the X plate
TouchScreen ts = TouchScreen(XP, YP, XM, YM);

Kevindu55:

Point p = ts.getPoint();

p.x = map(p.x, TS_MINX, TS_MAXX, 240, 0);
 p.y = map(p.y, TS_MINY, TS_MAXY, 320, 0);

C'est de cette partie de code dont je parle.
Entre ton code, le code de Touchscreen dans la nouvelle version et celui de l'ancienne version, il y a échange entre le bornes du map. Ce qui fait que tu as une symétrie selon les axes X et Y suivant les versions de code.
Ce qui pourrait complètement décaler la position retournée de tes boutons.
C'est peut être du à un câblage différent des sorties de la dalle tactile.

En effet, j'ai inversé les valeurs des coordonnées et ça fonctionne correctement. Merci à tous de m'avoir aidé