2.8" TFT LCD érintőkijelző programozás - 1. rész

6. Projekt -- 2.8’ LCD kijelző modul programozás -- V1.1 -- 1.rész 

by Roboworld Hobbielektronika


Rövid leírás:

Ebben a rövid projektben bemutatjuk neked, hogyan kell Arduino-val egy 2.8’-os kijelzőt vezérelni. A kijelző egy úgynevezett Shield-re van ráhelyezve, amelyet elég egyszerűen lehet csatlakoztatni a mikrokontrollerhez. Lásd alábbi képek.
A turorialban megmutatjuk, hogyan kell a könyvtárakat hozzáadni az Arduino IDE-hez,illetve hogyan is kell a kijelzőhöz szöveget, színt, betűtípust, nyomógombot, hozzáadni valamint nyomóerőt mérni.

Hardware
-2.8’-os TFT LCD Shield érintő kijelző modul
-Arduino Uno


Kijelzőről

A kijelző egy 2.8 inch-es LCD TFT modul, amelyet egyszerűen rá kell pattintani az Arduino UNO-ra vagy Arduino MEGA-ra és betölteni a hozzá tartozó library-t.

Paramétereit tekintve :
· 240x320 pixel
· 4 vezetékes rezisztív érintőképernyő
· Fehér háttérvilágítás
· Színes (18-bit)
· 3.3V vagy 5V feszültséggel táplálható
· Támogatja 2GB-ig a microSD kártyát
· Méter: 7,8 x 5,3 cm

Kapcsolása lépésről lépésre :

1. lépés 



 2.lépés 
 

3.lépés


 4.lépés
5.lépés



A kijelző és az Arduino összepattintása után következzen a library-k hozzáadása.

 

Lépések:
1. Töltsd le TFT LCD kijelző library-ket a fenti link segítségével
2. Másold a könyvtárakat a computered dokumentumai közé.(Felhasználó/PC-neve/Dokumentumok/Arduino/libraries)
3. Kész, hozzáadás sikeres

Programozás és mintakód:

Most pedig jöjjön a mintakód amelyet a következő linkről tudsz letölteni.


Fontos tudni, hogy a fentebb hozzáadott könyvtárak (libraries) kisebb és nagyobb felbontású kijelzőkhöz is tökéletesen használhatóak, tehát, ha nem a leírásban említett kijelzőt használsz, akkor azt kalibrálni kell. Hogyan is lehet ezt megtenni?

Kalibrálás

Segítségül hívjuk a touchscreendemo.ino mintakódot. Ez fog nekünk segíteni bekalibrálni a kijelzőt. Esetünkben most ugyanazt a 2.8”-es TFT kijelzőt fogom újrakalibrálni. Először is töltsd fel ezt a fájlt az Arduino-ra és nyisd meg a Serial Monitor-t.

1. lépés

Kattints a bal felső sarokba a kijelzőn és nézd meg, hogy a Serial Monitoron milyen eredményt kaptál, ezáltal megkapod az X és az Y értékeit

Ha megvannak az X és Y értékek akkor nincs más hátra mint meg kell adni azt a saját programunknak.
X max értéke = TS_MAXX
Y max értéke = TS_MAXY







Az 942 helyére esetünkben most 932-kell beírni, míg a 890 helyett 897-et kell beírnunk. Ezzel kalibrálva a maximális X-Y értéket.

2. lépés

A kalibráció befejezéséhez meg kell adnunk a minimum értékeket is X-Y tengelyen. Az eljárás ugyan az lesz mint az első lépés által annyi különbséggel, hogy itt a jobb alsó sarokba kell majd kattintanunk.

Ha megvannak az X és Y értékek akkor nincs más hátra mint meg kell adni azt a saját programunknak.
X min értéke = TS_MINX
Y min értéke = TS_MINY





Az 122 helyére esetünkben most 123-kell beírni, míg a 111 helyett 128-et kell beírnunk. Ezzel kalibrálva a minimális X-Y értéket.

Kalibrálás kész.

A TFT LCD kijelző X és Y tengelyéről

A paramétereknél említésre került, hogy a kijelzőnk 320x240 felbontással rendelkezik. Az első pixel a bal felső sarokban 0,0 koordinátával helyezkedik el, míg a jobb alsó sarokban a 320x240 koordináta.
Tehát ha egy átlós vonalat szeretnénk húzni akkor :
pl: tft.drawLine(0, 0, 320 240,BLUE);
                          x0,y0,x1,y1, szín
 
 A drawline parancsnak megkell adni 2 pontot a kijelzőn és azok között húz egy vonalat, amely olyan színű amilyet beállítunk.

Mintakód


#include <Adafruit_TFTLCD.h> //******************** 
#include <Adafruit_GFX.h>       // Library-k használata 
#include <TouchScreen.h>         //******************** 

#define LCD_CS A3                        //********************** 
#define LCD_CD A2                       // 
#define LCD_WR A1                      //Pinek definiálása, amit az LCD használ 
#define LCD_RD A0                       // 
#define LCD_RESET A4                 //********************** 

#define TS_MINX 122                   //********************** 
#define TS_MINY 111                   //Itt találhatóak az értékek a kijelző kalibrálásához. 
#define TS_MAXX 942                  //Elég ha egyszer beírjuk a helyek értékeket, többször utána már nem kell. 
#define TS_MAXY 890                  //********************* 

#define YP A3                   //************************************ 
#define XM A2                 // 
#define YM 9                    //Érintőkijelző pinjeinek definiálása 
#define XP 8                     //************************************ 

#define BLACK   0x0000                //************************************ 
#define BLUE    0x001F                 // 
#define RED     0xF800                   // 
#define GREEN   0x07E0               // 
#define CYAN    0x07FF                //SZÍNEK definiálása 
#define MAGENTA 0xF81F         // 
#define YELLOW  0xFFE0             // 
#define WHITE   0xFFFF  s           //************************************ 

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); //TFT Library által definiált értékek, ezzel nincs dolgunk 
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 364);   //Érintőkijelző által definiált értékek, ezzel //nincs dolgunk 
boolean buttonEnabled = true;                                                 // nyomógomb engedélyezése, ha megnyomjuk a piros //gombot, //akkor kapunk egy üzenetet 

void setup() { 
tft.reset();                                                       // A kommunikáció indításához, először „reset”-jük a kijelzőt. 
uint16_t identifier = tft.readID(); 
tft.begin(identifier);            
tft.setRotation(1);                        //Forgathatod a kijelző tartalmát ha akarod. A forgatás paraméterei lehetnek: 0,1,2 3 
//amely 0,90,180,270 forgási szögeket jelentenek. Fontos! csak ezeket a számokat lehet //megadni, tehát 45 fokos kijelzésre nincs lehetőség 

tft.fillScreen(BLACK);                  //Kiszínezi az egész kijelzőt feketére 
tft.drawRect(0,0,319,240,YELLOW);      // Rajzol egy sárga keretet a kijelzőn 
// példa: tft.drawRect(X0,Y0,X1,Y1,SZÍN); 

tft.setCursor(110,10);                                  //X=110 Y=10 koordinátába helyezi a kurzort 
tft.setTextColor(WHITE);                          //Fehér szín kiválasztása 
tft.setTextSize(2);                                        //Betűméret kiválasztása 
tft.print("6.Project");                                 //”6. Project”-et kiírja a X=110 Y=10 helyen 
tft.setCursor(30,40);                                   // X=30 Y=40 
tft.setTextColor(WHITE);                          // Fehér szín kiválasztása 
tft.setTextSize(2);                                        // Betűméret kiválasztása 
tft.print("TFT LCD Erintokijelzo");          //"TFT LCD Erintokijelzo" kiírja az adott koordinátán 

tft.setCursor(115,80); 
tft.setTextColor(WHITE); 
tft.setTextSize(2); 
tft.print("Tutorial\n\n            by");          //  Kiírja hogy „Tutorial by”.  „ \n\n” azt eredményezi hogy a „by” szó másik                                                                     //sorba kerül  (\n--> new line) 

tft.setCursor(90,150); 
tft.setTextColor(BLUE); 
tft.setTextSize(2); 
tft.print("Roboworld.hu"); 

// Gomb megrajzolása 
tft.fillRect(50,180, 210, 40, RED);                            //Rajzol egy négyzetet (X0,Y0,négyzetszélesség,négyzetmagasság, szín) 
tft.drawRect(50,180,210,40,BLACK);                    //Rajzol egy keretet a négyzetre fekete színnel 
tft.setCursor(100,190);                                                              //X=100 Y=90 koordinátára helyezi a kurzort 
tft.setTextColor(WHITE);                                          //Fehér betűszín kiválasztása 
tft.setTextSize(2);                                                       //Betűméret kiválasztása 
tft.print("Nyomj meg!");                                          // Kiírja hogy „Nyomj meg!” 
} 

void loop() { 

TSPoint p = ts.getPoint();                                         //******************* 
// gombnyomás definiálása a kijelzőn. 
if (p.z > ts.pressureThreshhold) {                          //Ha megnyomjuk a gombot akkor a program megjelenít egy üzenetet 

p.x = map(p.x, TS_MAXX, TS_MINX, 0, 320);    // „map” funkciót használjuk annak érdekében,hogy azokat az értékeket //amelyeket a Touchscreen librarytől kapunk átkonvertálja pixeles //értékké. 
p.y = map(p.y, TS_MAXY, TS_MINY, 0, 240);   //ua. a művelet csak Y irányban 

if(p.x>60 && p.x<260 && p.y>180 && p.y<220 && buttonEnabled){ 

// A nyomógomb területének meghatározása pixelben, ha ezen a területen megnyomást érzékel akkor azt //gombnyomásnak tekinti. A programban szerepelt piros nyomógomb területe látható. 

buttonEnabled = false;             // A következő oldalon deaktiváljuk a megnyomást ezzel a sorral. 

pinMode(XM, OUTPUT);                        // Definiáltuk a pineket amiket a library kér 
pinMode(YP, OUTPUT);                          // Definiáltuk a pineket amiket a library kér 
  
tft.fillScreen(WHITE);                                               // Háttér fehér lesz 
tft.drawRect(0,0,319,240,YELLOW);    //Rajzol egy sárga négyzetet a képernyő sarkaiban. 
tft.setCursor(50,70);                                 //X=50 Y=70 koordinátához teszi a kurzort 
tft.setTextColor(BLACK);                        //Betűszín fekete 
tft.setTextSize(3);                                      //Betűméret 3 nagyságú 
tft.print(" Koszonom\n\n       hogy\n\n     megnyomtal");        // Kiírja az üzenetet. ha megszeretnéd változtatni //az üzenetet egyszerűen csak töröld ki és írd be a saját //szavad, mondatod 
}  
} 
} 
Letöltés
A projekthez tartozó linkek alább találhatóak.
Leírás : Itt található
Mintakód: Itt található
Library : Itt található

Megjegyzések