MTtouchPadShield: Exemple 7
Conflits
Bibliothèque graphique pour shield Uno/Mega
Avec le shield, les broches pour l'écran et le touchpad sont partagées. Si on ne gère pas les deux en même temps, et que l'on fait par exemple une lecture de l'écran en même temps qu'une lecture du touchpad, les informations des deux lectures vont se chevaucher, et la lecture d'un point de l'écran sera erronnée. Le touchpad étant lu par interruption, cela peut arriver pendant la lecture de l'écran, et les données ne serone pas remises à jour parceque la lecture du touchpad ne peut avoir l'historique précédent. Dans le cas d'une lecture, la lecture de l'écran, la lecture du touchpad est annulée. Comme elle se fait toutes les 16ms, le touchpad sera lu avec un petit retard. En principe, on ne passe pas son temps à lire l'écran et tout va bien. Dans le programme qui suit, on passe justement son temps à lire l'écran sans que l'on s'apperçoive que la lecture du touchpad en souffre.
Si on est en train d'écrire dans l'écran, la lecture du touchpad va finir l'écriture de l'écran et entammer sa lecture. Il n'y a ainsi pas de problème.
// Ce programme passe son temps à lire et écrire des pixels en permanence. On
// voit que cela ne gène pas les lecture du keyPad qui sont visualiées par un
// dessin du tracé en rouge, pendant que le fond est mobile entre le vert et
// le bleu (tâches de Martin).
// On ne gère pas le levé du stylet pour ne pas alourdir le code
#include <MTobjects.h> // V1.2.0 Voir http://arduino.dansetrad.fr/MTobjects
#include <PxGraph_ILI9341_Shield.h> // V1.0.0 Voir http://arduino.dansetrad.fr/PxGraph_ILI9341_Shield
// Mise en place du touchpad résistif
MTtouchPadShield TouchPad;
void setup()
{
Serial.begin(115200);
setGraphMode(PAYSAGE); // Initialisation de l'écran graphique
// La ligne suivante doit être corrigée par le résultat de l'étallonnage (Exemple-600-Etalonnage-shield)
TouchPad.calibrate(PAYSAGE, largeur_ecran 320, hauteur_ecran 240, x_gauche 941, y_haut 924, x_droite 135, y_bas 305);
}
void loop()
{
// Tâches de martin et affichage des coordonnés du touchpad
for (int x=0; x<LARGEUR; x++)
{
// Tâches de martin (juste pour faire des lectures et des écritures vertes et bleues)
for (int y=0; y<HAUTEUR; y++) point(x,y,((getPoint((x+LARGEUR-1)%LARGEUR,y)+getPoint((x+1)%LARGEUR,y)+getPoint(x,(y+HAUTEUR-1)%HAUTEUR)+getPoint(x,(y+1)%HAUTEUR))>>2)+30);
// Affichage des coordonnés du touchpad par un tracé rouge
if (TouchPad.isTouch()) lineTo(TouchPad.getX(), TouchPad.getY(), RED); // Une seule courbe continue, même si on lève le stylet
}
}