Skip to content

Instantly share code, notes, and snippets.

@ypelletier
Created August 13, 2025 18:18
Show Gist options
  • Select an option

  • Save ypelletier/976d126f3416f840ba883e58302e1420 to your computer and use it in GitHub Desktop.

Select an option

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.
/****************************************************************************
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