isTouch, isTouchTrue

Définition Utilisation Exemple Côté technique
 

Le touchpad utilise les mêmes broches que l'afficheur. Pour utiliser le touchpad, il faut mettre l'écran hors communication (/CS=1). Dans cette bibliothèque, vu que le touchpad n'est pas l'organe principal, c'est l'écran qui est sélectionné en permanence par défaut. Plutôt que de sélectionner l'écran à chaque écriture, il reste en permanence sélectionné. Lors de l'appel à isTouch(), l'écran est désélectionné, isTouch() fait son travail, puis l'écran est sélectionné de nouveau.

Principe de lecture de l'abscisse du point de contact:
<-- Pour utiliser le touchpad, on alimente un film résistif recouvrant l'écran, par exemple en mettant son côté droit à la masse et son côté gauche à 5V. En appuyant avec le stylet, cela fait un contact avec un deuxième film résistif qui va donc être porté à une tension qui va dépendre du point d'appui. Pour un appui du côté droit, on aura des valeurs proches de 0V et pour un appui du côté gauche, on aura des valeurs avoisinant les 5V. Au milieu, ce sera des valeurs voisines de 2,5V. Ce deuxième film est relié à une entrée analogique et la valeur échantillonnée sera dépendante de l'abscisse. La valeur lue est comprise entre 100 et 900 environ.

--> Pour savoir si il y a contact ou pas, on peut alimenter un des côté du premier film en 0V et un des côté du deuxième en 5V. Si il n'y a pas de contact, les deux autres côtés des films seront respectivement à 0V et 5V. La différence est de 5V (1024 après échantillonnage. Si il y a contact parfait, les tensions sur les deux films au point seront égales, et la lecture des tensions sur les deux côtés non alimentés seront les mêmes (faible valeur après échantillonnage). Moins les contacts sont parfait, plus la différence de tension augmente, ce qui fait dire à certains que l'on peut avoir la valeur de la pression. Les essais que j'ai fait montent que cela dépend plus de la taille de la zone de contact que de la pression. Il y en a qui vont utiliser l'afficheur pour en faire une balance...

On pourrait se contenter d'utiliser la dernière méthode pour retourner true ou false pour isTouch(). Mais si la lecture de l'abscisse intervient trop tard, on risque de ne plus pouvoir lire une valeur correcte. On a un point de contact, mais on ne sait pas où! Pour éviter cela, je lis l'abscisse, si il y a contact, et l'ordonnée. Si il y a contact et si j'arrive à lire correctement les coordonnées trois fois de suite la même valeur, alors isTouch() retournera true, et les coordonnées seront prêtes. Mais suivant les écrans, il est possible qu'en faisant 15 boucles, je n'arrive pas à lire la bonne valeur. Si c'est utile, il suffit d'augmenter le nombre de boucles.

Le programme suivant va changer la couleur de l'écran quand il n'est pas appuyé (ou que l'on n'arrive pas à avoir une bonne lecture. Il y est écrit ici 50 boucles. On peut changer cette valeur. Si elle est trop faible, l'écran va changer sans arrêt de couleur. Dans certains programmes on se moque de ce "rebond", On peut decendre cette valeur. Dans d'autres ce peut être génant (par exemple si on utilise des boutons Check (bistables) qui à chaque appui vont s'activer et se désactiver plusieurs fois). Il faut alors prendre une valeur suffisnate.

PecheuxGraph.zip\PecheuxGraph\examples\Documentation\Exemple-501-isTouch.ino (dans votre fichier téléchargé):

// Ce programme fait clignotter l'écran tant qu'on n'appuie pas dessus

#include <PecheuxGraph.h>
void setup() 
{
  setGraphMode(PAYSAGE);
  text(F("Appuyez sur l'écran pour arrêter le clignottement"));
  setLimites(0,32,MAX_X,MAX_Y); // Limite l'effacement de l'écran en dessous du texte
}

void loop()
{
  while (isTouchTrue(50)); // Boucle tant qu'on appuie 
  // si on passe ici, c'est que l'on n'appuie plus
  clrscr(getDrawColor()); // Change la couleur du bas de l'écran
}