#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);
}
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT