Indietro

Demo Display TFT ILI9341: Grafica e Palla Rimbalzante su Arduino

Introduzione

I display TFT a colori sono un modo fantastico per aggiungere un feedback visivo ricco ai tuoi progetti Arduino. In questo tutorial, piloteremo un TFT 240x320 basato su ILI9341 utilizzando le librerie Adafruit ILI9341 e Adafruit GFX. Imparerai come cablare il display, installare le librerie necessarie e scrivere codice che disegna elementi UI statici e anima una palla rimbalzante. Il tutto funziona direttamente nel tuo browser con il simulatore Velxio, senza bisogno di hardware!

Panoramica del Circuito

Iniziamo esaminando il circuito. Lo schema è semplice: un Arduino Uno comunica con il display ILI9341 tramite SPI (Serial Peripheral Interface).

Diagramma del circuito del display TFT sulla tela del simulatore Velxio

Ecco l’elenco completo dei collegamenti:

Pin Arduino UnoPin TFT ILI9341Colore Cavo
13 (SCK)SCKArancione
11 (MOSI)MOSIArancione
10 (CS)CSBlu
9 (D/C)D/CVerde
8 (RST)RSTRosso
7 (LED)LEDBianco
5VVCC(non mostrato, assunto)
GNDGND(non mostrato, assunto)

Non sono necessari componenti esterni: il display funziona a logica 5V (la maggior parte dei moduli ILI9341 tollera 5V) e i pin SPI sono collegati direttamente.

Panoramica del Codice

Ora immergiamoci nel codice. Utilizzeremo la libreria Adafruit ILI9341 insieme alla libreria Adafruit GFX per le primitive grafiche. Queste librerie devono essere installate tramite il Library Manager.

Finestra del Library Manager che mostra le librerie utilizzate dal display TFT

Apri il Library Manager (Strumenti > Gestione Librerie) e cerca “Adafruit ILI9341” e “Adafruit GFX Library”. Installa entrambe. La libreria SPI è inclusa automaticamente.

Ecco il codice completo:

// 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);
}

Punti Chiave nel Codice

Concetti Chiave per Studenti

  1. Comunicazione SPI: Il display utilizza SPI, un protocollo seriale sincrono. L’Arduino è il master, il display è lo slave. Solo tre fili (SCK, MOSI, CS) sono necessari per i dati; D/C e RST sono linee di controllo aggiuntive.
  2. Primitive Grafiche: La libreria Adafruit GFX fornisce funzioni come fillScreen(), fillRect(), drawRect(), fillCircle(), setCursor(), print() e setTextSize(). Queste rendono facile disegnare forme e testo.
  3. Doppio Buffer (Concetto): Cancelliamo la vecchia palla prima di disegnarne una nuova. Questo evita lo sbavamento. In progetti più avanzati, potresti usare un frame buffer.
  4. Rilevamento Collisioni: La logica della palla rimbalzante controlla se il centro della palla è entro BALL_R pixel dal bordo. Se sì, la direzione viene invertita.
  5. Profondità Colore: L’ILI9341 supporta 262K colori (18 bit), ma la libreria utilizza 16 bit (65K colori) per velocità. color565() impacchetta RGB in bit 5-6-5.

Errori Comuni e Suggerimenti per il Debug

Estensioni Suggerite

Una volta che la demo di base funziona, prova questi miglioramenti:

Provalo Tu Stesso!

Pronto a vederlo in azione? Apri l’esempio live in Velxio e premi il pulsante Run.

Barra degli strumenti dell'editor Velxio con controlli di compilazione ed esecuzione

Puoi anche esplorare la barra degli strumenti della tela per zoomare, spostarti e ispezionare la simulazione.

Barra degli strumenti della tela Velxio sopra il viewport di simulazione

Se vuoi costruirlo da zero, usa il selettore di componenti per aggiungere un Arduino Uno e un display ILI9341.

Finestra del selettore componenti Velxio che sfoglia parti per categoria

Clicca il link qui sotto per aprire l’esempio e iniziare a sperimentare:

Apri la Demo Display TFT ILI9341 su Velxio

Buon coding!


Condividi su:
David Montero

Scritto da

David Montero

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

GitHub velxio.dev

Articoli correlati


Articolo precedente
Display LCD 20x4 con Arduino: Hello World in Velxio
Articolo successivo
Costruisci un Gioco Simon Says con Arduino su Velxio