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
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.
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.
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.
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 !
Ce n'est pas ma vidéo, mais celle existante de l’exécution du programme de calibrage de la librairie MCUFriend
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.
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 !