Retour

Démo d'affichage TFT ILI9341 — Graphismes et balle rebondissante sur Arduino

Introduction

Les affichages TFT couleur sont un excellent moyen d’ajouter un retour visuel riche à vos projets Arduino. Dans ce tutoriel, nous piloterons un TFT 240x320 basé sur ILI9341 en utilisant les bibliothèques Adafruit ILI9341 et Adafruit GFX. Vous apprendrez à câbler l’affichage, installer les bibliothèques nécessaires et écrire du code qui dessine des éléments d’interface statiques et anime une balle rebondissante. Tout cela s’exécute directement dans votre navigateur avec le simulateur Velxio — aucun matériel requis !

Présentation du circuit

Commençons par examiner le circuit. Le schéma est simple : un Arduino Uno communique avec l’affichage ILI9341 via SPI (Serial Peripheral Interface).

Schéma du circuit de l'affichage TFT sur le canevas du simulateur Velxio

Voici la liste complète des connexions :

Broche Arduino UnoBroche TFT ILI9341Couleur du fil
13 (SCK)SCKOrange
11 (MOSI)MOSIOrange
10 (CS)CSBleu
9 (D/C)D/CVert
8 (RST)RSTRouge
7 (LED)LEDBlanc
5VVCC(non montré, supposé)
GNDGND(non montré, supposé)

Aucun composant externe n’est requis — l’affichage fonctionne en logique 5V (la plupart des modules ILI9341 tolèrent le 5V) et les broches SPI sont connectées directement.

Présentation du code

Plongeons maintenant dans le code. Nous utiliserons la bibliothèque Adafruit ILI9341 ainsi que la bibliothèque Adafruit GFX pour les primitives graphiques. Ces bibliothèques doivent être installées via le Gestionnaire de bibliothèques.

Fenêtre du Gestionnaire de bibliothèques montrant les bibliothèques utilisées par l'affichage TFT

Ouvrez le Gestionnaire de bibliothèques (Outils > Gérer les bibliothèques) et recherchez “Adafruit ILI9341” et “Adafruit GFX Library”. Installez les deux. La bibliothèque SPI est incluse automatiquement.

Voici le code complet :

// TFT ILI9341 Display Demo (240x320)
// Library: Adafruit ILI9341 + Adafruit GFX
// Connect: CS=10, DC/RS=9, RST=8, LED=7, MOSI=11(SPI), SCK=13(SPI)

#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <SPI.h>

#define TFT_CS   10
#define TFT_DC    9
#define TFT_RST   8
#define TFT_LED   7

Adafruit_ILI9341 tft(TFT_CS, TFT_DC, TFT_RST);

// Background color: blue (visible on dark simulator canvas)
#define BG_COLOR 0x001F

// Ball state
int ballX = 120, ballY = 200;
int ballDX = 3, ballDY = 2;
const int BALL_R = 10;

// Play-field boundaries
const int FX = 5, FY = 110, FW = 230, FH = 200;

void drawStaticUI() {
  tft.fillScreen(BG_COLOR);

  // Title
  tft.setTextSize(3);
  tft.setTextColor(tft.color565(255, 220, 0));
  tft.setCursor(20, 10);
  tft.print("VELXIO TFT");

  // Subtitle
  tft.setTextSize(2);
  tft.setTextColor(tft.color565(180, 180, 255));
  tft.setCursor(30, 50);
  tft.print("ILI9341 Demo");

  // Color palette bars
  tft.fillRect(10, 82, 70, 18, tft.color565(220, 50, 50));
  tft.fillRect(85, 82, 70, 18, tft.color565(50, 200, 50));
  tft.fillRect(160, 82, 70, 18, tft.color565(50, 100, 240));

  // Play-field border
  tft.drawRect(FX, FY, FW, FH, tft.color565(80, 80, 130));
}

void setup() {
  pinMode(TFT_LED, OUTPUT);
  digitalWrite(TFT_LED, HIGH);

  tft.begin();
  drawStaticUI();
}

void loop() {
  // Erase old ball
  tft.fillCircle(ballX, ballY, BALL_R, BG_COLOR);

  // Update position
  ballX += ballDX;
  ballY += ballDY;

  // Bounce off field borders
  if (ballX < FX + BALL_R + 1 || ballX > FX + FW - BALL_R - 1) ballDX = -ballDX;
  if (ballY < FY + BALL_R + 1 || ballY > FY + FH - BALL_R - 1) ballDY = -ballDY;

  // Draw ball
  tft.fillCircle(ballX, ballY, BALL_R, tft.color565(255, 140, 0));

  delay(30);
}

Points clés du code

Concepts clés pour les étudiants

  1. Communication SPI : L’affichage utilise SPI, un protocole série synchrone. L’Arduino est le maître, l’affichage est l’esclave. Seuls trois fils (SCK, MOSI, CS) sont nécessaires pour les données ; D/C et RST sont des lignes de contrôle supplémentaires.
  2. Primitives graphiques : La bibliothèque Adafruit GFX fournit des fonctions comme fillScreen(), fillRect(), drawRect(), fillCircle(), setCursor(), print() et setTextSize(). Elles facilitent le dessin de formes et de texte.
  3. Double tampon (concept) : Nous effaçons l’ancienne balle avant d’en dessiner une nouvelle. Cela évite les traînées. Dans des projets plus avancés, vous pourriez utiliser un tampon d’image.
  4. Détection de collision : La logique de la balle rebondissante vérifie si le centre de la balle se trouve à moins de BALL_R pixels du bord. Si c’est le cas, la direction est inversée.
  5. Profondeur de couleur : L’ILI9341 supporte 262K couleurs (18 bits), mais la bibliothèque utilise 16 bits (65K couleurs) pour la vitesse. color565() empaquette le RVB en bits 5-6-5.

Pièges courants et conseils de débogage

Extensions suggérées

Une fois la démonstration de base opérationnelle, essayez ces améliorations :

Essayez par vous-même !

Prêt à voir cela en action ? Ouvrez l’exemple en direct dans Velxio et appuyez sur le bouton Run.

Barre d'outils de l'éditeur Velxio avec les contrôles de compilation et d'exécution

Vous pouvez également explorer la barre d’outils du canevas pour zoomer, vous déplacer et inspecter la simulation.

Barre d'outils du canevas Velxio au-dessus de la fenêtre de simulation

Si vous souhaitez construire cela à partir de zéro, utilisez le sélecteur de composants pour ajouter un Arduino Uno et un affichage ILI9341.

Fenêtre du sélecteur de composants Velxio parcourant les pièces par catégorie

Cliquez sur le lien ci-dessous pour ouvrir l’exemple et commencer à expérimenter :

Ouvrir la démo d’affichage TFT ILI9341 sur Velxio

Bon code !


Partager sur :
David Montero

Écrit par

David Montero

Creator of Velxio, the open-source circuit and Arduino simulator.

GitHub velxio.dev

Articles liés


Article précédent
Afficheur LCD 20x4 avec Arduino — Hello World dans Velxio
Article suivant
Construisez un jeu Simon Says avec Arduino sur Velxio