MTpushZone: Exemple 3
classe dérivée
Bibliothèque graphique pour shield Uno/Mega
Ce programme permet de tester trois zones à cliquer, avec une classe dérivée. Cela permet de redéfinir le comportement de la zone à cliquer. Un clic va incrémenter le compteur et va colorier la zone. La légende (valeur d'incrémentation) est mise aussi en place à l'instanciation du bouton. L'instanciation doit donc être faite après l'initialisation graphique de la carte et cela nous force presque à utiliser des instances dynamiques. On aurait pu déclarer les boutons statiquement en initialisant la carte dans le constructeur si cela n'a pas été déjà fait avant.
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 permet de mettre en place trois boutons poussoirs simples qui
// incrémentent un compteur.
// Le premier bouton compte de 1 en 1, le deuxième de 5 en 5 et le troisième
// de 10 en 10
// On redéfinit une classe pour les boutons. Les valeurs d'incrémentations
// étant du texte, doivent être appelées après setGraphMode. On instanciera
// donc les boutons dans le setup.
#include <MTobjects.h> // V1.2.1 Voir http://arduino.dansetrad.fr/MTobjects
#include <PxGraph_ILI9341_Shield.h> // V1.0.0 Voir http://arduino.dansetrad.fr/PxGraph_ILI9341_Shield
// Effets des boutons: incrémentation et affichage du compteur
word compteur;
void ajoute(word nombre) // Affichage du compteur
{
compteur += nombre;
fillRect(20, 60, 200, 95, BLACK);
setTextCursor(20, 60);
text(String(compteur));
}
class Bouton: public MTpushZone // Nouvelle classe pour redéfinir son comportement
{
public:
Bouton(int x1, int y1, int x2, int y2, word increment): MTpushZone(x1, y1, x2, y2), // constructeur, on copie la classe mère
MTincrement(increment)
{
setTextCursor(x1-32, y1+15); // Légende pour le bouton
text("+");
text(String(increment));
}
virtual void onDraw(boolean appui, int xMini, int yMini, int xMaxi, int yMaxi) // Nouveau comportement pour dessiner
{
if (appui) // Si le stylet vient juste d'être appuyé dans la bonne zone
fillRect(xMini+1, yMini+1, xMaxi-1, yMaxi-1, RED); // Pavé en rouge
else
{ // Le stylet vient juste d'être soulevé ou est sorti de la zone
rect(xMini, yMini, xMaxi, yMaxi, WHITE); // Pavé couleur du fond d'écran
fillRect(xMini+1, yMini+1, xMaxi-1, yMaxi-1, BLACK); // Utile lors de l'initialisation
}
}
virtual void onSelect() // Nouveau comportement si on le sélectionne
{
ajoute(MTincrement);
}
protected:
word MTincrement; // Nombre à ajouter en cas de clic
}; // Ne pas oublier le ; à la fin de la déclaration d'une classe
// Déclaration des trois boutons
Bouton *Bouton1; // En haut
Bouton *Bouton2; // Au milieu
Bouton *Bouton3; // En bas
// Mise en place d'un touchpad résistif pour la mise à jour des coordonnés
MTtouchPadShield TouchPad;
// Initialisation
void setup()
{
setGraphMode(PAYSAGE); // Initialisation de la bibliothèque graphique de l'écran
// Mise en place des trois boutons
Bouton1 = new Bouton(270, 40, 309, 79, 1); // En haut
Bouton2 = new Bouton(270, 120, 309, 159, 5); // Au milieu
Bouton3 = new Bouton(270, 200, 309, 239, 10); // En bas
// 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);
setTextCursor(0, 0); // Premier affichage du compteur
text(F("Appuyez sur les trois boutons"));
setTextSize(5); // Pour les affichages du compteur
setTextCursor(20, 60); // Premier affichage du compteur
text("0");
}
void loop(){}