MTtouchPadShield,
touchpad sur un shild Uno/Mega
Gestion par événements pour Uno, Nano, Mega
Un objet MTtouchPadShield gère un keypas résistif à 4 fils monté sur un shield.
Include à rajouter
#include <MTobjects.h> // Voir http://arduino.dansetrad.fr/MTobjects
Je conseille fortement de laisser le commentaire, si une autre personne voulait essayer le programme, elle aurait directement un lien de téléchargement. C'est valable pour toutes les bibliothèques que vous utilisez.
Commentaires utiles
essais_avant_abandon largeur_ecran screen_width hauteur_ecran screen_heigh x_gauche y_haut x_droite y_bas x_mini y_mini x_maxi y_maxi
Ces commentaires sont des mots que l'on peut rajouter n'importe où et qui sont ignorés par le compilateur.
Constructeur
MTtouchPadShield(onSelectFunction = PAS_D_ACTION, // Si on appuie sur la zone
onMoveFunction = PAS_D_ACTION, // Si a bougé
onUnselectFunction = PAS_D_ACTION, // Si n'appuie pas sur la zone
chouia = 3, // Erreur maximale pour consiérer si on a bougé ou pas
nbEssais = 15 essais_avant_abandon); // On lit 15 fois au maximum avant abandon
- onSelectFunction: ce qui se passe quand on appuie sur le touchpad
- PAS_D_ACTION → rien ne se passe
- fonction → appel d'une fonction "void fonction(int x, int y) {...}" Le paramètres passés sont les coordonnés du point de contact.
- onMoveFunction: ce qui se passe quand on bouge le poit de contact
- PAS_D_ACTION → rien ne se passe
- fonction → appel d'une fonction "void fonction(int x, int y) {...}" Le paramètres passés sont les coordonnés du point de contact.
- onUnselectFunction: ce qui se passe quand on vient de ne plus toucher le touchpad
- PAS_D_ACTION → rien ne se passe
- fonction: → appel d'une fonction "void fonction(void) {...}"
- chouia (int): valeur à partir de laquelle on dit qu'on a bougé
- nbEssais (byte): on recherche deux valeurs identiques; par défaut, au bout de 15 essais on abandonne si on n'a pas ces bonnes mesures. Dans la pratique 4 ou 5 suffisent.
On n'est pas obligé d'utiliser les fonctions onSelectFunction, onMoveFunction et onUnselectFunction. L'appel du constructeur met en place la lecture périodique du touchpad. On peut alors utiliser de façon traditionnelle MTtouchPad4wires.isTouch() pour savoir si on touche le toucpad, et MTtouchPad4wires.geX() et MTtouchPad4wires.getY() pour avoir les coordonnés.
Si chouia vaut 1, du fait du bruit sur la lecture, il y aura une mise à jour des coordonnés et un appel à onMoveFunction même sans déplacement. Avec la valeur 3, il faudra un tout petit déplacement, ce qui est fort utile si on utilise le stylet pour dessiner. Une valeur plus importante, est intéressante si l'écran est constitué de boutons, un déplacement sur un bouton n'a pas d'effet. Avec 1024, on ne tient plus compte des dépalcements. Seul le premier point de contact est pris en compte.
Calibration
Si on ne calibre pas le touchpad, getX et getY retournent les valeurs lues par le convertisseur (entre 0 et 1024). On peut donc parfaitement utiliser le touchpad sans calibrage. Mais ce dernier permet aux fonctins d'utiliser les coordonnées de notre choix, en particulier les coordonnées écran. Il faut donc spécifier les valeurs min et max que l'on attend des conversions, et le type d'orientation voulu (PAYSAGE, PORTRAIT, PORTRAIT_INVERSE ou PAYSAGE_INVERSE). En effet suivant les modes l'axe Xdu touchpad correspond à l'axe X de l'écran ou à l'axe Y, et la croissance du CAN indique une valeur de x ou y croissante ou décroissante.
Les fonctions getX ou getY de l'objet MTtouchPad4wires ont besoin du résultat du calibrage, mais celui-ci est facile à faire si on a une bibliothèque graphique sous la main. C'est pourquoi les exemples de calibrages sont aussi donnés ave la librairie graphique PxGraph, même si MTtouchPad4wires et calibrate appartiennent à Mtobjets et pas à PxGraph.
calibrate(rotation, // Portrait ou paysage, inversé ou non
largeurEcran = 0, hauteurEcran = 0, // Dimension de l'écran, largeur>hauteur. Par exemple 320 et 240
gauche = 0, haut = 0, // Valeurs minis du retour du CAN
droit = 0, bas = 0); // Valeurs maxis du retour du CAN
- rotation (byte): mettre PAYSAGE, PORTRAIT, PORTRAIT_INVERSE ou PAYSAGE_INVERSE
- largeurEcran hauteurEcran (int): mettre par exemple 320 et 240.
- gauche, haut, droit et bas (int): doivent correspondre aux valeurs lues mini et maxi du convertisseur.
Fonctions utiles
boolean isTouch(void); int getX(void); int getY(void);
isTouch: renvoie true si un stylet est appuyé sur le touchpad
getX: renvoie l'abscisse du point touché
getY: renvoie l'ordonnée du point touché
Pour éviter que isTouch() renvoie true, et que le stylet soit soulevé avant de lire les valeurs des axes, l'appel à isTouch() va figer les valeurs retournées par ces trois fonctions, et l'appel à getY() va débloquer le tout et permettre un rafraichissement des valeurs. Il faut donc appeler ces fonctions dans l'ordre.
Fonctions bonus
void setOnSelectFunction(void (*onSelectFunction)(int, int) = PAS_D_ACTION); void setOnMoveFunction(void (*onMoveFunction)(int, int) = PAS_D_ACTION); void setOnUnselectFunction(void (*onUnselectFunction)(void) = PAS_D_ACTION); void setChouia(word chouia); word getChouia(void); void setNbTries(byte nbEssais); byte getNbTries(void); void setRotation(byte rotation); word getRotation(void); int getWidth(void); int getHeight(void); int getTouchLeft(void); int getTouchHigh(void); int getTouchRight(void); int getTouchLow(void);
setOnSelectFunction: change la fonction appelée lors d'un appui
setOnSelectFunction: sans paramètres supprime la fonction appelée lors d'un appui
setMoveFunction: change la fonction appelée lors d'un déplacement
setMoveFunction: sans paramètres supprime la fonction appelée lors d'un déplacement
setOnUnselectFunction: change la fonction appelée lors du relâchement
setOnUnselectFunction: sans paramètres supprime la fonction appelée lors du relâchement
setChouia: permet de changer le paramètre chouia (voir constructeur de MTtouchPad4wires)
getChouia: permet de lire le paramètre chouia (voir constructeur de MTtouchPad4wires)
setNbTries: permet de changer le paramètre nbEssais (voir constructeur de MTtouchPad4wires)
getNbTries: permet de lire le paramètre nbEssais (voir constructeur de MTtouchPad4wires)
setRotation: permet de changer le paramètre rotation (voir calibrate)
getRotation: permet de lire le paramètre rotation (voir calibrate)
getWidth: permet de lire le paramètre largeur (voir calibrate)
getHeight: permet de lire le paramètre hauteur (voir calibrate)
getTouchLeft: permet de lire le paramètre gauche (voir calibrate)
getTouchHigh: permet de lire le paramètre haut (voir calibrate)
getTouchRight: permet de lire le paramètre droit (voir calibrate)
getTouchLow: permet de lire le paramètre bas (voir calibrate)
Exemples
Tests