MTtouchPadShield: Exemple 6
Chouia
Bibliothèque graphique pour shield Uno/Mega
Pour éviter que une très légère erreur de lecture (bruit, erreur de conversion...) soit considérée comme un déplacement, il faut que la nouvelle lecture s'écarte d'un chouia. Si ce chouia est petit, un léger mouvement sera pris en compte. Cela est intéressant si on souhaite faire un dessin. Par contre si on utilise le stylet pour des butons poussoirs, un chouia important évitera une interruption pour des déplacements. Avec un chouia de 1024 on ne peut plus voir de déplacements. Seul le premier pointage est pris en compte.
Si on dessine avec un chouia important, le tracé ne va changer que si le déplacement est grand. On aura alors un dessin avec des segments de droite. Le programme vous permet de dessiner avec chouia de 1, 2, 4, 8, 16, ... 1024.
Bien entendu, comme pour tous les exemples, il faut changer PxGraph_ILI9341_Shield en PxGraph_ST7781_Shield si le driver est un ST7781.
// Ce programme teste la fonction setChouia() et getChouia() de l'objet
// MTtouchPadR.
// Si deux mesures successives d'abscisse et d'ordonnées du CAN (entre 0 et
// 1023) sont égales à un chouia près, on ne met pas à jour la nouvelle
// valeur. Avec un écran de 320 pixels de large, le chouia par défaut 3
// correspond à 1 pixel. Il serait inutile de déclencher une lise à jour, un
// dessin pour le même pixel. Pour dessiner, un chouia de 3 est très bien.
// Si on veut plutôt tester un bouton, un chouia de 1000 ou plus déclenchera
// une action lors de l'appui, mais pas du déplacement.
//
// Dans le programme qui suit si chouia augmente on va avoir des droites au
// lieu de points car si on a fait une mesure, il faut que l'on soit loin
// pour avoir une nouvelle valeur
//
// Il faudra adapter les fonctions graphiques à votre bibliothèque préférée.
#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
boolean crayonLeve; // true si on a levé le stylet
void select(int x, int y)
{
fillRect(x-2, y-2, x+2, y+2, RED); // Dessine un pavé
line(x, y, x, y, WHITE); // Prépare lineTo
crayonLeve = false;
}
void unSelect()
{
crayonLeve = true;
}
void move(int x, int y)
{
if (crayonLeve) select(x, y); // Si on laisse le crayon baissé quand on change chouia
lineTo(x, y); // Dessine un ligne Jusqu'à...
}
MTtouchPadShield TouchPad(select, move, unSelect);
// Mise en place d'une horloge pour changer le chouia toutes les 5 secondes
void change(void)
{
TouchPad.setChouia(TouchPad.getChouia() << 1); // Chouia double à chaque fois
if (TouchPad.getChouia() > 2000) TouchPad.setChouia(1);
clrscr(); // Effacer l'écran
text("\nLe chouia vaut "); // Affichage sur l'écran
text(String(TouchPad.getChouia())); // Affichage de la valeur numérique
Serial.print("\nLe chouia vaut "); // Affichage sur l'écran
Serial.println(TouchPad.getChouia()); // Affichage de la valeur numérique
crayonLeve = true;
}
MTclock Metronme(5000 milli_secondes, change);
// Initialisation
void setup()
{
Serial.begin(115200);
setGraphMode(PAYSAGE); // Initialisation de l'écran
// La ligne suivante doit être corrigée par le résultat de l'étalonnage (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);
TouchPad.setChouia(2000); // Pour commencer à 1
change();
crayonLeve = true;
}
void loop(){}
Résultat:
Si chouia vaut 1:
Si chouia vaut 2:
Si chouia vaut 4:
Si chouia vaut 8:
Si chouia vaut 16:
Si chouia vaut 32:
Si chouia vaut 64:
Si chouia vaut 128:
Si chouia vaut 256:
Si chouia vaut 512:
Si chouia vaut 1024: