Ardu? No!MTobjectsPour les cartes graphiques ≫ MTtouchPadShield

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

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

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