Ardu? No! ≫ PxGraph ≫ Référence ≫ MTobjects ≫ Gestion des zones cliquables ≫ MTpushZone ≫ MTpushZone: Exemple 2

MTpushZone: Exemple 2
zones dynamiques

Bibliothèque graphique pour shield Uno/Mega

Ce programme permet de tester trois zones à cliquer, avec une déclaration dynamique. Avec ce type de déclaration, on dispose d'un pointeur sur l'objet (la zone à cliquer) et on peut donc libérer cette zone (avec delete), réaffecter le pointeur à une autre zone, de faire cette déclaration dans setup ou dans loop, d'utiliser une boucle pour l'initialisation...

Bien entendu, comme pour tous les exemples, il faut changer PxGraph_ILI9341_Shield en PxGraph_ST7781_Shield si le driver est un ST7781.

// Ce progrmme permet de mettre en place trois boutons poussoirs simples qui
// incrémentent un compteur. Leur déclaration est dynamique.
// Le premier bouton compte de 1 en 1, le deuxième de 5 en 5 et le troisième
// de 10 en 10


#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


// Mise en place d'un touchpad résistif pour la mise à jour des coordonnés
MTtouchPadShield TouchPad;


// Fonction d'affichage des boutons
void dessine(boolean appui, int xMini, int yMini, int xMaxi, int yMaxi) // Si on appuie
{
  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
  }
}

// Effets des boutons: incrémentation et affichage du compteur
word compteur;
void ajoute(word nombre) // Affichage du compteur
{ 
  fillRect(20, 60, 200, 95, BLACK);
  setTextCursor(20, 60);
  text(String(nombre));
}
// Incrémantation du compteur
void ajoute1(void) { ajoute(++compteur); } // Ajoute 1
void ajoute5(void) { ajoute(compteur += 5); } // Ajoute 5
void ajoute10(void) { ajoute(compteur += 10); } // Ajoute 10

// Mise en place des trois boutons, déclaration dynamique
// Cela permet de libérer un bouton, d'en changer en cours de programme...
// Les pointeurs sont déclarés ici, mais on peut les affecter en divers endroits.
// Pour l'exemple, on les a définis en trois endroits différents
// Le premier est déclaré et affecté avant le setup
MTpushZone *Bouton1 = new MTpushZone(270, 40, 309, 79, dessine, ajoute1); // En haut
MTpushZone *Bouton2; // Au milieu, sera affecté dans le setup
MTpushZone *Bouton3; // En bas, sera affecté dans loop


// Initialisation
void setup()
{
  Bouton2 = new MTpushZone(270, 120, 309, 159, dessine, ajoute5); // Zone au milieu

  setGraphMode(PAYSAGE); // Initialisation de la bibliotèque graphique 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);
  text(F("Appuyez sur les trois boutons"));
  setTextCursor(250, 55); // Légende pour le premier bouton
  text("+1");
  setTextCursor(245, 135); // Légende pour le deuxième bouton
  text("+5");
  setTextCursor(238, 215); // Légende pour le troisième bouton
  text("+10");

  setTextSize(5); // Pour les affichages du compteur
  setTextCursor(20, 60); // Premier affichage du compteur
  text("0");
}


void loop()
{
  // Affectation de la dernière zone qui existera 3 secondes
  Bouton3 = new MTpushZone(270, 200, 309, 239, dessine, ajoute10); // Zone en bas
  delay(3000);

  // Libération de l'affectation pendant 3 secondes
  rect(270, 200, 309, 239, BLACK); // Efface graphiquement le bouton
  delete Bouton3; // Détruit le bouton
  delay(3000);
}