calibration écran tactile

Bonjour.
Je galère un peu avec l'utilisation d'un écran tactile TFT_320QVT de sainsmart avec une MEGA2560.
J'utilise la librairie UTouch de henningkarlsen et exploité les programmes UTouch_Calibration et UTouch_QuickDraw pour "me faire la main".
Souci : quelle que soit la calibration, le tracé n'apparait jamais à l'endroit où l'on appuie.
pour info le controleur tactile est le XPT2046 équivalent au ADS7843.
merci pour votre aide.
à bientôt.

Sans code comment veux-tu qu'on t'aide ?

Bonjour.
Je n'avais pas mis de code car utilisant les exemples fournis avec la bibliothèque, je pensais que ce n'était pas la peine.
Je n'ai fait que rajouter l'envoi sur la liaison série des coordonnées x et y
Je précise aussi que tous les essais de programmation coté affichage graphique sont OK.

Le voici donc :

// UTouch_QuickDraw (C)2010-2012 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// This program is a quick demo of how to use the library.
//
// This program requires the UTFT library.
//
// It is assumed that the display module is connected to an
// appropriate shield or that you know how to change the pin 
// numbers in the setup.
//

#include <UTFT.h>
#include <UTouch.h>

// Uncomment the next two lines for the Arduino 2009/UNO
//UTFT        myGLCD(ITDB24D,19,18,17,16);   // Remember to change the model parameter to suit your display module!
//UTouch      myTouch(15,10,14,9,8);

// Uncomment the next two lines for the Arduino Mega
UTFT        myGLCD(ITDB32S, 38,39,40,41);   // Remember to change the model parameter to suit your display module!
UTouch      myTouch(6,5,4,3,2);

void setup()
{
  myGLCD.InitLCD();
  myGLCD.clrScr();
  Serial.begin(115200);

  myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);
}

void loop()
{
  long x, y;
  
  while (myTouch.dataAvailable() == true)
  {
    myTouch.read();
 
    x = myTouch.getX();
    y = myTouch.getY();
    if ((x!=-1) and (y!=-1))
    {
    Serial.print(x);
    Serial.print("  ");
    Serial.println(y);
    
    myGLCD.drawPixel (x, y);
    }
  }
}

pour le shied utilisé, c'est celui-ci :
http://www.sainsmart.com/sainsmart-3-2-tft-lcd-display-sainsmart-tft-lcd-adjustable-shield-for-arduino-2560-r3-1280-a082-plug.html

voila la doc
http://www.henningkarlsen.com/electronics/resource/UTouch/UTouch.pdf
il est bien indiqué que l'on doit d'abord utiliser le script de calibration et faire quelques manips.

mbertaud:
Bonjour.
Je n'avais pas mis de code car utilisant les exemples fournis avec la bibliothèque, je pensais que ce n'était pas la peine.
Je n'ai fait que rajouter l'envoi sur la liaison série des coordonnées x et y
Je précise aussi que tous les essais de programmation coté affichage graphique sont OK.

Le voici donc :

// UTouch_QuickDraw (C)2010-2012 Henning Karlsen

// web: Electronics - Henning Karlsen
//
// This program is a quick demo of how to use the library.
//
// This program requires the UTFT library.
//
// It is assumed that the display module is connected to an
// appropriate shield or that you know how to change the pin
// numbers in the setup.
//

#include <UTFT.h>
#include <UTouch.h>

// Uncomment the next two lines for the Arduino 2009/UNO
//UTFT        myGLCD(ITDB24D,19,18,17,16);   // Remember to change the model parameter to suit your display module!
//UTouch      myTouch(15,10,14,9,8);

// Uncomment the next two lines for the Arduino Mega
UTFT        myGLCD(ITDB32S, 38,39,40,41);   // Remember to change the model parameter to suit your display module!
UTouch      myTouch(6,5,4,3,2);

void setup()
{
  myGLCD.InitLCD();
  myGLCD.clrScr();
  Serial.begin(115200);

myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);
}

void loop()
{
  long x, y;
 
  while (myTouch.dataAvailable() == true)
  {
    myTouch.read();

x = myTouch.getX();
    y = myTouch.getY();
    if ((x!=-1) and (y!=-1))
    {
    Serial.print(x);
    Serial.print("  ");
    Serial.println(y);
   
    myGLCD.drawPixel (x, y);
    }
  }
}



pour le shied utilisé, c'est celui-ci :
http://www.sainsmart.com/sainsmart-3-2-tft-lcd-display-sainsmart-tft-lcd-adjustable-shield-for-arduino-2560-r3-1280-a082-plug.html

Et elle est où l'étape de calibration la ?

la calibration s'effectue dans un autre programme qu'il ne m'ai pas possible de mettre ici (message > 9500 caractères)
celui-ci demande de pointer à huit endroits sur la périphérie de l'afficheur puis affiche les valeurs à introduire dans un fichier "UTouchCD.h"

ça donne :

#define CAL_X 0x0078C222UL
#define CAL_Y 0x0093C305UL
#define CAL_S 0x8013F0EFUL

j'ai fait des essais en changeant l'option d'orientation, pas mieux.
Quelque chose m'échappe...
Merci en tous cas à ceux quicherchent à m'aider.

Est ce que tu as décommenté en haut de UTouch.cpp #include "UTouchCD.h" ?

Par contre j'ai beau cherché je vois pas où dans la lib la calibration est gérée. Donc il n'est pas impossible que ça soit à toi de le gérer genre :

x = myTouch.getX() + CAL_X;

Je vais chercher encore un peu puis je "réinventerai la roue" en exploitant directement les données du contrôleur XPT2046.
On va trouver, on va trouver : ah mais !

Yep!

Calibrer son ecran tactile n'est pas une chose aisée lorsque l'on part de rien.

Est-tu certain qu'il y ait une puce dédiée pour l'écran tactile ?

  • Je ne connais pas ce modèle d'écran, mais il n'est pas rare que la partie tactile soit indiquée compatible avec telle puce, qui sur la carte n'existe pas en réalité. Je le sais, ça m'est arrivé!

Fin bref! Je donne ce lien à tout hasard puisque je trouve cette partie du code assez compatible avec ce que j'ai pû experimenter autrefois ; UTouch myTouch(15,10,14,9,8) == myTouch(Pin, Pin, Pin, Pin, R). Assez ressemblant avec la bibliothèque (Touchscreen) consacrée aux ecrans tactiles NDS, resistifs pour résumer.

Et je rajoute ce lien fort utile pour les bricoleux du tactile : http://www.embedded.com/design/system-integration/4023968/How-To-Calibrate-Touch-Screens

@+

Zoroastre.