Arduino LCD Shield je rozšiřovací modul pro Arduino. Tento shield obsahuje TFT displej, který je dotykový a na úhlopříčku měří 2,4 palce. Rozlišení tohoto displeje je 320 x 240 pixelů. Dotyková vrstva je rezistivního typu, je tedy možné snímat vždy pouze jeden dotyk. Na modulu se také nachází čtečka paměťových karet microSD. Rozměry LCD Shieldu jsou 72 x 52 x 12 mm. Shield je díky rozložení pinů kompatibilní s Arduino deskami UNO a MEGA2560, ale u desky Mega může být problém s ovládáním čtečky karet kvůli jinému zapojení SPI sběrnice. Tlačítko, které se nachází na horní straně displeje, je propojeno s Resetem Arduina.

Schéma zapojení Arduino Shield LCD TFT 2.4

Pro úspěšné propojení LCD Shieldu s Arduino deskou stačí zapojit Shield do Arduina. Shield využívá většinu pinů Arduina, takže je nutné s tímto počítat. Tento návod neukazuje práci s čtečkou paměťových karet, kterou si můžete prohlédnout v tomto návodu, přičemž pin CS je na tomto Shieldu připojen na D10.

Schéma zapojení Arduino Shield LCD TFT 2.4

Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovny SWTFT-Shield a Adafruit-GFX, návod, jak na to je uveden zde. Ukázkový kód obsahuje na svém začátku připojení knihoven pro displej a dotykovou vrstvu a dále nastavení propojovacích pinů. Poté nastavíme rozsah hodnot pro obě osy dotykové vrstvy a také nadefinujeme několik základních barev, které budou využity v ukázkách. Pokud byste chtěli přidat vlastní barvy, stačí jejich RGB tvar zakódovat dle existujících definic barev. Následuje inicializace LCD displeje a dotykové vrstvy. V podprogramu setup jako první zahájíme komunikaci s displejem a dále nastavíme chování displeje. Jako první můžeme nastavit rotaci displeje v rozmezí 0-3, kde tyto hodnoty odpovídají otočení o 0, 90, 180 a 270 stupňů. Dále příkazem fillScreen vyplníme celý displej barvou v závorce (zde černá) a následně si nastavíme kurzor do levého horního rohu (souřadnice 0,0). Následují příkazy pro nastavení barvy a velikosti textu a ukázky tisknutí textu na displej v různých velikostech. V nekonečné smyčce loop si vždy v prvním kroku načteme do proměnné nazvané bod souřadnice dotyku na dotykové vrstvě. Poté následuje if podmínka, která kontroluje z načtené hodnoty tlaku na dotykové ploše, jestli nebyl detekován dotek a v případě splnění této podmínky provede následující ukázky různých funkcí. Po nastavení pinů jako výstupních pro řízení LCD displeje je zde jako první vykreslení plného obdélníku na místo výpisu hodnot doteku, aby bylo toto místo na displeji vždy vymazáno před vytištěním údajů. Jako další se vykreslí červeně obrys obdélníka níže pro simulaci tlačítka a poté následují funkce pro kreslení vodorovných a svislých čar. Po těchto krocích jsou na displej vytištěny údaje o posledním doteku a pro zprovoznění tlačítka je uvedena if funkce, která v podmínkách obsahuje rozsah souřadnic x a y. Tyto čísla byly zjištěny jednoduchým způsobem, kdy stačí na displeji vykreslit chtěný obrazec, poté zjistit dotykem údaje o levém horním a pravém dolním rohu a tyto hodnoty zapsat do podmínek if funkce. Když je pak detekován dotyk v tomto obrazci, je pro ukázku vypsána informace o stisku uvnitř objektu a v opačném případě se vyplní obrazec opět černou barvou. Na konci programu se nachází už jen krátké zpoždění pro správnou funkci displeje.

// Shield LCD TFT 2.4" displej dotykový

// připojení potřebných knihoven
#include "SWTFT.h"
#include "TouchScreen.h"

// nastavení propojovacích pinů dotykové vrstvy
#define YP A1
#define XM A2
#define YM 7
#define XP 6

// rozsah hodnot pro obě osy dotykové vrstvy
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940

// nastavení různých barev pro výpis na displej
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

// inicializace LCD displeje z knihovny
SWTFT displej;
// inicializace řadiče dotykové vrstvy z knihovny,
// poslední číslo 470 označuje odpor měřený mezi piny XP a XM
TouchScreen dotyk = TouchScreen(XP, YP, XM, YM, 470);

void setup() {
  // zahájení komunikace s displejem
  displej.begin();
  // pro otočení displeje stačí změnit číslo
  // v závorce v rozmezí 0-3
  displej.setRotation(0);
  // vyplnění displeje černou barvou
  displej.fillScreen(BLACK);
  // nastavení kurzoru na souřadnice x,y
  displej.setCursor(0, 0);
  displej.setTextColor(WHITE);
  // velikost textu lze nastavit změnou čísla v závorce
  displej.setTextSize(1);
  // funkce pro výpis textu na displej,
  // print tiskne na řádek stále za sebou,
  // println na konci textu přeskočí na nový řádek
  displej.println("Dotykovy displej");
  displej.setTextSize(3);
  displej.println("2.4 TFT LCD");
  displej.setTextSize(2);
  displej.println("navody.");
  displej.println("dratek.cz");
}

void loop() {
  // načti do proměnné bod souřadnice dotyku
  TSPoint bod = dotyk.getPoint();
  // pokud je detekován dotyk na displeji,
  // tedy tlak větší než 0, proveď následující
  if (bod.z) {
    // zpětné nastavení pinů jako výstupních
    // pro řízení LCD displeje
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
    // funkce pro vykreslení plného obdélníku,
    // zadání (výchozí bod x, výchozí bod y,
    // velikost hrany na ose x, velikost hrany na ose y,
    // barva obdélníku)
    displej.fillRect(115, 100, 100, 50, BLACK);
    // funkce pro vykreslení obrysu obdélníku,
    // zadání (výchozí bod x, výchozí bod y,
    // velikost hrany na ose x, velikost hrany na ose y,
    // barva obsysu obdélníku)
    displej.drawRect(20, 200, 100, 100, RED);
    // funkce pro vykreslení vodorovné čáry,
    // zadání (výchozí bod x, výchozí bod y,
    // délka čáry, barva čáry)
    displej.drawFastHLine(10, 90, 220, BLUE);
    // funkce pro vykreslení svislé čáry,
    // zadání (výchozí bod x, výchozí bod y,
    // délka čáry, barva čáry)
    displej.drawFastVLine(110, 90, 100, GREEN);
    displej.setCursor(0, 100);
    displej.setTextColor(WHITE);
    displej.setTextSize(2);
    // vypsání informací o souřadnicích posledního dotyku
    // včetně tlaku dotyku
    displej.print("   Tlak = ");
    displej.print(bod.z);
    displej.println(",");
    displej.print("Sour. x = ");
    displej.print(bod.x);
    displej.println(",");
    displej.print("Sour. y = ");
    displej.print(bod.y);
    displej.println();
    // pokud je detekován stisk uvnitř červeného obdélníku,
    // vypiš do obdélníku text Stisk!,
    // jinak vyplň obdélník černou barvou
    if (bod.x > 640 & bod.x < 840 & bod.y > 560 & bod.y < 870 ) {
      displej.setCursor(35, 240);
      displej.print("Stisk!");
    } else {
      displej.fillRect(35, 210, 80, 80, BLACK);
    }
  }
  delay(1);
}

Po nahrání ukázkového kódu do Arduino desky s připojeným LCD Shieldem dostaneme například tento výsledek:

Schéma zapojení Arduino Shield LCD TFT 2.4

Arduino LCD Shield je pěkný ovládací prvek pro různé projekty. Díky dobrému rozlišení a přítomnosti dotykové vrstvy se tak hodí do mnoha projektů, například jako ovládací panel, vstupní terminál či informační displej. Drobnou nevýhodou je dle mého názoru nedostupnost ostatních pinů Arduina, kdy displej společně s dotykovou vrstvou a čtečkou karet zabírá jejich většinu. Výhodou ale zůstává skvělý poměr cena/výkon a jednoduché propojení s Arduinem.

 

Seznam použitých komponent:

https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html

https://dratek.cz/arduino/1568-shield-lcd-tft-2-4-displej-dotykovy-pro-arduino-uno-1487762760.html

 

EDIT: Pokud máte Shield zakoupený z eshopu dratek.cz a po nahrání programu máte stále bílou obrazovku, dostal se k Vám kus s jiným řadičem. Pro základní otestování můžete vyzkoušet jednoduchý test, který je ke stažení v záložce Datasheety u Shieldu na stránce produktu. Komplexní návod pro tento jiný řadič doplníme co nejdříve!

FB tw

Další podobné články