Uruchomienie wyświetlacza dotykowego 2.4″ TFT LCD SHIELD

Projekt zrealizowany przez użytkownika @mati_atv

Rys. 1. Interfejs użytkownika na ekranie dotykowym TFT LCD z trzema przyciskami: TAK (zielony), NIE (czerwony) oraz Mati_ATV (niebieski). Wyświetlacz zamontowany na płytce zgodnej z Arduino UNO.

Opis projektu

Prezentowany projekt pokazuje, jak w prosty sposób wykorzystać kolorowy, dotykowy wyświetlacz TFT do stworzenia interaktywnego interfejsu na platformie zgodnej z Arduino UNO. Dzięki bibliotece MCUFRIEND_kbv umożliwiającej obsługę grafiki oraz TouchScreen i Adafruit_GFX_Button zarządzającym ekranem dotykowym i przyciskami, sekcja sprzętowa i programowa łączy się w spójny system. W pierwszej części projektu omawiamy sposób podłączenia modułu LCD do Arduino, precyzując funkcje linii danych, sygnałów sterujących i zasilania.

Następnie prezentujemy kod źródłowy, w którym definiujemy piny dotykowe, inicjalizujemy ekran i przyciski graficzne („TAK”, „NIE” oraz „Mati_ATV”), a także implementujemy funkcje rysowania tekstu wyśrodkowanego – w jednej lub dwóch liniach. Główna pętla programu na bieżąco odczytuje dotyk, aktualizuje stan przycisków i reaguje na interakcje użytkownika, automatycznie przywracając ekran podstawowy po 5 sekundach bez aktywności.

Rys.2. Płytka zgodna z Arduino UNO użyta w projekcie – model ELEGOO UNO R3
Rys.3. Wyświetlacz dotykowy TFT LCD 2,4″ zamontowany bezpośrednio na płytce zgodnej z Arduino UNO jako nakładka typu shield. Ekran jest w stanie spoczynku, bez wyświetlanych danych.
Rys.4. Widok od spodu modułu 2,4″ TFT LCD Shield. Widoczne piny sygnałowe, gniazdo karty microSD oraz oznaczenia linii danych i zasilania ułatwiające podłączenie do Arduino.
Rys.5. Widok z boku na moduł TFT LCD zamontowany na płytce zgodnej z Arduino UNO. Widoczne złącza cyfrowe i stabilne osadzenie shielda w listwach pinowych.
Wideo. 1. Przedstawia działanie programu sterującego ekranem dotykowym TFT LCD — użytkownik może wybrać jedną z opcji („TAK”, „NIE”, „Mati_ATV”), a ekran reaguje odpowiednim komunikatem tekstowym.


Podłączenie LCD do Arduino UNO

Pin Opis
LCD_RST Sygnał resetu magistrali LCD, poziom niski – reset
LCD_CS Sygnał wyboru układu LCD, poziom niski – aktywacja
LCD_RS Sygnał wyboru polecenia/danych (niski: polecenie, wysoki: dane)
LCD_WR Sygnał zapisu magistrali LCD
LCD_RD Sygnał odczytu magistrali LCD
GND Masa zasilania
5V Wejście zasilania 5 V
3V3 Wejście zasilania 3,3 V
LCD_D0 – LCD_D7 Linie danych 8-bitowe LCD (bit 0 … bit 7)
LCD_D2 Linia danych LCD, bit 2
SD_SS Sygnał wyboru układu SPI karty SD, poziom niski – aktywacja
SD_DI Sygnał MOSI magistrali SPI karty SD
SD_DO Sygnał MISO magistrali SPI karty SD
SD_SCK Sygnał zegara magistrali SPI karty SD


Kod programu:

Kod_lcd_sh


Wytłumaczenie kodu programu:

Inkluzje bibliotek

W tej sekcji znajdują się importy niezbędnych bibliotek do obsługi wyświetlacza TFT, grafiki i ekranu dotykowego.

Definicje i zmienne globalne

Definiujemy progi nacisku oraz piny podłączone do ekranu dotykowego, a także tworzymy obiekty i zmienne potrzebne w programie.

Funkcja pobierająca współrzędne dotyku

Odczytujemy surowe wartości z ekranu, sprawdzamy nacisk, a następnie mapujemy je na współrzędne pikselowe.

Funkcja do rysowania wyśrodkowanego tekstu (jedna linia)

Czyści górny pasek, ustawia czcionkę i wyśrodkowuje podany tekst.

Funkcja do rysowania wyśrodkowanego tekstu (dwie linie)

Podobnie jak wyżej, ale dzieli obszar paska na dwie części i wyświetla dwie linie tekstu.

Funkcja setup()

Inicjalizuje port szeregowy, wyświetlacz, przyciski oraz wyświetla ekran powitalny.

Główna pętla loop()

Odczytuje dotyk, aktualizuje stan przycisków, reaguje na naciśnięcia i automatycznie resetuje ekran po 5 sekundach bez aktywności.



    Co można dodać do projektu z ekranem dotykowym TFT?

    Projekt z kolorowym ekranem dotykowym oparty na bibliotece MCUFRIEND_kbv oraz przyciskach graficznych (Adafruit_GFX_Button) stanowi solidną bazę do dalszej rozbudowy. Poniżej przedstawiono propozycje technicznych usprawnień i dodatkowych funkcji, które mogą poszerzyć możliwości projektu.

    Propozycje usprawnień technicznych

    1. Kalibracja ekranu dotykowego
      Można zastosować funkcję kalibracji, która pozwoli użytkownikowi dopasować wartości p.x i p.y do rzeczywistych wymiarów ekranu. Wartości te można następnie zapisać do pamięci EEPROM.
    2. Zastąpienie delay() obsługą opartą o millis()
      Zamiast wprowadzać opóźnienia za pomocą funkcji delay(), można kontrolować czas działania programu na podstawie funkcji millis(). Umożliwia to wykonywanie wielu operacji równolegle bez zatrzymywania pętli loop().
    3. Obsługa stanu aplikacji
      Zamiast odliczać czas do automatycznego powrotu do ekranu głównego, można zastosować obsługę stanów. Każda akcja (np. wybranie opcji TAK) może prowadzić do innego widoku, a powrót do ekranu głównego może być realizowany za pomocą dodatkowego przycisku.
    4. Dodanie sygnału dźwiękowego
      Do projektu można dodać buzzer. Krótkie impulsy dźwiękowe mogą pełnić funkcję potwierdzenia interakcji z interfejsem dotykowym.

    Propozycje rozbudowy funkcjonalnej

    1. Menu wielostronicowe
      Można dodać obsługę wielu ekranów, np. z dodatkowymi opcjami, ustawieniami lub funkcjami edukacyjnymi. Przełączanie ekranów może odbywać się za pomocą przycisków lub gestów.
    2. Obsługa dłuższego naciśnięcia (long press)
      Można rozróżniać krótkie i długie przytrzymanie przycisku, przypisując im różne funkcje. Przykładowo, krótkie naciśnięcie może wywoływać jedną akcję, a dłuższe – drugą, bardziej zaawansowaną.
    3. Tryb oszczędzania energii
      W przypadku braku aktywności przez określony czas można wyświetlić komunikat „Dotknij, aby wznowić” lub wygasić ekran. Funkcja ta pozwala na oszczędzanie energii, zwłaszcza w projektach zasilanych bateryjnie.