Mündəricat:

Dokunmatik Ekranlı Arduino: 16 Addım
Dokunmatik Ekranlı Arduino: 16 Addım

Video: Dokunmatik Ekranlı Arduino: 16 Addım

Video: Dokunmatik Ekranlı Arduino: 16 Addım
Video: Arduino'yla Dokunmatik & Renkli Ekran Kullanmak 2024, Noyabr
Anonim
Image
Image
Arduino Mega 2560
Arduino Mega 2560

Daha çox fərdi menyu və daha yaxşı insan/maşın interfeysləri yaratmaq istərdinizmi? Bu cür layihələr üçün Arduino və Dokunmatik Ekran istifadə edə bilərsiniz. Bu fikir cazibədar gəlirmi? Əgər belədirsə, bu gün videoya baxın, burada sizə Mega Arduino və Dokunmatik Ekranlı bir montaj göstərəcəyəm. Ekranda istədiyiniz dizaynları necə edəcəyinizi və ayrıca müəyyən bir əmrə toxunmaq və aktivləşdirmək üçün ekran bölgəsini necə təyin edəcəyinizi görəcəksiniz. Sancaqlar sayına görə Arduino Mega -dan istifadə etməyi seçdiyimi vurğulayıram.

Beləliklə, bu gün sizi Dokunmatik Ekran, qrafik funksiyaları və ekrandakı toxunma nöqtəsini necə tutacağınızla tanış edəcəyəm. Yerləşdirmə, yazı, şəkillər, rənglər və toxunma dizaynı kimi bütün elementləri ehtiva edən bir nümunə də yaradaq.

Addım 1: Arduino Mega 2560

Addım 2: TFT LCD Qalxanı 2.4"

TFT LCD Qalxanı 2.4
TFT LCD Qalxanı 2.4
TFT LCD Qalxanı 2.4
TFT LCD Qalxanı 2.4

Layihəmizdə istifadə etdiyimiz bu ekran maraqlı bir xüsusiyyətə malikdir: SD karta malikdir. Ancaq bununla əlaqədar yazılar və oxunuşlar tezliklə istehsal edəcəyim başqa bir videoda göstəriləcək. Bugünkü dərsimizin məqsədi bu ekranın qrafik və sensor ekran xüsusiyyətlərini xüsusi olaraq araşdırmaqdır.

Xüsusiyyətlər:

Ekran Ölçüsü: 2.4 düym

MicroSD kart yuvası

Rəngli LCD: 65K

Sürücü: ILI9325

Çözünürlük: 240 x 320

Toxunma ekranı: 4 telli rezistiv toxunma ekranı

İnterfeys: 8 bit məlumat, üstəgəl 4 nəzarət xətti

İşləmə gərginliyi: 3.3-5V

Ölçülər: 71 x 52 x 7 mm

Addım 3: Kitabxanalar

Kitabxanalar
Kitabxanalar

Kitabxanaları əlavə edin:

"Adafruit_GFX"

"SWTFT"

"Toxunma ekran"

Bağlantıları vurun və kitabxanaları yükləyin.

Faylı açın və Arduino IDE kitabxana qovluğuna yapışdırın.

C: / Proqram Faylları (x86) / Arduino / kitabxanaları

Qeyd

Proqramımıza başlamazdan əvvəl vacib bir şeyi həll etməliyik: TOUCH kalibrləmə.

Toxunma nöqtələrini ekranda görmək üçün sadə bir proqramdan istifadə edərək, nöqtələrin dəyərini (x, y) hər ucunda saxlayın (aşağıdakı şəkildə sarı rənglə vurğulanmışdır). Bu dəyərlər ekranın qrafik nöqtələrinə toxunmaq üçün vacibdir.

#include // portas de leitura das coordenadas do touchvoid #define YP A1 // Y+ Analog1-də var #define XM A2 // X- Analog2-də #define YM 7 // Y- Digital7-də #define XP 6 // X+ Digital6 -da var // TouchScreen -in bütün funksiyalarını yerinə yetirmək üçün TouchScreen ts = TouchScreen (XP, YP, XM, YM); void setup () {Serial.begin (9600); } void loop () {TSPoint touchPoint = ts.getPoint (); // pega o touch (x, y, z = pressao) Serial.print ("X:"); Serial.println (touchPoint.x); Serial.print ("Y:"); Serial.println (touchPoint.y); gecikmə (1000); }

Addım 4: Funksiyalar

İndi kitabxanaların bizə təklif edə biləcəyi bəzi qrafik funksiyalara nəzər salaq.

1. DrawPixel

DrawPixel funksiyası verilən nöqtədə ekranda bir nöqtənin rənglənməsindən məsuldur.

void drawPixel (int16_t x, int16_t və, uint16_t rəng);

2. drawLine

DrawLine funksiyası iki nöqtədən bir xətt çəkməkdən məsuldur.

void drawLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t rəng);

3. drawFastVLine

DrawFastVLine funksiyası bir nöqtədən və yüksəklikdən şaquli xətt çəkməkdən məsuldur.

void drawFastVLine (int16_t x, int16_t y, int16_t h, uint16_t rəng);

4. DrawFastHLine

DrawFastHLine funksiyası bir nöqtədən və endən üfüqi bir xətt çəkməkdən məsuldur.

void drawFastHLine (int16_t x, int16_t y, int16_t w, uint16_t rəng);

5. DrawRect

DrawRect funksiyası ekranda bir düzbucaq çəkməkdən, mənşə nöqtəsindən, hündürlüyündən və genişliyindən keçməkdən məsuldur.

void drawRect (int16_t x, int16_t y, int16_t w, int16_t h, uint16_t rəng);

6. doldurun Düzəldin

FillRect funksiyası drawRect ilə eynidir, lakin düzbucaq verilən rənglə doldurulacaq.

void fillRect (int16_t x, int16_t y, int16_t w, int16_t h, uint16_t rəng);

7. DrawRoundRect

DrawRoundRect funksiyası drawRect ilə eynidir, lakin düzbucağın kənarları yuvarlaqlaşdırılacaq.

void drawRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t rəng);

8. fillRoundRect

FillRoundRect funksiyası drawRoundRect ilə eynidir, lakin düzbucaq verilən rənglə doldurulacaq.

void fillRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t rəng);

9. drawTriangle

DrawTriangle funksiyası, 3 təpənin nöqtəsini keçərək ekranda üçbucaq çəkməkdən məsuldur.

void drawTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t rəng);

10. fillTriangle

FillTriangle funksiyası drawTriangle ilə eynidir, lakin üçbucaq verilən rənglə doldurulacaq.

void fillTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t rəng);

11. DrawCircle

DrawCircle funksiyası bir qaynaq nöqtəsindən və bir radiusdan bir dairə çəkməkdən məsuldur.

void drawCircle (int16_t x0, int16_t y0, int16_t r, uint16_t rəng);

12. fillCircle

FillCircle funksiyası drawCircle ilə eynidir, lakin dairə verilən rənglə doldurulacaq.

void fillCircle (int16_t x0, int16_t y0, int16_t r, uint16_t rəng);

13. fillScreen

FillScreen funksiyası ekranı tək rənglə doldurmaqdan məsuldur.

void fillScreen (uint16_t rəng);

14. setCursor

SetCursor funksiyası, kursoru müəyyən bir nöqtəyə yazmaq üçün yerləşdirməkdən məsuldur.

boşluq setCursor (int16_t x, int16_t y);

15. setTextColor

SetTextColor funksiyası yazılacaq mətnə rəng təyin etməkdən məsuldur. İstifadənin iki yolu var:

boşluq setTextColor (uint16_t c); // yalnız yazı rəngini təyin edirvoid setTextColor (uint16_t c, uint16_t bg); // yazı rəngini və fon rəngini təyin edin

16. setTextSize

SetTextSize funksiyası yazılacaq mətnə ölçü təyin etməkdən məsuldur.

boşluq setTextSize (uint8_t s);

17. setTextWrap

SetTextWrap funksiyası, ekranın həddinə çatdıqda xəttin qırılmasından məsuldur.

boşluq setTextWrap (boolean w);

18. setRotation

SetRotation funksiyası ekranı fırlatmaqdan məsuldur (mənzərə, portret).

void setRotation (uint8_t r); // 0 (standart), 1, 2, 3

Addım 5: Nümunə

Misal
Misal

Ekranın bizə verdiyi mənbələrin çoxunu istifadə edəcəyimiz bir proqram yaradacağıq.

Fərqli ölçülərdə bir neçə sətir yazaq, üç həndəsi fiqur yaradaq və onların üzərindəki toxunma hadisəsini götürək, hər dəfə fiqurlardan birinə toxunduqda, onların altındakı rəqəm adının rəyini alacağıq.

Addım 6: Kitabxanalar

Əvvəlcə istifadə edəcəyimiz kitabxanaları təyin edək.

#daxil edin // cavab yazın

#include // cavablandırın

#daxil edin // comunicação com göstərin

#daxil edin // comunicação com göstərin

#"math.h" daxil edin // hesablama potensiyası

Addım 7: Müəyyən edir

Sancaqlar üçün bəzi makroları və istifadə edəcəyimiz vacib dəyərləri təyin edəcəyik.

// Portas de leitura das coordenadas do touch #YP A1 müəyyən edin // Y+ #define XM A2 // X- #define YM 7 // Y- #depine XP 6 // X+ // valores encontrados através da calibração do touch // Fasa um código simples para impirir os valores (x, y) a cada toque // então encontre os valores son həddindən artıq/maksimum (x, y) #define TS_MINX 130 #define TS_MINY 80 #define TS_MAXX 900 #define TS_MAXY 900 // tamanho dos textos #dexine TEXT_SIZE_L 3 #dexine TEXT_SIZE_M 2 #dexine TEXT_SIZE_S 1 // posicionamento dos textos de feedback #define FEEDBACK_LABEL_X 10 #define FEEDBACK_LABEL_X 200 #defineFEFEFEFEFEFEFEFEFEFEF_FEED 10 #MAXPRESSURE 1000 təyin edin

Bəzi makroların tərifinə davam edirik.

// Associa o nome das cores aos valores muxbirləri #QARA müəyyən etmək 0x0000 #QIRMIZI təyin 0xF800 #YEŞİL 0x07E0 #Cefanı təyin et 0x07FF #SARI 0xFFE0 #Define WHITE 0xFFFF // dados de criaçdoco_doco_doco das de cia. const int dairə_x = 240; const int dairə_y = 125; // TouchScreen ilə əlaqəli hər hansı bir tədbir görmək mümkün deyil = TouchScreen (XP, YP, XM, YM); // SWTFT tft;

Addım 8: Quraşdırma

Quraşdırmada qrafik nəzarət obyektimizi işə salacağıq və ilk konfiqurasiyaları edəcəyik.

void setup () {Serial.begin (9600); // yenidən qurmaq üçün grafica tft.reset (); // idarəetmə sənədləri tft.begin (); gecikmə (500); // rotasiya və peyzaj tft.setRotation (1); // əvvəllər tft.fillScreen (QARA); // parametrlərin qurulması üçün ilk funksiyaların ayarlanması (); }

Addım 9: Döngə

Döngədə, ekrana toxunduğumuz nöqtəni götürəcəyik və toxunuşun rəqəmlərdən birində olub olmadığını görəcəyik.

void loop () {TSPoint touchPoint = ts.getPoint (); // touch touch (x, y, z = pressao) pinMode (XM, OUTPUT); pinMode (YP, ÇIXIŞ); // xəritənin toxunulmazlığı o (x, y) qrafiki // o dövrdə heç bir X peykinin qəbul edilməməsi və ya TSPoint p ilə əlaqəli peyzajların dəyişdirilməsi; p.x = xəritə (touchPoint.y, TS_MINY, TS_MAXY, 0, 320); p.y = xəritə (touchPoint.x, TS_MINX, TS_MAXX, 240, 0); // verifica se a pressão no toque foi suficiente if (touchPoint.z> MINPRESSURE && touchPoint.z <MAXPRESSURE) {// verifica se tocou no retangulo if (pointInRect (p)) {writeShape ("Rect"); } // verifica se tocou başqa heç bir üçlük yoxdursa (pointInsideTriangle (TSPoint (110, 150, 0), TSPoint (150, 100, 0), TSPoint (190, 150, 0), p)) {writeShape ("Üçbucaq"); } // verifica se tocou başqa heç bir sirkulo if if (pointInCircle (p)) {writeShape ("Circle"); }}}

Addım 10: Dairəyə toxunduğumuzu yoxlayın

Bu addımda ekranın başlanğıcı ilə məşğul oluruq və göstəriləcək mətnlərin rənglərini təyin edirik.

/ *İstifadəçilərə məlumat verilmir */ void initialSettings () {tft.setTextColor (BEYAZ); tft.setTextSize (TEXT_SIZE_S); tft.println ("ACESSE"); tft.setTextColor (SARI); tft.setTextSize (TEXT_SIZE_M); tft.println ("MEU BLOG"); tft.setTextColor (YAŞIL); tft.setTextSize (TEXT_SIZE_L); tft.println ("FERNANDOK. COM"); createRect (); createTriangle (); createCircle (); tft.setCursor (FEEDBACK_LABEL_X, FEEDBACK_LABEL_Y); tft.setTextColor (CYAN); tft.setTextSize (TEXT_SIZE_L); tft.println ("SHAPE:"); }

Addım 11: Həndəsi Şekiller Yaratma Fonksiyonları

Mənşəyini təyin etdiyimiz bir düzbucaqlı, üçbucaq və bir dairə yaradırıq.

// cria um retangulo com origem (x, y) = (10, 100) // width = 80 e height = 50 void createRect () {tft.fillRect (10, 100, 80, 50, RED); tft.drawRect (10, 100, 80, 50, BEYAZ); } // cria um triangulo com os vertices: // A = (110, 150); B = (150, 100); C = (190, 150) boşluğu createTriangle () {tft.fillTriangle (110, 150, 150, 100, 190, 150, SARI); tft.drawTriangle (110, 150, 150, 100, 190, 150, BEYAZ); } // cria um circulo com origem no ponto (x, y) = (240, 125) e raio = 30 void createCircle () {tft.fillCircle (240, 125, 30, GREEN); tft.drawCircle (240, 125, 30, BEYAZ); }

Addım 12: Dikdörtgəyə toxunduğumuzu yoxlayın

Bu funksiya nöqtənin düzbucaqlı içərisində olub olmadığını yoxlayır.

// Funngão que verifica se o ponto está dentro do retángulobool pointInRect (TSPoint p) {// max/min X do retangulo if (px> = 10 && px <= 90) {// max/min Y retangulo if (py) = 100) {qayıt doğru; }} false qaytar; }

Addım 13: Dairəyə toxunduğumuzu yoxlayın

Bu dairə ilə eynidir.

// distancia entre pontos D = raiz ((xb-xa)^2 + (yb-ya)^2) // vefifica se o ponto está dentro do circulo // se a distancia do ponto pra origem do circulo for menor ou igual ao raio, ele está dentro bool pointInCircle (TSPoint p) {üzmək məsafəsi = sqrt (pow (px - dairə_x, 2) + pow (py - dairə_y, 2)); if (məsafə <= dairə_radius) {doğru qaytar; } false qaytar; }

Addım 14: Üçbucağa toxunduğumuzu yoxlayın

Üçbucağa toxunduğumuzu yoxlayın
Üçbucağa toxunduğumuzu yoxlayın

Eyni nöqtənin yoxlanılması üçbucağın daxilində də baş verir.

// ABC triangulo ilə əlaqəli məlumatların verilməsi // HAQQI YALNIZ saxta məlumatların saxtalaşdırılması FALSE bool pointInsideTriangle (TSPoint a, TSPoint b, TSPoint c, TSPoint p) {float ABC = üçbucaq Bölgəsi (a, b, c)); float ACP = triangleArea (a, c, p); float ABP = üçbucaq sahəsi (a, b, p); float CPB = triangleArea (c, p, b); if (ABC == ACP+ABP+CPB) {true qaytar; } false qaytar; } // Função que calcula a um de triangulo com no nont pontos x, y float triangleArea (TSPoint a, TSPoint b, TSPoint c) {return fabs ((((bx - ax)*(cy - ay) - (cx - ax) * (by - ay))/2); }

Addım 15: Toxunan obyektin adını çap etmək funksiyası

Burada ekranda istifadə olunan həndəsi fiqurun adını yazırıq.

// yazmaq üçün Shape (String forması) {tft.fillRect (FEEDBACK_TOUCH_X, FEEDBACK_TOUCH_Y, 170, 30, BLACK); tft.setCursor (FEEDBACK_TOUCH_X, FEEDBACK_TOUCH_Y); tft.setTextSize (TEXT_SIZE_G); tft.setTextColor (BEYAZ); tft.println (forma); }

Addım 16: Dosyalar

Faylları yükləyin:

MƏN YOX

PDF

Tövsiyə: