İçindekiler:

Nextion ile Farklı Bir Yaklaşım: 3 Adım
Nextion ile Farklı Bir Yaklaşım: 3 Adım

Video: Nextion ile Farklı Bir Yaklaşım: 3 Adım

Video: Nextion ile Farklı Bir Yaklaşım: 3 Adım
Video: Ay’a Çıkan İlk İnsanın Yıllardır Sakladığı Sır Ortaya Çıktı! 2024, Temmuz
Anonim
Nextion ile Farklı Bir Yaklaşım
Nextion ile Farklı Bir Yaklaşım

Nextion dokunmatik ekrana bağlı Arduino Nano ile ilk projemde, Nextion'a seri port üzerinden iletilmesi için uzun bir dizi komut yazmıştım ve rastgele anlarda tamamen bağımsız komutlar göndermemiz gerekiyorsa bu kaçınılmazdır.

Ayrıca Kütüphanelerle 'mücadelede' her şeyden daha fazla zaman harcadığımı da itiraf etmeliyim. Böylece ağır ITEAD kütüphaneleri olmadan yavaş yavaş işe başladım.

Kısa süre sonra, görsel nesnelerin niteliklerindeki değişiklikleri Nextion'a iletmek için aciliyetim olmadığını fark ettim, ancak onları toplayana kadar beklemeyi ve eksiksiz bir grubum olduğunda bir bütün olarak Nextion'a göndermeyi tercih ediyorum.

Kendimi daha iyi açıklamaya çalışacağım.

16 metinsel göstergeden oluşan projemde bazılarını açıp kapatmak istediğimde, açma için (örneğin) koyu griden beyaza (eğer varsa) geçen 'bco' özelliğinden yararlanarak yapıyorum. siyah bir dikdörtgen) ve tam tersi kapatmak için.

Uygulamamda, 16 sinyalin her 'bco'su için bir tane olmak üzere, 16 farklı anda seri bağlantı noktasına 16 komut göndermenin yararsız olduğunu gördüm.

Bunun yerine Arduino'nun hangi sinyallerin 'açık' (YÜKSEK) ve hangilerinin 'kapalı' (DÜŞÜK) olması gerektiğini 16 bitlik bir kayıtta toplamasını tercih ederim, burada her bit Nextion'un 16 sinyalleşmesinden birine karşılık gelir.

Kayıt defterinin her bir bitini güncelledikten sonra, değerini 16 elementle ilgili toplu bilgi içeren tek bir mesaj olan Nextion'a iletirim.

Bu şekilde Arduino ve Nextion'dan gelen iletişim önemli ölçüde azalır, çünkü seri olarak Nextion'a iletilen bu tek mesajda, aksi takdirde 16 mesajın iletilmesini gerektirecek bilgiler toplanır.

Doğru, tüm raporları güncellemek her zaman gerekli değildir, ancak aksi takdirde daha fazla zaman kaybı olacağına eminim.

Doğal olarak Arduino tarafından alınan tamsayıda bulunan her bit, Nextion ekranının onu istenen öznitelikle ilişkilendirmesi gerekecektir.

Bu, Nextion ekranında kodun yazılması gerektiği anlamına gelir, ancak korkmamak gerekir: eğer başardıysam…

O zaman çifte avantaj var: Arduino daha hafif bir koda sahip olacak ve Nextion ile daha az seri iletişim kuracak.

Nextion, verileri tek bir mesajda aldıktan sonra, onları 16 mesaj beklemekten çok daha hızlı kullanacaktır. Bu nedenle, 16 sinyalin açılması veya kapatılması, ilk sinyalleme için komutun yürütülmesi ile son sinyalleme için komut arasında bilinmeyen sayıda mesaj için zamanın geçtiği en olağan moda göre neredeyse eşzamanlı olacaktır.

Nextion ekranında bu sistemi klasik şekilde oluşturdum, yani her seferinde bir 'maske' kaydı çevirmek 16 bitin her birini incelemenize izin veriyor. İncelenen bit YÜKSEK olduğunda, o bit ile ilişkili sinyal ekranda yanar ve bir bit DÜŞÜK olduğunda kapanır.

Bu sistemin 'olumsuz' yönü, Nextion ekranında yazılan kodun belgelenmeye Arduino kodundan daha az uygun olmasıdır. Ayrıca, Nextion kodunun çeşitli nesnelere dağılma riski vardır. Yaptıklarınızı hemen belgelemek için özen gösterilmelidir.

Daha sonra kopyaladığım kodu yazmak için Notepad ++ kullanıyorum, neredeyse yalnızca sayfa 0'ın tm0'ında bulunan Nextion nesnesine.

Nextion dilinin sözdiziminin sayısız sınırlamaları vardır, ancak bunların üstesinden gelmeyi veya minimum çabayla bunların üstesinden gelmeyi ve sorunları da olağandışı bakış açılarından görmeye çalışmayı başarır.

Örnek olarak, Arduino'nun benim tarafımdan yazılmış, iletilecek kaydı yazma şeklini mümkün olan en basit şekilde rapor ediyorum.

Adım 1: Kayıt Nasıl İletilir?

ArduinoCode. PDF dosyasında tüm eskizimi gösteriyorum. (Buradaki kodu okumak o kadar net değil)

Aşağıda, sadece Arduino'nun kütüphanelerin yardımı olmadan, ancak ITEAD tarafından açıklanan sözdizimine saygı duyarak 16 bit Register'ı Nextion'a nasıl gönderdiğini göstermek istiyorum.

//***************************************************************************************

geçersiz NexUpd()

//***************************************************************************************

{

SRSerial.print("vINP.val=");

SRSerial.print(InpReg); // toplanan 16 biti Nextion Ekranına ilet

SRSerial.print(InpReg); // toplanan 16 biti Nextion Ekranına ilet

SRSerial.write(sonlandırma); // 255

SRSerial.write(sonlandırma); // 255

SRSerial.write(sonlandırma); // 255

}

//***************************************************************************************

Adım 2:.. Ama Önce…

.. Ama önce …
.. Ama önce …

Elbette kod, tüm bildirimler ve setup() ile başlar.

Girişler INPUT_PULLUP'tur, bu nedenle giriş anahtarları normalde açıktır ve kapatıldığında GND'yi ilgili girişe uygularlar.

(Bu benim ilk Instructable'ım ve kodumu bu kötü şekilde gösterdiğim için üzgünüm. Lütfen ArduinoCode. PDF dosyasını indirin, çok açık.

bunun hakkında daha fazla konuşmama izin ver

Nextion ekranına ne yapması gerektiğini 'söylemek' için kendi yolumu geliştirdim. Genellikle MCU (benim durumumda Arduino), herhangi bir nesnenin özniteliğine uygulamak için her bir varyasyon için bir mesaj gönderir. Bu yöntem, Seri Hattı sürekli olarak yüklemek için her zaman çok acil olmayan şeyleri yapmak için çok zaman harcar. Arduino'nun 16 bit'te toplamasını daha uygun buldum, Nextion'da değişecek nitelikler hakkındaki bilgileri kaydeder. Yaklaşık her 500 mS'de bir Arduino'm Nextion'a o anda her kayıtta bulunan 16 biti içeren bir mesaj gönderir. Açıkçası Nextion'da, yürütülmesi gerekenleri işleyen koda ihtiyacımız var. Görevin (ve kodun) bu dağılımı, başka birçok avantaj elde etmenizi sağlar. Örneğin, göz kırpmayı nasıl ışık yapacağınızı düşünün! Benim yaklaşımımla kolay: Arduino kaydına biraz ayarlayın ve Nextion'a gönderin. Nextion ikiz kayıtları Arduino'dan çok nadiren güncellenebilir, çünkü yanıp sönme frekansı iletişimden bağımsızdır; yanıp sönme frekansı, bir Zamanlayıcı nesnesinden Nextion'a bağlıdır ve 50 mS'ye yakın minimum zaman tabanı ile çalışabilir. Bu yüzden benim yöntemimle, Arduino'm her 10 saniyede bir mesaj gönderse bile, nispeten yüksek frekansta (2 Hz varsayalım) Nextion'da bir ışığı yanıp sönebiliriz, sadece aşırı bir örnek için. Bu, tam tersi bir sorunu önerebilir: İletişim başarısız olursa nasıl yapılır? Bu tartışmanın konusu bu değil, ancak bu sorunu bir tür Watch Dog ile zaten çözdüm: biri Arduino Kodunda, diğeri Nextion kodunda.

Yanıp sönme, her ışığın kendi uygun kurallarına uyduğu Nextion kodu ile düzenlenir: AÇIK/KAPALI veya YEŞİL/KIRMIZI veya ayrıca yazılı olanı (veya diğerlerini) değiştirir. Projem hakkında başka şeyler de söyleyebilirdim ama çok fazla kelime eklemeden önce sorularınızı beklemeyi tercih ediyorum, çevirmek benim için o kadar kolay değil.

Adım 3: Nextion Nesnelerini Düzenleme

Nextion Nesnelerini Düzenleme
Nextion Nesnelerini Düzenleme

İşte tm0 nesnesi üzerinde Nextion Editor ile yazdığım kodun bir kısmı.

Arduino'dan alınan 16 bit ile Nextion ekranının sadece sinyalleri açıp kapatmadığı dikkatimizden kaçmıyor. Anlamayı zorlaştırmamak için açıklamaları şimdilik atlıyorum.

Ben yeni başlayan biriyim ve bu yüzden burada karışık kodu okumak yerine Nextion code. PDF sayfasını indirmek daha iyi. (Üzgünüm, bu benim ilk talimatım)

Dilerseniz bu uygulamam için "HMI" kodunun tamamını indirebilirsiniz. Bu kodun dosya adı POW1225. HMI'dır. Nextion ekranınız NX4024T032 ile karşılaşabilir, ancak bunu anlamak için birçok nesnenin içine girmeli ve düzenleyicinin küçük penceresindeki koda bakmalısınız. Bu yüzden Nextion code. PDF dosyasında yazılan ana koda bakmanın daha kolay olacağını düşünüyorum.

// Proje POW1225. HMI 15 Mayıs 2019

// vACC (va0) Akümülatör

// vINP (va1) Giriş Kaydı xxxx xxxx xxxx xxxx

tm0.en=1 // tm0 Başlangıç

tm0.tim=50 // tm0 Zaman tabanı 50 mS

// RDY ***************

vACC.val=vINP.val&0x0001 // Maske

if(vACC.val!=0) // RDY'yi test et

{

tRDY.pco=MAVİ // KIRMIZI

}Başka

{

tRDY.pco=GRİ // koyu GRİ

}

// PWR ***************

vACC.val=vINP.val&0x0002

if(vACC.val!=0) // PWR'yi test edin

{

tPWR.pco=YEŞİL // açık YEŞİL

tPON.txt="AÇIK" // AÇIK

tPON.pco=YEŞİL // açık YEŞİL

}Başka

{

tPWR.pco=GRİ // koyu GRİ 33808

tPON.txt="KAPALI" // KAPALI

tPON.pco=GRİ // koyu GRİ 33808

}

// KURU ***************

vACC.val=vINP.val&0x0004

if(vACC.val!=0) // KURU Testi

{

tDRV.pco=MAVİ // MAVİ

tDRY.pco=MAVİ // MAVİ

}Başka

{

tDRV.pco=GRİ // koyu GRİ 33808

tDRY.pco=GRİ // koyu GRİ 33808

}

// ÇALIŞTIRMAK ***************

vACC.val=vINP.val&0x0018

if(vACC.val!=0) // ÇALIŞTIRMA Testi

{

tRUN.bco=KIRMIZI // MARCIA KIRMIZI (açık)

tRUN.pco=SİYAH // SİYAH üzerinde

tDIR.bco=KIRMIZI // YÖN KIRMIZI

tDIR.pco=SİYAH // SİYAH üzerinde

}Başka

{

tRUN.bco=32768 // MARCIA GRİ (kapalı)

tRUN.pco=GRİ // GRİ üzerinde

tDIR.bco=32768 // DIR koyu YEŞİL 1024

tDIR.pco=GRİ // YÖN GRİ

tDIR.txt="---" // DUR

}

// SOL **************

vACC.val=vINP.val&0x0008

if(vACC.val!=0) // Test RUN Sağ

{

tDIR.txt="<<< " // SOL YÖN

}

// SAĞ *************

vACC.val=vINP.val&0x0010

if(vACC.val!=0) // Test RUN Sol

{

tDIR.txt=" >>>" // YÖN SAĞ

}

// İKİSİ BİRDEN **************

vACC.val=vINP.val&0x0018

if(vACC.val==24) // Her ikisini de RUN'u test edin

{

tDIR.txt=">>!<<" // HER İKİ YÖN

}

// ÖLÇEK **************

vACC.val=vINP.val&0x0020

if(vACC.val!=0) // Test TEST

{

tTEST.pco=BEYAZ // BEYAZ

tsw tTEST, 1 // Dokunma olaylarını etkinleştir

}Başka

{

tTEST.pco=GRİ // koyu GRİ 33808

tsw tTEST, 0 // Dokunma olaylarını devre dışı bırak

}

// ARIZA *************

vACC.val=vINP.val&0x0040

if(vACC.val==0) // HATASINI Test Et

{

tFLT.pco=GRİ // HATA yok

}

if(vACC.val!=0)

{

tFLT.pco=SARI // HATA var

}

// EME ***************

vACC.val=vINP.val&0x0080

if(vACC.val==0) // EME'yi test et

{

tEME.pco=GRİ // EME yok

}

if(vACC.val!=0)

{

tEME.pco=KIRMIZI // EME mevcut

}

}

// FERMO ***********

vACC.val=vINP.val&0x0100

if(vACC.val!=0) // FERMO'yu test edin

{

tFER.pco=SİYAH // SİYAH

tFER.bco=YEŞİL // YEŞİL

}Başka

{

tFER.pco=GRİ // GRİ

tFER.bco=672 // koyu YEŞİL

}

// *******************

teşekkür

Gideon Rossouwv'a teşekkür etmek istiyorum çünkü onun Eğitilebilir Kitaplarını okuyarak hedeflerimin bir kısmını çabucak kazandım. Teşekkürler bayım. Gideon Rossouwv

Önerilen: