#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
// Broches de connexion SPI
#define TFT_CS 17
#define TFT_DC 15
#define TFT_RST 16
// Initialisation de l'écran TFT
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
// Joystick
#define JOYSTICK_X A1 // GP26
#define JOYSTICK_Y A0 // GP27
#define JOYSTICK_BTN 14 // Bouton du joystick
// Paramètres de l'écran et du carré
const int SCREEN_WIDTH = 240;
const int SCREEN_HEIGHT = 320;
const int SQUARE_SIZE = 20;
// Position initiale du carré
int x = SCREEN_WIDTH / 2;
int y = SCREEN_HEIGHT / 2;
// Vitesse de déplacement
const int SPEED = 5;
// Taille de la zone morte
const int DEAD_ZONE = 100; // Valeurs autour du centre à ignorer
void setup() {
// Initialisation de l'écran
tft.begin();
tft.setRotation(1); // Orientation paysage
tft.fillScreen(ILI9341_BLACK);
// Initialisation des broches du joystick
pinMode(JOYSTICK_BTN, INPUT_PULLUP);
// Dessiner le carré initial
drawSquare(x, y, ILI9341_RED);
}
void loop() {
// Lire les valeurs du joystick
int xVal = analogRead(JOYSTICK_X);
int yVal = analogRead(JOYSTICK_Y);
// Déplacement en X
int dx = 0;
if (abs(xVal - 512) > DEAD_ZONE) {
dx = map(xVal, 0, 1023, -SPEED, SPEED);
}
// Déplacement en Y
int dy = 0;
if (abs(yVal - 512) > DEAD_ZONE) {
dy = map(yVal, 0, 1023, SPEED, -SPEED);
}
// Effacer l'ancien carré
drawSquare(x, y, ILI9341_BLACK);
// Mettre à jour les positions
x = constrain(x + dx, 0, SCREEN_WIDTH - SQUARE_SIZE);
y = constrain(y + dy, 0, SCREEN_HEIGHT - SQUARE_SIZE);
// Dessiner le nouveau carré
drawSquare(x, y, ILI9341_RED);
// Détection du bouton (optionnel)
if (digitalRead(JOYSTICK_BTN) == LOW) {
tft.fillScreen(ILI9341_BLACK); // Réinitialisation de l'écran si bouton pressé
x = SCREEN_WIDTH / 2;
y = SCREEN_HEIGHT / 2;
drawSquare(x, y, ILI9341_RED);
}
delay(50); // Pause pour limiter la vitesse de rafraîchissement
}
void drawSquare(int x, int y, uint16_t color) {
tft.fillRect(x, y, SQUARE_SIZE, SQUARE_SIZE, color);
}