Skip to content

Instantly share code, notes, and snippets.

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

  • Save ypelletier/38802c72cd465b26c3df01d85b3b6686 to your computer and use it in GitHub Desktop.

Select an option

Save ypelletier/38802c72cd465b26c3df01d85b3b6686 to your computer and use it in GitHub Desktop.
On affiche sur l'écran TFT l'état d'une entrée numérique de l'Arduino Uno.
/****************************************************************************
On affiche sur l'écran TFT l'état d'une entrée numérique de l'Arduino Uno.
(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
******************************************************************************/
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#define TFT_CS 10
#define TFT_DC 9
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
#define numeroBroche 6 // on utilise la broche 6 comme entrée
bool precedent = 0; // état précent de l'entrée
void dessineLed (bool allumee) {
int largeur = 101, hauteur = 80, x = 120, y = 140;
float angle;
if (allumee) {
// le sommet recourbé
tft.fillCircle(x, y, largeur / 2 - 1, ILI9341_RED);
tft.drawCircle(x, y, largeur / 2, ILI9341_WHITE);
// on efface la moitié du bas
tft.fillRect(x - largeur / 2 , y, largeur, hauteur, ILI9341_BLACK);
// le corps cylindrique
tft.drawRect(x - largeur / 2 , y, largeur, hauteur, ILI9341_WHITE);
tft.fillRect(x - largeur / 2 + 1, y, largeur - 2, hauteur - 1, ILI9341_RED);
// la base
tft.fillRect(x - largeur / 2 - 5, y + hauteur - 1, largeur + 10, 20, ILI9341_RED);
tft.drawRect(x - largeur / 2 - 5, y + hauteur - 1, largeur + 10, 20, ILI9341_WHITE);
//rayons:
angle = 0.5;
tft.drawLine(x + (largeur / 2 + 20) * cos(angle) , y - (largeur / 2 + 20) * sin(angle), x + (largeur / 2 + 50) * cos(angle), y - (largeur / 2 + 50) * sin(angle), ILI9341_WHITE);
angle = 1;
tft.drawLine(x + (largeur / 2 + 20) * cos(angle) , y - (largeur / 2 + 20) * sin(angle), x + (largeur / 2 + 50) * cos(angle), y - (largeur / 2 + 50) * sin(angle), ILI9341_WHITE);
angle = 1.57;
tft.drawLine(x + (largeur / 2 + 20) * cos(angle) , y - (largeur / 2 + 20) * sin(angle), x + (largeur / 2 + 50) * cos(angle), y - (largeur / 2 + 50) * sin(angle), ILI9341_WHITE);
angle = 2.1;
tft.drawLine(x + (largeur / 2 + 20) * cos(angle) , y - (largeur / 2 + 20) * sin(angle), x + (largeur / 2 + 50) * cos(angle), y - (largeur / 2 + 50) * sin(angle), ILI9341_WHITE);
angle = 2.6;
tft.drawLine(x + (largeur / 2 + 20) * cos(angle) , y - (largeur / 2 + 20) * sin(angle), x + (largeur / 2 + 50) * cos(angle), y - (largeur / 2 + 50) * sin(angle), ILI9341_WHITE);
}
else { // LED éteinte
tft.fillRect(0 , 0, 320, 240, ILI9341_BLACK); // pour effacer le précédent
// le sommet recourbé
tft.drawCircle(x, y, largeur / 2, ILI9341_WHITE);
// on efface la moitié du bas
tft.fillRect(x - largeur / 2 , y, largeur, hauteur, ILI9341_BLACK);
// le corps cylindrique
tft.drawRect(x - largeur / 2, y, largeur, hauteur, ILI9341_WHITE);
// on efface le côté du bas
tft.drawFastHLine(x - largeur / 2, y, largeur, ILI9341_BLACK);
// la base
tft.drawRect(x - largeur / 2 - 5, y + hauteur - 1, largeur + 10, 20, ILI9341_WHITE);
}
}
void setup() {
tft.begin();
tft.fillScreen(ILI9341_BLACK);
pinMode(numeroBroche, INPUT);
dessineLed(0);
}
void loop() {
bool etat;
etat = digitalRead(numeroBroche);
if (etat != precedent) {
dessineLed(etat);
}
precedent = etat;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment