Created
August 13, 2025 18:18
-
-
Save ypelletier/976d126f3416f840ba883e58302e1420 to your computer and use it in GitHub Desktop.
Contrôle d'une LED à partir d'un bouton ON/OFF affiché sur l'écran tactile.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /**************************************************************************** | |
| Contrôle d'une LED à partir d'un bouton ON/OFF affiché sur le sheld TFT. | |
| (Arduino Uno et shield TFT/LCD 320 X 240) | |
| Tous les détails sur mon blog: | |
| https://electroniqueamateur.blogspot.com/2025/08/shield-tft-ecran-tactile-acceder-malgre.html | |
| ******************************************************************************/ | |
| //bibliothèques essentielles | |
| #include <Adafruit_GFX.h> | |
| #include <Adafruit_ILI9341.h> | |
| #include <Adafruit_TSC2007.h> | |
| // données pour la calibration du capteur tactile | |
| // varie légèrement d'un écran à l'autre | |
| #define TS_MINX 270 | |
| #define TS_MINY 270 | |
| #define TS_MAXX 3740 | |
| #define TS_MAXY 3600 | |
| #define TS_MIN_PRESSURE 200 | |
| #define TFT_CS 10 | |
| #define TFT_DC 9 | |
| Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); | |
| Adafruit_TSC2007 ts; | |
| const uint16_t nombreDeBoutons = 2; | |
| Adafruit_GFX_Button boutons[nombreDeBoutons]; | |
| const int numeroLED = 6; | |
| void setup() { | |
| Serial.begin(115200); // pour le débogage seulement | |
| tft.begin(); // démarrage de l'affichage à l'écran. | |
| if (!ts.begin()) { // démarrage du capteur tactile | |
| Serial.println("Probleme de demarrage du touch screen controller"); | |
| while (1); | |
| } | |
| Serial.println("Touchscreen en fonction"); | |
| pinMode(numeroLED, OUTPUT); // led branchée à la broche numeroLED | |
| digitalWrite(numeroLED, LOW); // au départ, la LED est éteinte | |
| tft.fillScreen(ILI9341_BLACK); // on remplit tout l'écran d'un fond noir | |
| // définition et affichage des 2 boutons | |
| const uint16_t xBouton [nombreDeBoutons] = { tft.width() / 2, tft.width() / 2 }; // coordonnée x du centre de chaque bouton | |
| const uint16_t yBouton [nombreDeBoutons] = { tft.height() / 3, 2 * tft.height() / 3 }; // coordonnée y du centre de chaque bouton | |
| const char texteBouton [nombreDeBoutons][10] = { "ON", "OFF" }; | |
| for (uint8_t i = 0; i < nombreDeBoutons; i++) { | |
| boutons[i].initButton(&tft, | |
| xBouton[i], // position x du centre du bouton | |
| yBouton[i], // position y du centre du bouton | |
| 100, // largeur du bouton | |
| 50, // hauteur du bouton | |
| ILI9341_WHITE, // couleur du contour | |
| ILI9341_RED, // couleur de remplissage | |
| ILI9341_GREEN, // couleur du texte | |
| texteBouton[i], // texte (dans le bouton) | |
| 2); // taille du texte | |
| boutons[i].drawButton(); | |
| } | |
| // on sélectionne le bouton OFF pour commencer | |
| boutons[1].drawButton(true); | |
| } | |
| void loop() { | |
| uint16_t x, y, z1, z2; | |
| // on vérifie si une touche à été détectée: | |
| if (ts.read_touch(&x, &y, &z1, &z2) && (z1 > TS_MIN_PRESSURE)) { | |
| // pour débogage: on affiche les cordonnées brutes dans le moniteur série: | |
| Serial.print("Coordonnees brutes: ("); | |
| Serial.print(x); Serial.print(", "); | |
| Serial.print(y); Serial.print(")"); | |
| // transposition des données brutes en coordonnées sur l'écran 240 X 320 pixels | |
| if (x < TS_MINX) { | |
| x = TS_MINX; | |
| } | |
| if (x > TS_MAXX) { | |
| x = TS_MAXX; | |
| } | |
| if (y < TS_MINY) { | |
| y = TS_MINY; | |
| } | |
| if (y > TS_MAXY) { | |
| y = TS_MAXY; | |
| } | |
| x = map(x, TS_MINX, TS_MAXX, 0, tft.width()); | |
| y = map(y, TS_MINY, TS_MAXY, 0, tft.height()); | |
| // pour débogage: on affiche les cordonnées converties dans le moniteur série: | |
| Serial.print(" Coordonnees converties: ("); | |
| Serial.print(x); Serial.print(", "); | |
| Serial.print(y); Serial.println(")"); | |
| // c'est le moment de vérifier si un des boutons a été cliqué, et de faire | |
| // ce qui doit être fait si un bouton a été cliqué. | |
| for (uint8_t i = 0; i < nombreDeBoutons; i++) { | |
| if (boutons[i].contains(x, y)) { | |
| //Serial.print("Bouton "); | |
| //Serial.println(i); | |
| boutons[i].press(true); // le bouton est mis en mode "appuyé" | |
| } else { | |
| boutons[i].press(false); // le bouton est mis en mode "non appuyé" | |
| } | |
| } | |
| for (uint8_t i = 0; i < nombreDeBoutons; i++) { | |
| if (boutons[i].isPressed()) { | |
| if (i == 0) { // bouton ON | |
| boutons[1].drawButton(false); //désélection du bouton OFF | |
| boutons[0].drawButton(true); //sélection du bouton ON | |
| digitalWrite(numeroLED, HIGH); // on allume la LED | |
| } | |
| else { | |
| boutons[0].drawButton(false); //désélection du bouton ON | |
| boutons[1].drawButton(true); //sélection du bouton OFF | |
| digitalWrite(numeroLED, LOW); // on éteint la LED | |
| } | |
| } | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment