Zurück

TFT ILI9341 Display Demo: Grafik & Bouncing Ball auf Arduino

Einleitung

Farb-TFT-Displays sind eine fantastische Möglichkeit, Ihren Arduino-Projekten reichhaltige visuelle Rückmeldungen hinzuzufügen. In diesem Tutorial steuern wir ein 240x320 ILI9341-basiertes TFT mit den Bibliotheken Adafruit ILI9341 und Adafruit GFX. Sie lernen, wie Sie das Display verdrahten, die erforderlichen Bibliotheken installieren und Code schreiben, der statische UI-Elemente zeichnet und einen springenden Ball animiert. All dies läuft direkt in Ihrem Browser mit dem Velxio Simulator – keine Hardware erforderlich!

Schaltungsdurchlauf

Beginnen wir mit der Untersuchung der Schaltung. Der Schaltplan ist unkompliziert: Ein Arduino Uno kommuniziert mit dem ILI9341-Display über SPI (Serial Peripheral Interface).

Schaltplan des TFT-Displays auf der Velxio Simulator-Leinwand

Hier ist die vollständige Verdrahtungsliste:

Arduino Uno PinTFT ILI9341 PinKabelfarbe
13 (SCK)SCKOrange
11 (MOSI)MOSIOrange
10 (CS)CSBlau
9 (D/C)D/CGrün
8 (RST)RSTRot
7 (LED)LEDWeiß
5VVCC(nicht gezeigt, angenommen)
GNDGND(nicht gezeigt, angenommen)

Es sind keine externen Komponenten erforderlich – das Display arbeitet mit 5V-Logik (die meisten ILI9341-Module sind 5V-tolerant) und die SPI-Pins sind direkt verbunden.

Code-Durchlauf

Tauchen wir nun in den Code ein. Wir verwenden die Bibliothek Adafruit ILI9341 zusammen mit der Bibliothek Adafruit GFX für Grafikprimitive. Diese Bibliotheken müssen über den Bibliotheksverwalter installiert werden.

Bibliotheksverwalter-Modal mit den vom TFT-Display verwendeten Bibliotheken

Öffnen Sie den Bibliotheksverwalter (Werkzeuge > Bibliotheken verwalten) und suchen Sie nach “Adafruit ILI9341” und “Adafruit GFX Library”. Installieren Sie beide. Die SPI-Bibliothek wird automatisch mitgeliefert.

Hier ist der vollständige Code:

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

Wichtige Punkte im Code

Wichtige Konzepte für Studierende

  1. SPI-Kommunikation: Das Display verwendet SPI, ein synchrones serielles Protokoll. Der Arduino ist der Master, das Display der Slave. Für Daten werden nur drei Leitungen (SCK, MOSI, CS) benötigt; D/C und RST sind zusätzliche Steuerleitungen.
  2. Grafikprimitive: Die Bibliothek Adafruit GFX bietet Funktionen wie fillScreen(), fillRect(), drawRect(), fillCircle(), setCursor(), print() und setTextSize(). Diese machen das Zeichnen von Formen und Text einfach.
  3. Doppelpufferung (Konzept): Wir löschen den alten Ball, bevor wir den neuen zeichnen. Dies verhindert Verschmieren. In fortgeschritteneren Projekten könnten Sie einen Framebuffer verwenden.
  4. Kollisionserkennung: Die Logik des springenden Balls prüft, ob sich der Mittelpunkt des Balls innerhalb von BALL_R Pixeln vom Rand befindet. Wenn ja, wird die Richtung umgekehrt.
  5. Farbtiefe: Der ILI9341 unterstützt 262K Farben (18-Bit), aber die Bibliothek verwendet aus Geschwindigkeitsgründen 16-Bit (65K Farben). color565() packt RGB in 5-6-5 Bits.

Häufige Fallstricke & Debugging-Tipps

Vorgeschlagene Erweiterungen

Sobald die grundlegende Demo läuft, versuchen Sie diese Verbesserungen:

Probieren Sie es selbst aus!

Bereit, es in Aktion zu sehen? Öffnen Sie das Live-Beispiel in Velxio und klicken Sie auf die Schaltfläche Ausführen.

Velxio Editor-Symbolleiste mit Kompilieren- und Ausführen-Steuerelementen

Sie können auch die Leinwand-Symbolleiste erkunden, um zu zoomen, zu schwenken und die Simulation zu inspizieren.

Velxio Leinwand-Symbolleiste über dem Simulations-Viewport

Wenn Sie dies von Grund auf neu erstellen möchten, verwenden Sie die Komponentenauswahl, um einen Arduino Uno und ein ILI9341-Display hinzuzufügen.

Velxio Komponentenauswahl-Modal zum Durchsuchen von Teilen nach Kategorie

Klicken Sie auf den untenstehenden Link, um das Beispiel zu öffnen und mit dem Experimentieren zu beginnen:

TFT ILI9341 Display Demo auf Velxio öffnen

Viel Spaß beim Programmieren!


Teilen auf:
David Montero

Geschrieben von

David Montero

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

GitHub velxio.dev

Ähnliche Artikel


Vorheriger Artikel
LCD 20x4 Display mit Arduino: Hello World in Velxio
Nächster Artikel
Baue ein Simon-Says-Memory-Spiel mit Arduino auf Velxio