Mundarija:

Nextion bilan boshqa yondashuv: 3 qadam
Nextion bilan boshqa yondashuv: 3 qadam

Video: Nextion bilan boshqa yondashuv: 3 qadam

Video: Nextion bilan boshqa yondashuv: 3 qadam
Video: How to Make PLC LCD HMI || FLProg 2024, Noyabr
Anonim
Nextion bilan boshqacha yondashuv
Nextion bilan boshqacha yondashuv

Nextion sensorli displeyiga ulangan Arduino Nano bilan birinchi loyihamda, men Nextion -ga ketma -ket port orqali xabar berish uchun uzoq buyruqlar seriyasini yozgan edim va agar biz mutlaqo mustaqil buyruqlarni tasodifiy lahzalarda yuborishimiz kerak bo'lsa, bu muqarrar.

Shuni ham tan olishim kerakki, men kutubxonalar bilan "jang qilish" uchun hamma vaqtdan ko'proq vaqt sarflaganman. Shunday qilib, men asta -sekin ITEADning og'ir kutubxonalarisiz butunlay ishga keldim.

Ko'p o'tmay, men Nextionga vizual narsalarning atributlarini o'zgartirish to'g'risida xabar berishning hojati yo'qligini tushundim, lekin men ularni yig'ib olguncha kutib turishni va umuman Nextionga yuborganimda, men to'liq guruhga ega bo'ldim.

Men o'zimni yaxshiroq tushuntirishga harakat qilaman.

Agar men 16 ta matnli ko'rsatuvlardan iborat loyihamda ulardan ba'zilarini yoqishni yoki o'chirishni xohlasam, men buni "bco" atributidan foydalanib, (masalan,) quyuq kulrangdan oq ranggacha (agar bo'lsa) o'tkazaman. qora to'rtburchak), va aksincha o'chirish uchun.

Mening arizamda 16 ta buyruqni ketma -ket portga 16 xil vaqtda yuborish foydasiz deb topdim, bittasi 16 ta signaldan.

Men Arduino 16-bitli registrda qaysi signallar "yoqilgan" (YUQORI), qaysi biri "o'chirilgan" (LOW) bo'lishi kerakligini yig'ishni afzal ko'raman, bu erda har bir bit Nextion-ning 16 signalidan biriga mos keladi.

Ro'yxatdan o'tish kitobining har bir bitini yangilab bo'lgach, men uning qiymatini Nextion -ga, 16 ta element haqida umumiy ma'lumotni o'z ichiga oluvchi xabarga o'tkazaman.

Shu tariqa Arduino va Nextiondan aloqa sezilarli darajada kamayadi, chunki serialda Nextionga uzatiladigan bitta xabarda, aks holda 16 ta xabarni uzatishni talab qiladigan ma'lumotlar yig'iladi.

To'g'ri, har doim ham barcha hisobotlarni yangilab turish shart emas, lekin aminmanki, aks holda bu ko'proq vaqtni yo'qotadi.

Tabiiyki, Arduino tomonidan qabul qilingan tamsayıdagi har bir bit, Nextion displeyi uni kerakli atribut bilan bog'lashi kerak bo'ladi.

Bu shuni anglatadiki, kod Nextion displeyida yozilishi kerak, lekin qo'rqmaslik kerak: agar men muvaffaqiyat qozonsam …

Keyin ikkita afzallik bor: Arduino engilroq kodga ega bo'ladi va Nextion bilan ketma -ket muloqotda kamroq bo'ladi.

Ma'lumotni bitta xabarda qabul qilgandan so'ng, Nextion 16 ta xabarni kutgandan ko'ra tezroq ishlatiladi. 16 signalni yoqish yoki o'chirish odatiy rejimga nisbatan deyarli bir xil bo'ladi, bunda noma'lum miqdordagi xabarlar vaqti birinchi signal buyrug'i bilan oxirgi signal buyrug'i o'rtasida o'tadi.

Nextion displeyida men bu tizimni klassik tarzda yaratdim, ya'ni har safar "niqob" registrini aylantirish sizga 16 bitning har birini tekshirishga imkon beradi. Tekshirilgan bit YUQORI bo'lsa, displeyda bu bit bilan bog'liq signal yonadi va LOW past bo'lganda o'chadi.

Bu tizimning "salbiy" tomoni shundaki, Nextion displeyida yozilgan kodni hujjatlashtirish Arduino kodiga qaraganda qulay emas. Bundan tashqari, Nextion kodi turli ob'ektlarga tarqalish xavfini tug'diradi. Siz nima qilayotganingizni darhol hujjatlashtirish uchun ehtiyot bo'lish kerak.

Men kodni yozish uchun Notepad ++ dan foydalanaman, keyin uni faqat 0 -sahifaning tm0 -da joylashgan Nextion ob'ektiga ko'chiraman.

Nextion tilining sintaksisi juda ko'p cheklovlarga ega, lekin u ularni engishga yoki ularni eng kam harakat bilan aylanib o'tishga va muammolarni g'ayrioddiy nuqtai nazardan ko'rishga harakat qiladi.

Misol tariqasida, men Arduino, men yozadigan, iloji boricha oddiy tarzda yozilgan registrni qanday yozganini xabar qilaman.

1 -qadam: Registr qanday o'tkaziladi

ArduinoCode. PDF faylida men barcha chizmalarimni ko'rsataman. (Kodni bu erda o'qish unchalik aniq emas)

Bu erda men Arduino kutubxonalar yordamisiz 16 bitli Registrni Nextion -ga qanday yuborishini ko'rsatmoqchiman, lekin ITEAD tomonidan tasvirlangan sintaksisga hurmat bilan qarang.

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

bekor NexUpd ()

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

{

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

SRSerial.print (InpReg); // yig'ilgan 16 bitni Nextion displeyiga o'tkazing

SRSerial.print (InpReg); // yig'ilgan 16 bitni Nextion displeyiga o'tkazing

SRSerial.write (terminal); // 255

SRSerial.write (terminal); // 255

SRSerial.write (terminal); // 255

}

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

2 -qadam:.. Lekin oldin …

.. Lekin oldin …
.. Lekin oldin …

Albatta, kod barcha deklaratsiyalar va sozlash bilan boshlanadi ().

Kirishlar INPUT_PULLUP, shuning uchun kirish kalitlari odatda ochiq va yopilganda ular GNDni mos keladigan kirishga qo'llaydilar.

(Bu mening birinchi yo'riqnomam va sizga o'z kodimni yomon ko'rsatganim uchun uzr so'rayman. ArduinoCode. PDF faylini yuklab oling, bu juda aniq.

Keling, bu haqda ko'proq gapirishga ijozat bering

Men Nextion displeyiga nima qilish kerakligini ko'rsatish uchun o'z uslubimni ishlab chiqdim. Odatda MCU (mening holatimda Arduino) har qanday ob'ektning atributini qo'llash uchun har bir variant uchun xabar yuboradi, bu usul ketma -ket chiziqni uzluksiz yuklash uchun har doim ham shoshilmaydigan ishlarni bajarish uchun ko'p vaqt sarflaydi. Men Arduino -ning atributlar haqidagi ma'lumotlarni Nextion -ga qarab 16 bitli registrlarga to'plashi qulayroq deb topdim. Taxminan har 500 mS, mening Arduino Nextionga har bir registrda 16 bitli bitta xabar yuboradi. Shubhasiz, Nextionda biz bajarilishi kerak bo'lgan narsalarni boshqaradigan kodga muhtojmiz. Vazifaning (va kodning) taqsimlanishi boshqa ko'plab afzalliklarga ega bo'lishga imkon beradi. Masalan, qanday qilib miltillashni yorug'lik qilishni o'ylab ko'ring! Mening yondashuvim bilan bu juda oson: Arduino registriga biroz o'rnating va uni Nextionga yuboring. Nextion egizak registrlari Arduino -dan juda kamdan -kam hollarda yangilanishi mumkin edi, chunki miltillovchi chastotasi aloqa bilan bog'liq emas; miltillovchi chastota Taymer ob'ektidan Nextionga bog'liq va 50 mS ga yaqin minimal vaqt bazasida ishlashi mumkin. Shunday qilib, mening usulim bilan biz Nextion -dagi chiroqni nisbatan yuqori chastotada (2 gigagertsli deb hisoblay olamiz), hatto mening Arduino har 10 soniyada xabar yuborib tursa ham, misol uchun. Bu qarama -qarshi muammoni ko'rsatishi mumkin: agar aloqa uzilib qolsa, qanday qilish kerak? Bu munozaraning maqsadi emas, lekin men bu muammoni "Watch Dog" bilan hal qildim: biri Arduino kodida, ikkinchisi Nextion kodiga.

Yonib -o'chish Nextion kodi bilan tartibga solinadi, bu erda har bir yorug'lik o'z qoidalariga amal qiladi: ON/OFF yoki Yashil/QIRIQ, yoki ichidagi yozuvni o'zgartirish (yoki boshqa). Men o'z loyiham haqida boshqa narsalarni aytib berishim mumkin edi, lekin men sizning savollaringizni kutishni ma'qul ko'raman, ko'p so'zlarni qo'shishdan oldin men tarjima qilish men uchun oson emas.

3 -qadam: Nextion ob'ektlarini tahrirlash

Nextion ob'ektlarini tahrirlash
Nextion ob'ektlarini tahrirlash

Bu erda men Nextion Editor bilan tm0 ob'ektida yozgan kodning bir qismi.

Arduino -dan olingan 16 bitli Nextion displeyi faqat signallarni yoqmaydi va o'chirmaydi. Hozircha tushunishni murakkablashtirmaslik uchun tushuntirishlarni qoldiraman.

Men boshlang'ichman, shuning uchun bu erda chalkash kodni o'qish uchun Nextion code. PDF sahifasini yuklab olish yaxshiroqdir. (Kechirasiz, bu mening birinchi ko'rsatmam)

Agar xohlasangiz, bu dastur uchun "HMI" to'liq kodini yuklab olishingiz mumkin. Ushbu kodning nomi POW1225. HMI. Bu sizning Nextion displeyingiz NX4024T032 -ga kirishi mumkin, lekin buni tushunish uchun siz ko'p narsalarga suzishingiz va muharrirning kichik oynasida kodni ko'rishingiz kerak. Menimcha, Nextion code. PDF faylida yozilgan asosiy kodni ko'rish osonroq bo'ladi

// Loyiha POW1225. HMI 15 may 2019 yil

// vACC (va0) akkumulyatori

// vINP (va1) kirish registri xxxx xxxx xxxx xxxx

tm0.en = 1 // tm0 Boshlash

tm0.tim = 50 // tm0 Vaqt bazasi 50 mS

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

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

agar (vACC.val! = 0) // RDYni sinab ko'ring

{

tRDY.pco = KO'R // KIRMIZI

} boshqa

{

tRDY.pco = GRAY // to'q kulrang

}

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

vACC.val = vINP.val va 0x0002

agar (vACC.val! = 0) // PWR testi

{

tPWR.pco = Yashil // engil Yashil

tPON.txt = "ON" // ON

tPON.pco = Yashil // engil Yashil

} boshqa

{

tPWR.pco = GRAY // qorong'i kulrang 33808

tPON.txt = "O'chirilgan" // O'chirilgan

tPON.pco = GRAY // qorong'i kulrang 33808

}

// QURUQ ***************

vACC.val = vINP.val va 0x0004

agar (vACC.val! = 0) // QURUQni tekshiring

{

tDRV.pco = KO'K // KO'K

tDRY.pco = KO'K // KO'K

} boshqa

{

tDRV.pco = GRAY // qorong'i GRAY 33808

tDRY.pco = GRAY // qorong'i kulrang 33808

}

// QO'YING ***************

vACC.val = vINP.val va 0x0018

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

{

tRUN.bco = RED // MARCIA RED (yoqilgan)

tRUN.pco = QORA // QORA

tDIR.bco = RED // DIR RED

tDIR.pco = QORA // QORA

} boshqa

{

tRUN.bco = 32768 // MARCIA GRAY (o'chirilgan)

tRUN.pco = GRAY // GRAYda

tDIR.bco = 32768 // DIR qorong'i Yashil 1024

tDIR.pco = GRAY // DIR GRAY

tDIR.txt = "---" // To'xtating

}

// chapda **************

vACC.val = vINP.val va 0x0008

agar (vACC.val! = 0) // O'ngga yugurishni sinab ko'ring

{

tDIR.txt = "<<<" // DIR QOLGAN

}

// To'g'ri *************

vACC.val = vINP.val va 0x0010

if (vACC.val! = 0) // Chiqish chapga

{

tDIR.txt = ">>>" // DIR O'ng

}

// BOSHQA **************

vACC.val = vINP.val va 0x0018

if (vACC.val == 24) // Ikkalasini ham ishga tushiring

{

tDIR.txt = ">>! <<" // DIR BOT

}

// TEST **************

vACC.val = vINP.val va 0x0020

agar (vACC.val! = 0) // TEST sinovi

{

tTEST.pco = oq // oq

tsw tTEST, 1 // Touch hodisalarini yoqish

} boshqa

{

tTEST.pco = GRAY // qorong'i kulrang 33808

tsw tTEST, 0 // Touch hodisalarini o'chirib qo'yish

}

// XATO *************

vACC.val = vINP.val va 0x0040

agar (vACC.val == 0) // XATO sinovi

{

tFLT.pco = GRAY // HATO yo'q

}

agar (vACC.val! = 0)

{

tFLT.pco = SARI // XATO mavjud

}

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

vACC.val = vINP.val va 0x0080

agar (vACC.val == 0) // EMEni sinab ko'ring

{

tEME.pco = GRAY // EME yo'q

}

agar (vACC.val! = 0)

{

tEME.pco = RED // EME mavjud

}

}

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

vACC.val = vINP.val va 0x0100

agar (vACC.val! = 0) // FERMO ni sinab ko'ring

{

tFER.pco = QORA // QORA

tFER.bco = Yashil // Yashil

} boshqa

{

tFER.pco = GRAY // GRAY

tFER.bco = 672 // quyuq Yashil

}

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

E'tirof

Men Gideon Rossuvga o'z minnatdorchiligimni bildirmoqchiman, chunki uning ko'rsatmalari bilan o'qish men o'z maqsadlarimning bir qismini tezda qo'lga kiritdi. Rahmat sizga janob. Gideon Rossov

Tavsiya: