#include <Adafruit_GFX.h> // Inclut la bibliothèque graphique Adafruit GFX pour la gestion des graphiques
#include <Adafruit_ILI9341.h> // Inclut la bibliothèque Adafruit ILI9341 pour la gestion de l'écran TFT
#include <SPI.h> // Inclut la bibliothèque SPI pour la communication avec l'écran et d'autres périphériques
#include <Button.h> // Inclut la bibliothèque Button pour la gestion des boutons-poussoirs
#include <math.h> // Inclut la bibliothèque mathématique pour les fonctions trigonométriques
#define TFT_DC 2 // Broche pour le signal de commande (D/C) de l'écran TFT
#define TFT_CS 15 // Broche pour la sélection du chipset (CS) de l'écran TFT
#define BUTTON_SIN 16 // Broche pour le bouton-poussoir sin (exemple, vous pouvez choisir une autre broche)
#define BUTTON_COS 5 // Broche pour le bouton-poussoir cos (exemple, vous pouvez choisir une autre broche)
#define TFT_WIDTH 320
#define TFT_HEIGHT 240
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); // Crée un objet Adafruit_ILI9341 avec les broches définies ci-dessus
Button buttonSin(BUTTON_SIN); // Crée un objet Button pour le bouton sin
Button buttonCos(BUTTON_COS); // Crée un objet Button pour le bouton cos
void setup() {
Serial.begin(9600); // Démarre la communication série pour le débogage
tft.begin(); // Initialise la communication avec l'écran TFT
tft.setRotation(1); // Définit l'orientation de l'écran (0 signifie pas de rotation)
tft.fillScreen(ILI9341_BLACK); // Remplit l'écran avec la couleur noire
tft.setTextColor(ILI9341_WHITE); // Définit la couleur du texte en blanc
tft.setTextSize(2); // Définit la taille du texte comme 2 (relativement grande)
buttonSin.begin(); // Initialise le bouton sin
buttonCos.begin(); // Initialise le bouton cos
}
void loop() {
buttonSin.read(); // Lit l'état du bouton sin
buttonCos.read(); // Lit l'état du bouton cos
// Si le bouton sin est enfoncé, affiche le signal sin(x)
if (buttonSin.pressed()) {
Serial.println("Bouton sin enfoncé");
drawAxes(); // Dessine les axes X et Y
drawSinus(); // Dessine le signal sin(x)
delay(1000); // Délai pour éviter les rebonds
clearScreen(); // Efface l'écran
}
// Si le bouton cos est enfoncé, affiche le signal cos(x)
if (buttonCos.pressed()) {
Serial.println("Bouton cos enfoncé");
drawAxes(); // Dessine les axes X et Y
drawCosinus(); // Dessine le signal cos(x)
delay(1000); // Délai pour éviter les rebonds
clearScreen(); // Efface l'écran
}
}
// Dessine les axes X et Y
void drawAxes() {
// Dessine l'axe X (horizontal)
tft.drawLine(0, TFT_HEIGHT / 2, TFT_WIDTH - 1, TFT_HEIGHT / 2, ILI9341_WHITE); // Dessine une ligne horizontale bleue
// Dessine l'axe Y (vertical)
tft.drawLine(TFT_WIDTH / 2, 0, TFT_WIDTH / 2, TFT_HEIGHT - 1, ILI9341_WHITE); // Dessine une ligne verticale blanche
}
// Dessine le signal sin(x)
void drawSinus() {
float yPrev, yCurr;
yPrev = sin(0) * (TFT_HEIGHT / 4) + TFT_HEIGHT / 2;
for (float x = 0; x < TFT_WIDTH; x += 0.05) {
yCurr = sin(2 * PI * x / TFT_WIDTH) * (TFT_HEIGHT / 4) + TFT_HEIGHT / 2;
tft.drawPixel(x, yCurr, ILI9341_GREEN);
yPrev = yCurr;
}
}
// Dessine le signal cos(x)
void drawCosinus() {
float yPrev, yCurr;
yPrev = cos(0) * (TFT_HEIGHT / 4) + TFT_HEIGHT / 2;
for (float x = 0; x < TFT_WIDTH; x += 0.05) {
yCurr = cos(2 * PI * x / TFT_WIDTH) * (TFT_HEIGHT / 4) + TFT_HEIGHT / 2;
tft.drawPixel(x, yCurr, ILI9341_RED);
yPrev = yCurr;
}
}
// Efface l'écran
void clearScreen() {
tft.fillRect(0, 0, TFT_WIDTH, TFT_HEIGHT, ILI9341_BLACK);
}