Mündəricat:
Video: Nextion ilə fərqli bir yanaşma: 3 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Nextion toxunma ekranına qoşulan Arduino Nano ilə ilk layihəmdə, Nextion -a serial portu vasitəsi ilə çatdırılması üçün uzun bir sıra əmrlər yazmışdım və təsadüfi anlarda tamamilə müstəqil əmrlər göndərməli olsaq bu qaçılmazdır.
Etiraf etməliyəm ki, kitabxanalarla hər şeydən çox 'döyüşmək' üçün daha çox vaxt sərf etmişəm. Beləliklə, tədricən ağır ITEAD kitabxanaları olmadan tamamilə işə başladım.
Tezliklə başa düşdüm ki, vizual obyektlərin xüsusiyyətlərindəki dəyişiklikləri Nextiona çatdırmaq üçün heç bir təxirəsalınmazlığım yoxdur, amma tam bir qrup əldə edəndə onları toplayaraq bir bütün olaraq Nextiona göndərənə qədər gözləməyi üstün tuturam.
Özümü daha yaxşı izah etməyə çalışacağam.
16 mətn işarəsindən ibarət layihəmdə bəzilərini yandırmaq və ya söndürmək istədikdə bunu açmaq üçün (məsələn) tünd bozdan ağa (məsələn qara düzbucaqlı) və əksinə söndürmək üçün.
Tətbiqimdə, 16 siqnalın hər 'bco' si üçün 16 fərqli anda 16 əmri serial porta göndərməyin faydasız olduğunu gördüm.
Bunun əvəzinə Arduinonun, hər bitin Nextionun 16 siqnalından birinə uyğun gəldiyi 16 bitlik bir qeyddə hansı siqnalların 'yandır' (YÜKSƏK), hansı siqnalların 'sönük' (LOW) olması lazım olduğunu toplamasını üstün tuturam.
Reyestrin hər bitini yenilədikdən sonra onun dəyərini 16 elementlə bağlı kollektiv məlumatı olan tək bir mesaj olan Nextiona ötürürəm.
Bu şəkildə Arduino və Nextiondan olan əlaqə əhəmiyyətli dərəcədə azalır, çünki serialda Nextiona ötürülən tək mesajda, əks halda 16 mesajın ötürülməsini tələb edəcək məlumatlar toplanır.
Düzdür, bütün hesabatları yeniləmək həmişə lazım deyil, amma əminəm ki, əks halda bunu etmək daha çox vaxt itirəcək.
Təbii ki, Arduino tərəfindən alınan tam ədəddə olan hər bir bit, Nextion ekranında onu istənilən atributla əlaqələndirməli olacaq.
Bu o deməkdir ki, Nextion ekranında kod yazılmalıdır, amma qorxmaq lazım deyil: əgər uğur qazansam …
Ardından ikiqat üstünlük var: Arduino daha yüngül bir koda sahib olacaq və Nextion ilə serial ünsiyyəti ilə daha az məşğul olacaq.
Nextion, məlumatları tək bir mesajda aldıqdan sonra onları 16 mesaj gözləməkdən daha sürətli istifadə edəcək. 16 siqnalın açılması və ya söndürülməsi, ilk siqnal əmrinin yerinə yetirilməsi ilə son siqnal əmri arasında bilinməyən sayda mesajın vaxtının keçdiyi ən adi rejimə görə demək olar ki, eyni vaxtda olacaq.
Nextion ekranında bu sistemi klassik şəkildə yaratdım, yəni hər dəfə 'maska' qeydini çevirmək 16 bitin hər birini araşdırmağa imkan verir. Müayinə olunan bit YÜKSƏK olduqda, həmin bitlə əlaqəli siqnal ekranda yanır və bir az YÜKSƏN olduqda sönür.
Bu sistemin 'mənfi' tərəfi Nextion ekranında yazılan kodun sənədləşdirilməsinin Arduino kodundan daha az rahat olmasıdır. Bundan əlavə, Nextion kodu müxtəlif obyektlərə səpələnmək riski daşıyır. Etdiyiniz işi dərhal sənədləşdirmək üçün diqqətli olmalısınız.
Notepad ++ istifadə edərək, demək olar ki, yalnız 0 səhifənin tm0 -də olan Nextion obyektinə kopyaladığım kodu yazmaq üçün istifadə edirəm.
Nextion dilinin sintaksisinin çoxsaylı məhdudiyyətləri var, ancaq bunları aşmağı və ya minimum səylə ətrafdan çıxmağı və problemləri qeyri -adi olan nöqteyi -nəzərdən görməyə çalışır.
Nümunə olaraq, Arduinonun mümkün olan ən sadə şəkildə yazdığım reyestri necə yazdığını bildirirəm.
Addım 1: Qeydiyyat Necə Verilir
ArduinoCode. PDF faylında bütün eskizlərimi göstərirəm. (Kodu oxuyanda o qədər də aydın deyil)
Aşağıda, Arduinonun 16 bitlik Qeydiyyatı kitabxanaların köməyi olmadan Nextion -a hansı yolla göndərdiyini göstərmək istəyirəm, ancaq ITEAD -in təsvir etdiyi sintaksisə hörmətlə yanaşıram.
//***************************************************************************************
boş NexUpd ()
//***************************************************************************************
{
SRSerial.print ("vINP.val =");
SRSerial.print (InpReg); // toplanan 16 biti Nextion Display -ə ötürür
SRSerial.print (InpReg); // toplanan 16 biti Nextion Display -ə ötürür
SRSerial.write (termin); // 255
SRSerial.write (termin); // 255
SRSerial.write (termin); // 255
}
//***************************************************************************************
Addım 2:.. Amma əvvəl …
Əlbəttə ki, kod bütün bəyannamələr və quraşdırma ilə başlayır ().
Girişlər INPUT_PULLUP -dur, buna görə giriş açarları normal olaraq açıqdır və bağlandıqda müxbir girişə GND tətbiq edirlər.
(Bu mənim ilk Təlimatımdır və kodumu sizə bu pis şəkildə göstərdiyim üçün üzr istəyirəm. Çox aydın olduğu üçün ArduinoCode. PDF faylını yükləyin.
İcazə verin daha çox danışım
Nextion ekranına nə etməli olduğunu izah etmək üçün öz yolumu hazırlamışam. Adətən MCU (mənim vəziyyətimdə Arduino), hər bir dəyişikliyə hər hansı bir obyektin atributuna tətbiq etmək üçün bir mesaj göndərir. Arduinonun Nextionda dəyişəcək atributlar haqqında məlumatları 16 bitlik qeydlərə yığmasını daha əlverişli hesab etdim. Təxminən hər 500 mS -də mənim Arduino Nextiona hər bir qeyddə 16 bit olan bir mesaj göndərir. Aydındır ki, Nextion -da icra edilməli olanı idarə edən koda ehtiyacımız var. Tapşırığın (və kodun) bu cür paylanması bir çox digər üstünlüklər əldə etməyə imkan verir. Məsələn, göz qırpımını necə işıqlandıracağınızı düşünün! Mənim yanaşmamla bu çox asandır: bir az Arduino reyestrinə daxil edin və Nextion -a göndərin. Nextion əkiz qeydləri Arduinodan çox nadir hallarda yenilənə bilər, çünki göz qırpma tezliyi ünsiyyətdən asılı deyil; yanıb -sönmə tezliyi bir Taymer obyektindən Nextiona bağlıdır və 50 mS -ə yaxın minimum vaxt bazası ilə işləyə bilər. Mənim metodumla, Arduino hər 10 saniyədə bir mesaj göndərsə belə, Nextion -da nisbətən yüksək tezlikdə bir işıq yandıra bilərik (məsələn, 2 Hz). Bu əks problemi göstərə bilər: Ünsiyyət uğursuz olarsa necə etməli? Bu müzakirə mövzusu deyil, amma bu problemi bir növ Watch Dog ilə həll etdim: biri Arduino Kodunun içərisində, digəri Nextion kodunda.
Yanıp sönmə, Nextion kodu ilə tənzimlənir, burada hər işıq öz qaydalarına riayət edir: ON/OFF və ya GREEN/QIRMIZI və ya içindəki yazını dəyişdirmək (və ya daha çox). Layihəmlə bağlı başqa şeylər deyə bilərdim, amma çoxlu sözlər əlavə etməzdən əvvəl suallarınızı gözləməyi üstün tuturam, mənim üçün yaxşı tərcümə etmək.
Addım 3: Nextion obyektlərini redaktə edin
Nextion Editor ilə tm0 obyektində yazdığım kodun bir hissəsidir.
Arduinodan alınan 16 bitlə Nextion displeyinin siqnalları açıb söndürməməsi diqqətimizdən yayınmır. Hal -hazırda başa düşməyi çətinləşdirməmək üçün izahları buraxıram.
Mən bir başlanğıcam və buna görə də qarışıq kodu aşağıda oxumaq üçün Nextion code. PDF səhifəsini yükləmək daha yaxşıdır. (Üzr istəyirəm bu mənim ilk təlimatımdır)
İstəyirsinizsə, bunun üçün tətbiqimin tam kodunu "HMI" yükləyə bilərsiniz. Bu kodun adı POW1225. HMI -dir. Nextion ekranınıza NX4024T032 daxil ola bilər, ancaq bunu başa düşmək üçün bir çox obyektə girib redaktorun kiçik pəncərəsindəki kodu axtarmalısınız. Buna görə Nextion code. PDF faylında yazılmış əsas kodu axtarmağın daha asan olacağını düşünürəm
// Layihə POW1225. HMI 15 May 2019
// vACC (va0) Akkumulyator
// vINP (va1) Giriş Qeydiyyatı xxxx xxxx xxxx xxxx
tm0.az = 1 // tm0 Başla
tm0.tim = 50 // tm0 Zaman bazası 50 mS
// RDY ***************
vACC.val = vINP.val & 0x0001 // Maska
əgər (vACC.val! = 0) // RDY test edin
{
tRDY.pco = MAVİ // QIRMIZI
} başqa
{
tRDY.pco = GREY // tünd boz
}
// PWR ***************
vACC.val = vINP.val & 0x0002
if (vACC.val! = 0) // PWR test edin
{
tPWR.pco = YAŞIL // açıq YAŞIL
tPON.txt = "ON" // ON
tPON.pco = YAŞIL // açıq YAŞIL
} başqa
{
tPWR.pco = GRAY // tünd boz 34808
tPON.txt = "OFF" // OFF
tPON.pco = GRAY // tünd boz 34808
}
// QURU ***************
vACC.val = vINP.val & 0x0004
if (vACC.val! = 0) // DRY test edin
{
tDRV.pco = MAVİ // MAVİ
tDRY.pco = MAVİ // MAVİ
} başqa
{
tDRV.pco = GRAY // tünd boz 34808
tDRY.pco = GRAY // tünd boz 34808
}
// QALDIR ***************
vACC.val = vINP.val & 0x0018
əgər (vACC.val! = 0) // Test RUN
{
tRUN.bco = QIRMIZI // MARCIA QIRMIZI (aktiv)
tRUN.pco = SİYAH / QARADA
tDIR.bco = QIRMIZI // DIR QIRMIZI
tDIR.pco = SİYAH / QARADA
} başqa
{
tRUN.bco = 32768 // MARCIA GRAY (off)
tRUN.pco = GRAY // GRAY -da
tDIR.bco = 32768 // DIR qaranlıq GREEN 1024
tDIR.pco = GREY // DIR GRAY
tDIR.txt = "---" // DUR
}
// SOL **************
vACC.val = vINP.val & 0x0008
if (vACC.val! = 0) // Sağa Çalıştır Test edin
{
tDIR.txt = "<<<" // DIR SOL
}
// SAĞ *************
vACC.val = vINP.val & 0x0010
if (vACC.val! = 0) // Sola ÇALIŞTIR
{
tDIR.txt = ">>>" // DIR HAQQI
}
// İKİSİ **************
vACC.val = vINP.val & 0x0018
if (vACC.val == 24) // Hər ikisini də sınayın
{
tDIR.txt = ">>! <<" // İKİSİ
}
// TEST **************
vACC.val = vINP.val & 0x0020
if (vACC.val! = 0) // Test TESTİ
{
tTEST.pco = AĞ // AĞ
tsw tTEST, 1 // Toxunma hadisələrini aktiv edin
} başqa
{
tTEST.pco = GRAY // tünd boz 34808
tsw tTEST, 0 // Toxunma hadisələrini deaktiv edin
}
// HATA *************
vACC.val = vINP.val & 0x0040
if (vACC.val == 0) // Xəta testi
{
tFLT.pco = GRAY // FAULT yoxdur
}
əgər (vACC.val! = 0)
{
tFLT.pco = SARI // HATA mövcuddur
}
// EME ***************
vACC.val = vINP.val & 0x0080
if (vACC.val == 0) // EME test edin
{
tEME.pco = GRAY // EME yoxdur
}
əgər (vACC.val! = 0)
{
tEME.pco = QIRMIZI // EME mövcuddur
}
}
// FERMO *************
vACC.val = vINP.val & 0x0100
if (vACC.val! = 0) // FERMO test edin
{
tFER.pco = SİYAH / SİYAH
tFER.bco = YAŞIL // YAŞIL
} başqa
{
tFER.pco = GRİ // GRİ
tFER.bco = 672 // qaranlıq YAŞIL
}
// *******************
Təsdiq
Gideon Rossouwv -a öz təşəkkürümü bildirmək istəyirəm, çünki onun Təlimatlarını oxumaqla məqsədlərimin bir hissəsini tez qazandım. Təşəkkür edirəm cənab. Gideon Rossouwv
Tövsiyə:
AF ilə Diy Makro Lens (Digər DIY Makro Lenslərdən Fərqli): 4 Addım (Şəkillərlə)
AF ilə Diy Makro Lens (Bütün Digər DIY Makro Lenslərdən Fərqli): Bir çox insanın standart bir dəst lens ilə makro linzalar hazırladığını gördüm (Adətən 18-55 mm). Əksəriyyəti kameranın arxasına yapışan və ya ön elementi çıxarılan bir lensdir. Bu variantların hər ikisinin mənfi tərəfləri var. Lensin quraşdırılması üçün
Hərəkətli OLOID - Fərqli vaxtlarda fərqli bir ev heyvanı: 10 addım (şəkillərlə)
Hərəkətli OLOID - Fərqli Zamanlarda Fərqli Bir Ev heyvanı: Corona həyatımızı dəyişdi: fiziki uzaqlaşmağımızı tələb edir və bu da öz növbəsində sosial uzaqlaşmaya səbəb olur. Bəs bunun həlli nə ola bilər? Bəlkə bir ev heyvanı? Ancaq yox, Corona heyvanlardan gəlir. Gəlin özümüzü başqa Corona 2.0 -dan xilas edək. Amma əgər biz
Hər hansı bir media faylını fərqli formatlara necə çevirmək olar: 6 addım
Hər hansı bir media faylını fərqli formatlara necə çevirmək olar: İstifadə edə biləcəyimiz fərqli media fayl çeviriciləri var. İnternetdə ən çox sevdiyim onlayn media çeviricisidir: http: //www.mediaconverter.org Bu sadə dərsdə inanılmaz universal media fayl çeviricisi olan "Format Fabriki" ndən istifadə edəcəyik
Fərqli Nəzarət Qrupları ilə Led Monitoru manipulyasiya edin. Arduino üzərindəki LED bəzəklər: 6 addım
Fərqli Nəzarət Qrupları ilə Led Monitoru manipulyasiya edin. Arduino üzərindəki LED Süslemeleri: Arduino kompüter layihəsinin mövzusu " Led Monitoru Fərqli Nəzarət Qrupları ilə Manipulyasiya etməkdir. Arduino üzərində LED bəzəklər. Bu Arduino cihazında, LED monitoru idarə edə bilən iki fərqli idarəetmə qrupu var və
Arduino və fərqli RGB Ledləri ilə necə işləmək olar: 3 addım
Arduino və Fərqli RGB Ledləri ilə necə işləmək olar: Arduino inanılmaz kiçik bir cihazdır. Ancaq bu güclü kiçik cihaz üçün ən çox istifadə edilən tətbiqlərdən biri də tez -tez bir LED -in yanıb -sönməsi və ya yanıb -sönməsidir.Bu təlimat sizə RGB Leds və Arduino ilə işləməyin üç yolunu göstərəcək. Birinci yol sadə istifadə etməkdir