ecran TFT 4 pouces

introduction

  • Brand Name: CFsunbird
  • Type: TFT
  • Model Number: 3.97 inch TFT LCD screen
  • is_customized: Yes
  • Display Mode: 400*240
  • Driver IC: ST7793
  • Touch: Yes

 

Prix : 9 euros

 

Pins pour MEGA

 

MEGA                    LCD
22.............................LCD_D0
23.............................LCD_D1
24.............................LCD_D2
25.............................LCD_D3
26.............................LCD_D4
27.............................LCD_D5
28.............................LCD_D6
29.............................LCD_D7

 

Testing : (A1, D6) = 33
Testing : (A2, D7) = 34
Diagnosing as:-
XM,XP:  (A1, D6) = 33
YP,YM:  (A2, D7) = 34



Petit defaut au touché

j'ai constaté un petit défaut au touché lorsqu'on le branche sur un arduino MEGA

il y a un écart entre la dalle et la carte de l’écran.

Ils ont mis des mousses molles, mais lorqu'on appuie dessus, l’écran se déforme fortement.

 

J'ai rajouté des allumettes pour palier ce défaut.

Après le sens des allumettes 'dans la largeur ou la longueur', je vous laisse tester, personnellement j'ai choisi la longueur.

 

une petite vidéo pour montrer la deformation, puis le rôle des allumettes..tips de fortune.

bien sur il faut enlever le bout rouge que j'ai laissé pour une meilleure visualisation du positionnement et du résultat.

 

 

 



bibliotheques

bibliotheque MCU friend

 

https://github.com/prenticedavid/MCUFRIEND_kbv

MCUFRIEND_kbv-master.zip

 

https://github.com/adafruit/Adafruit_TouchScreen

Adafruit_TouchScreen-master.zip

 

https://github.com/adafruit/Adafruit_TouchScreen

 

PENSEZ BIEN A SAUVEGARDER LES LIBRAIRIES QUI SERONT REMPLACES.

 

Executez l'exemple : Diagnose_tft_support

 

on obtient donc l'id :  0x7793

et la taille de l'ecran 240*400

 

Lors de la demo, on voit que sur certaines couleurs, un vingtaines de lignes de pixel ne sont pas correctement gérés par la bibliotheque.

 

il s'agit de PORTRAIT_REV et LANDSCAPE REV.

 

Le plus important reste de faire fonctionner la partie tactile.

 

Programme : Diagnose_touchpin.ino

 

resultat :

Making all control and bus pins INPUT_PULLUP
Typical 30k Analog pullup with corresponding pin
would read low when digital is written LOW
e.g. reads ~25 for 300R X direction
e.g. reads ~30 for 500R Y direction

Testing : (A1, D6) = 33
Testing : (A2, D7) = 34
Diagnosing as:-
XM,XP:  (A1, D6) = 33
YP,YM:  (A2, D7) = 34

Les programmes GLUE-DEMO ne fonctionne pas.

 




le tactile

Programme : touchscreen_calibr_native

Permet de tester et calibrer la partie tactile.

Tres important car toutes les librairies touch.h ne fonctionne pas systematiquement.

 

resultat :

TouchScreen.h GFX Calibration
Making all control and bus pins INPUT_PULLUP
Typical 30k Analog pullup with corresponding pin
would read low when digital is written LOW
e.g. reads ~25 for 300R X direction
e.g. reads ~30 for 500R Y direction

Testing : (A1, D6) = 34
Testing : (A2, D7) = 34
Diagnosing as:-
YP,YM:  (A1, D6) = 34
YP,YM:  (A2, D7) = 34
ID = 0x7793

cx=543 cy=793 cz=153 LEFT, TOP, Pressure
cx=635 cy=857 cz=157 LEFT, MIDH, Pressure
cx=613 cy=791 cz=158 LEFT, BOT, Pressure
cx=546 cy=837 cz=159 MIDW, TOP, Pressure
cx=426 cy=758 cz=159 MIDW, BOT, Pressure
cx=564 cy=806 cz=159 RT, TOP, Pressure
cx=542 cy=717 cz=160 RT, MIDH, Pressure
cx=511 cy=793 cz=159 RT, BOT, Pressure
MCUFRIEND_kbv ID=0x7793  240 x 400

const int XP=7,XM=A2,YP=A1,YM=6; //240x400 ID=0x7793
const int TS_LEFT=599,TS_RT=536,TS_TOP=812,TS_BOT=779;
PORTRAIT CALIBRATION     240 x 400
x = map(p.x, LEFT=599, RT=536, 0, 240)
y = map(p.y, TOP=812, BOT=779, 0, 400)
Touch Pin Wiring XP=7 XM=A2 YP=A1 YM=6
LANDSCAPE CALIBRATION    400 x 240
x = map(p.y, LEFT=812, RT=779, 0, 400)
y = map(p.x, TOP=536, BOT=599, 0, 240)

ces informations sont a reportés dans le code ino de mon programme.

 

Par exemple, le programme " Touch_shield_new" ne fonctionnera pas, il voudra fonctionné en landscape uniquement.

je ne vais pas analyser le code pour identifier l'erreur, ce n'est pas l'objet de ce post.

Télécharger
touchscreen_calibr_native
touch_screen_calib.pdf
Document Adobe Acrobat 33.7 KB


des questions

si j’exécute 2 fois le programme de calibration avec le même matériel, est ce que j'obtiens le même résultat ?

 

Les constantes ne changent pas

Les coordonnées p.x et p.y peuvent beaucoup varier.

 

 

 

 

 

resultat 2nd execution :

 

const int XP=6,XM=A1,YP=A2,YM=7; //240x400 ID=0x7793
const int TS_LEFT=370,TS_RT=496,TS_TOP=633,TS_BOT=753;
PORTRAIT CALIBRATION     240 x 400
x = map(p.x, LEFT=370, RT=496, 0, 240)
y = map(p.y, TOP=633, BOT=753, 0, 400)
Touch Pin Wiring XP=6 XM=A1 YP=A2 YM=7
LANDSCAPE CALIBRATION    400 x 240
x = map(p.y, LEFT=633, RT=753, 0, 400)
y = map(p.x, TOP=496, BOT=370, 0, 240)

 

resultat 3eme execution:

LANDSCAPE CALIBRATION    400 x 240
x = map(p.y, LEFT=670, RT=710, 0, 400)
y = map(p.x, TOP=441, BOT=382, 0, 240)

 


Meme Ecran, mais arduino different

const int XP=6,XM=A1,YP=A2,YM=7; //240x400 ID=0x7793
const int TS_LEFT=259,TS_RT=536,TS_TOP=471,TS_BOT=757;
PORTRAIT CALIBRATION     240 x 400
x = map(p.x, LEFT=259, RT=536, 0, 240)
y = map(p.y, TOP=471, BOT=757, 0, 400)
Touch Pin Wiring XP=6 XM=A1 YP=A2 YM=7
LANDSCAPE CALIBRATION    400 x 240
x = map(p.y, LEFT=471, RT=757, 0, 400)
y = map(p.x, TOP=536, BOT=259, 0, 240)


meme arduino que ci dessus, mais ecran different

const int XP=7,XM=A2,YP=A1,YM=6; //240x400 ID=0x7793
const int TS_LEFT=500,TS_RT=469,TS_TOP=745,TS_BOT=665;
PORTRAIT CALIBRATION     240 x 400
x = map(p.x, LEFT=500, RT=469, 0, 240)
y = map(p.y, TOP=745, BOT=665, 0, 400)
Touch Pin Wiring XP=7 XM=A2 YP=A1 YM=6
LANDSCAPE CALIBRATION    400 x 240
x = map(p.y, LEFT=745, RT=665, 0, 400)
y = map(p.x, TOP=469, BOT=500, 0, 240)


Faut il prendre les valeurs Max, Median,min  ?

Faut il étalonner chaque ecran ?

 

Comme c'est une fonction map, j'aurais tendance a préconiser les valeurs Min et Max, mais il faut voir en situation.

 

Orientation:

when in portrait orientation row 0, col 0; row 0 col 1; row 0, col 2 .... etc
then when changed to landscape mode the col's become rows and rows become cols


Problème de qualité de fabrication ?

Les coordonnées px ne sont pas stable ni dans le temps, ni en fonction du matériel, ni ne fonction de la source d'alimentation électrique

 

Du coup ce ne sera pas facile d'industrialiser

A chaque ecran, arduino, il faudra refaire l'etalonnage.

on a jusqu'a 20 pixels de variations sur les coordonnées p.X

 

 

puis un autre ecran, meme arduino

puis un autre arduino, meme ecran

puis meme arduino, meme ecran, mais sur batterie externe au lieu de l'alim PC



partie du code clé :

 
    bool pressed = (p.z > 180 && p.z < 1200);
    //Serial.println(p.z);
    if (pressed) {
        pixel_y = map(p.x,170, 900, 0, 240); //.kbv makes sense to me
        pixel_x = map(p.y, 170, 930, 0, 400);
         Serial.println(p.z);

 

obtenu par echantillonnage tres long, car pas vraiment celles fournies par le programme ci dessus !

 

demonstration

Ce n'est pas ma vidéo, mais celle existante de l’exécution du programme de calibrage de la librairie MCUFriend



les videos smartpoker pour le smartplayer

Mode texte : Affiche le libelle de la touche pressée.

Mode calculatrice

Le changement entre les 3 ecrans actuellement disponibles.

les libellés ou le nombre d’écrans pourront changer en fonction des besoins car je n'ai pas finalisé le code.



Le code

Attention ce code ne contient que la gestion de l’écran.

il ne contient pas la gestion de la RFID, ni des accès Wifi via ESP01

 

Vous remarquerez que je n'ai pas utilisé la fonction map pour le touch, mais une série imbriquée de switch, parce que les valeurs ne sont pas homogènes d'un bout à l'autre de l’écran

 

Les valeurs stables sont les colonnes, par contre les lignes....

 

Chaque ecran etant différent, il faudra un programme par ecran !

Télécharger
smartpoker-MEGA-V6.2_TFT_4.pdf
Document Adobe Acrobat 244.3 KB