Created
August 13, 2025 18:23
-
-
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.
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
| /**************************************************************************** | |
| 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