Mündəricat:
- Addım 1: Arduino Mega 2560
- Addım 2: TFT LCD Qalxanı 2.4 "
- Addım 3: Kitabxanalar
- Addım 4: Funksiyalar
- Addım 5: Nümunə
- Addım 6: Kitabxanalar
- Addım 7: Müəyyən edir
- Addım 8: Quraşdırma
- Addım 9: Döngə
- Addım 10: Dairəyə toxunduğumuzu yoxlayın
- Addım 11: Həndəsi Şekiller Yaratma Fonksiyonları
- Addım 12: Dikdörtgəyə toxunduğumuzu yoxlayın
- Addım 13: Dairəyə toxunduğumuzu yoxlayın
- Addım 14: Üçbucağa toxunduğumuzu yoxlayın
- Addım 15: Toxunan obyektin adını çap etmək funksiyası
- Addım 16: Dosyalar
Video: Dokunmatik Ekranlı Arduino: 16 Addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
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"
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ı ə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ə
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
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
Tövsiyə:
I2C Ekranlı RFID Arduino Uno Relay Switch: 4 Addım
RFID Arduino Uno Relay Switch, I2C Display ilə: Salam, bu mənim ilk layihəm, adım Oskar və 13 yaşım var. Bu layihə normal deyil, I2C ekranı ilə işləyir
Arduino Pro Mini və TFT Ekranlı Sehrli Cavablar Topu: 7 addım
Arduino Pro Mini və TFT Ekranlı Sehrli Cavablar Topu: Bir müddət əvvəl qızımla birlikdə Magic 8 topunu ayırdıq ki, iyirmi cavabı seçdiyi ilə əvəz etsin. Bu, bir dostuna hədiyyə idi. Bu məni daha geniş miqyasda necə edəcəyimi düşündürdü. Çox şeyimiz ola bilərmi
TFT Ekranlı Arduino RFID Oxucu: 7 addım
TFT Ekranlı Arduino RFID Oxuyucusu: TFT ekranlı və divar montajı üçün gözəl görünüşlü RFID oxuyucunun necə dizayn ediləcəyini sizə göstərəcəyəm. Arduino ilə divar montajı üçün TFT çıxışı olan gözəl görünüşlü RFID oxucu yaratmaq çox asandır. Seçdiyiniz MKR və Ar
Arduino və Lcd Ekranlı İstilik və Nəmlik Sensoru: 4 addım
Arduino və Lcd Ekranlı İstilik və Nəmlik Sensoru: Salam uşaqlar, Artuinoya yenidən xoş gəldiniz. Gördüyünüz kimi bir InstructableToday başladım, bir Temperatur edəcəyik & DHT11 modulu ilə nəm ölçmə cihazı. Başlayaq PS. Abunə olmağı və videonu bəyənməyi düşünün
Son 1-2 Gün ərzində Trend görmək üçün Arduino, BME280 və Ekranlı Hava İstasyonu: 3 Addım (Şəkillərlə)
Son 1-2 gündə Trend görmək üçün Arduino, BME280 və Ekranlı Hava İstasyonu: Salam! Burada təlimatlı hava stansiyaları artıq təqdim edilmişdir. Mövcud hava təzyiqini, temperaturu və rütubəti göstərirlər. İndiyə qədər çatışmayan şey son 1-2 gün ərzində kursun təqdimatı idi. Bu proses bir