Volver

Demo de pantalla TFT ILI9341: Gráficos y pelota rebotante en Arduino

Introducción

Las pantallas TFT a color son una forma fantástica de añadir retroalimentación visual rica a tus proyectos con Arduino. En este tutorial, manejaremos un TFT basado en ILI9341 de 240x320 usando las librerías Adafruit ILI9341 y Adafruit GFX. Aprenderás a cablear la pantalla, instalar las librerías necesarias y escribir código que dibuje elementos de interfaz estáticos y anime una pelota rebotante. ¡Todo esto funciona directamente en tu navegador con el simulador Velxio, sin necesidad de hardware!

Recorrido del circuito

Empecemos examinando el circuito. El esquema es sencillo: un Arduino Uno se comunica con la pantalla ILI9341 a través de SPI (Interfaz Periférica Serie).

Diagrama del circuito de la pantalla TFT en el lienzo del simulador Velxio

Aquí está la lista completa de conexiones:

Pin de Arduino UnoPin de TFT ILI9341Color del cable
13 (SCK)SCKNaranja
11 (MOSI)MOSINaranja
10 (CS)CSAzul
9 (D/C)D/CVerde
8 (RST)RSTRojo
7 (LED)LEDBlanco
5VVCC(no mostrado, asumido)
GNDGND(no mostrado, asumido)

No se requieren componentes externos: la pantalla funciona con lógica de 5V (la mayoría de los módulos ILI9341 toleran 5V) y los pines SPI están conectados directamente.

Recorrido del código

Ahora profundicemos en el código. Usaremos la librería Adafruit ILI9341 junto con la librería Adafruit GFX para primitivas gráficas. Estas librerías deben instalarse a través del Gestor de Librerías.

Ventana del Gestor de Librerías mostrando las librerías usadas por la pantalla TFT

Abre el Gestor de Librerías (Herramientas > Gestionar Librerías) y busca “Adafruit ILI9341” y “Adafruit GFX Library”. Instala ambas. La librería SPI se incluye automáticamente.

Aquí está el código 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);
}

Puntos clave del código

Conceptos clave para estudiantes

  1. Comunicación SPI: La pantalla usa SPI, un protocolo serie síncrono. El Arduino es el maestro, la pantalla es el esclavo. Solo se necesitan tres cables (SCK, MOSI, CS) para los datos; D/C y RST son líneas de control adicionales.
  2. Primitivas gráficas: La librería Adafruit GFX proporciona funciones como fillScreen(), fillRect(), drawRect(), fillCircle(), setCursor(), print() y setTextSize(). Facilitan el dibujo de formas y texto.
  3. Doble búfer (Concepto): Borramos la pelota vieja antes de dibujar la nueva. Esto evita manchas. En proyectos más avanzados, podrías usar un búfer de fotogramas.
  4. Detección de colisiones: La lógica de la pelota rebotante comprueba si el centro de la pelota está a menos de BALL_R píxeles del borde. Si es así, se invierte la dirección.
  5. Profundidad de color: El ILI9341 admite 262K colores (18 bits), pero la librería usa 16 bits (65K colores) por velocidad. color565() empaqueta RGB en bits 5-6-5.

Problemas comunes y consejos de depuración

Extensiones sugeridas

Una vez que tengas la demo básica funcionando, prueba estas mejoras:

¡Pruébalo tú mismo!

¿Listo para verlo en acción? Abre el ejemplo en vivo en Velxio y pulsa el botón Ejecutar.

Barra de herramientas del editor de Velxio con controles de compilación y ejecución

También puedes explorar la barra de herramientas del lienzo para hacer zoom, desplazarte e inspeccionar la simulación.

Barra de herramientas del lienzo de Velxio sobre la ventana de simulación

Si quieres construir esto desde cero, usa el selector de componentes para añadir un Arduino Uno y una pantalla ILI9341.

Selector de componentes de Velxio navegando por piezas por categoría

Haz clic en el enlace de abajo para abrir el ejemplo y empezar a experimentar:

Abrir Demo de Pantalla TFT ILI9341 en Velxio

¡Feliz programación!


Compartir en:
David Montero

Escrito por

David Montero

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

GitHub velxio.dev

Artículos relacionados


Artículo anterior
Pantalla LCD 20x4 con Arduino: Hola Mundo en Velxio
Artículo siguiente
Construye un juego de Simón Dice con Arduino en Velxio