0

Dotykový 2,4″ TFT LCD displej

V tomto krátkém návodu si ukážeme, jak zprovoznit shield s dotykovým 2,4″ TFT LCD displejem s řadičem ILI9325/ILI9335, který jde zakoupit zde.

tft1 tft3 tft2

Tento displej zde budeme zprovozňovat pomocí knihoven Adafruit_GFX, Adafruit_TFTLCD a Adafruit_TouchScreen. Nejprve potřebujeme stáhnout ZIP archivy těchto knihoven. Toto uděláme rozkliknutím odkazu, kliknutím na tlačítko „Clone or download“ a následným vybráním možnosti „Download as ZIP“.

Dále je potřeba knihovny importovat do Arduino IDE. Vyberte v menu Sketch -> Include library -> Add .ZIP Library.

Do nového projektu vložte následující kód (můžete i do stávajícího). Uložte projekt a nahrajte ho do Arduina.

Kód by měl být dostatečně okomentován na to, aby šlo lehce pochopit, co který řádek dělá.

Ještě je důležité dodat, že se tento shield vyskytuje ve dvou verzích s různě zapojeným dotykem, toto lze překonfigurovat přehozením p.y a p.x ve funkcích map() a doladěním hodnot ve funkci map, aby byl dotyk přesný.

#include <Adafruit_GFX.h> // Zakladni graficka knihovna
#include <Adafruit_TFTLCD.h> // Hardwarove specificka knihovna
#include <TouchScreen.h>

// Definice pinu
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

#define YP A1 
#define XM A2
#define YM 7
#define XP 6

// Definice barev
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF

// tvorba objektu
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

void setup(void) {
 Serial.begin(9600);
 Serial.println("Test TFT LCD");

 tft.reset();

 uint16_t identifier = tft.readID(); // zjisteni ID tft (zde je radic ILI9325). Velikost displeje je 240x320.
 tft.begin(identifier);

 // nastaveni rotace LCD. Horni levy roh bude u USB konektoru Arduina.
 tft.setRotation(1);

 // smazani LCD a vypis nejakeho textu
 tft.fillScreen(BLACK);
 tft.setCursor(20, 10);
 tft.setTextColor(WHITE);
 tft.setTextSize(3);
 tft.println("Test TFT LCD");
 tft.setTextColor(MAGENTA);
 tft.setTextSize(2);
 tft.println("Funguje to");

 // ukazka kresleni
 tft.drawRect(50, 180, 40, 40, GREEN); // X pozice, Y pozice, X velikost, Y velikost, barva
 tft.drawCircle(100, 180, 20, RED); // X poz., Y poz., polomer, barva
 tft.drawTriangle(250, 60, 200, 100, 300, 100, BLUE); // X, Y pozice 3x + barva
 tft.drawLine(0, 230, 320, 230, YELLOW); // X, Y pozice 2x + barva

 tft.fillRect(50, 90, 40, 40, MAGENTA); // X pozice, Y pozice, X velikost, Y velikost, barva
 tft.fillCircle(100, 90, 20, CYAN); // X poz., Y poz., polomer, barva
 tft.fillTriangle(120, 100, 80, 130, 120, 130, GREEN); // X, Y pozice 3x + barva


}

void loop(void) {

 // zjisteni bodu dotyku, znovunastaveni pinu
 TSPoint p = ts.getPoint();
 pinMode(A1, OUTPUT);
 pinMode(A2, OUTPUT);

 // je-li stisknuty
 if (p.z > ts.pressureThreshhold) {
 // namapovani hodnot na X-Y na display, hodnoty X/Y jsou prohozene, displej mame otoceny!
 // tyto hodnoty neni spatne jeste doladit
 int posx = map(p.y, 940, 170, 0, 320);
 int posy = map(p.x, 900, 150, 0, 240);

 if (posx > 319) posx = 319;
 if (posy > 239) posy = 239;
 if (posx < 0) posx = 0;
 if (posy < 0) posy = 0;
 
 
 Serial.print(posx);
 Serial.print(" ");
 Serial.print(posy);
 Serial.print(" ");
 Serial.println(p.z);

 if (p.z < 300) // sila stisku - 0 pokud neni stisknuto, pri normalnim stisku paradoxne nizsi pri silnejsim stisku
 {
 tft.fillCircle(posx, posy, 3, RED); 
 }
 else
 {
 tft.fillCircle(posx, posy, 3, BLUE); 
 }
 
 }
}

 

Arduino Uno, Mega, Senzory, Moduly za

VÝHODNOU CENU

Saksun

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *