Агуулгын хүснэгт:

Nextion -той өөр арга барил: 3 алхам
Nextion -той өөр арга барил: 3 алхам

Видео: Nextion -той өөр арга барил: 3 алхам

Видео: Nextion -той өөр арга барил: 3 алхам
Видео: РАДДС — Основы 2024, Долдугаар сарын
Anonim
Nextion -той өөр арга барил
Nextion -той өөр арга барил

Nextion мэдрэгчтэй дэлгэцтэй холбогдсон Arduino Nano -тэй хийсэн анхны төсөлдөө би Nextion руу цуваа портоор дамжуулах урт цуврал командыг бичсэн бөгөөд хэрэв бид санамсаргүй мөчид бүрэн бие даасан команд илгээх шаардлагатай бол энэ нь зайлшгүй юм.

Би номын сантай "тулалдахад" бусад зүйлээс илүү их цаг зарцуулсан гэдгээ хүлээн зөвшөөрөх ёстой. Тиймээс би аажмаар ITEAD -ийн хүнд номын сангүйгээр ажилдаа бүрэн орсон.

Удалгүй би харааны объектын шинж чанаруудын өөрчлөлтийг Nextion -тэй холбоо барихад яарах зүйлгүй гэдгээ ойлгосон боловч би тэднийг цуглуулж, бүхэлд нь Nextion руу илгээх хүртэл хүлээхийг илүүд үздэг.

Би өөрийгөө илүү сайн тайлбарлахыг хичээх болно.

Миний төсөлд 16 текстийн заалтаас бүрдэхдээ би заримыг нь асаах эсвэл унтраахыг хүсч байгаа бол үүнийг идэвхжүүлэхийн тулд 'bco' шинж чанарыг ашиглан хар сааралаас цагаан хүртэл (жишээ нь) шилжүүлдэг. хар тэгш өнцөгт), харин эсрэгээр унтраана уу.

Миний өргөдөлд 16 командыг цуваа порт руу 16 өөр агшинд илгээх нь утгагүй санагдсан бөгөөд энэ нь 16 дохионы 'bco' тус бүрт нэг юм.

Би оронд нь Arduino аль дохиог 'асаах' (HIGH) байх ёстойг, аль дохиог 'унтраалттай' (LOW) байх ёстойг 16 битийн бүртгэлд цуглуулахыг илүүд үздэг бөгөөд бит нь Nextion-ийн 16 дохионы аль нэгтэй тохирч байна.

Бүртгэлийн хэсэг бүрийг шинэчилсний дараа би түүний утгыг Nextion руу дамжуулж, 16 элементийн талаархи хамтын мэдээллийг агуулсан ганц мессежийг дамжуулдаг.

Ийм маягаар Arduino болон Nextion -ийн харилцаа мэдэгдэхүйц буурдаг, учир нь цуврал дээр Nextion руу дамжуулсан ганц зурваст 16 мессеж дамжуулах шаардлагатай байсан мэдээллийг цуглуулдаг.

Үнэн бол бүх тайланг шинэчлэх нь үргэлж шаардлагатай байдаггүй, гэхдээ өөрөөр хийх нь илүү их цаг алдах болно гэдэгт би итгэлтэй байна.

Мэдээжийн хэрэг, Arduino хүлээн авсан бүхэл тоонд агуулагдах бит бүрийг Nextion дэлгэц нь хүссэн шинж чанараараа холбох ёстой.

Энэ нь Nextion дэлгэц дээр кодыг бичих ёстой гэсэн үг боловч үүнийг айх хэрэггүй: хэрвээ би амжилтанд хүрсэн бол …

Дараа нь давхар давуу тал бий: Arduino нь илүү хөнгөн кодтой байх бөгөөд Nextion -тэй цуваа холбоо барих нь бага байх болно.

Өгөгдлийг нэг мессежээр хүлээн авсны дараа Nextion нь 16 мессеж хүлээж байснаас хамаагүй хурдан ашиглах болно. 16 дохиог асаах, унтраах нь хамгийн анхны горимын хувьд бараг ижил байх болно, эхний дохио өгөх тушаал болон сүүлчийн дохионы тушаалыг гүйцэтгэх хооронд үл мэдэгдэх тооны мессеж ирэх хугацаа дуусна.

Nextion дэлгэц дээр би энэ системийг сонгодог байдлаар бүтээсэн, өөрөөр хэлбэл 'маск' бүртгэлийг эргүүлэх нь 16 бит тус бүрийг шалгах боломжийг олгодог. Шалгаж буй бит нь өндөр байх үед энэ биттэй холбоотой дохио дэлгэц дээр асаж, бага байх үед унтарна.

Энэ системийн "сөрөг" тал нь Nextion дэлгэц дээр бичигдсэн кодыг Arduino кодтой харьцуулахад баримтжуулахад тийм ч тохиромжтой биш юм. Цаашилбал, Nextion код нь янз бүрийн объектууд дээр тархах эрсдэлтэй байдаг. Хийж буй зүйлээ нэн даруй баримтжуулахын тулд анхааралтай байх ёстой.

Би Notepad ++ ашиглан кодоо 0 -р хуудасны tm0 форматаар Nextion объект руу хуулж бичдэг.

Nextion хэлний синтакс нь олон тооны хязгаарлалттай боловч тэдгээрийг даван туулах эсвэл хамгийн бага хүчин чармайлтаар тойрч, асуудлыг ер бусын өнцгөөс харахыг хичээдэг.

Жишээлбэл, би Arduino -ийн дамжуулах регистрийг хэрхэн бичих талаар миний хамгийн энгийн байдлаар бичсэн аргыг мэдээлж байна.

Алхам 1: Бүртгэлийг хэрхэн дамжуулах вэ

ArduinoCode. PDF файлд би бүх ноорогоо харуулдаг. (Кодыг эндээс унших нь тийм ч тодорхой биш байна)

Энд би зөвхөн номын сангийн тусламжгүйгээр Arduino 16 битийн бүртгэлийг Nextion руу илгээхийг хүсч байна, гэхдээ ITEAD -ийн тайлбарласан синтаксийг хүндэтгэдэг.

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

хүчингүй NexUpd ()

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

{

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

SRSerial.print (InpReg); // цуглуулсан 16 битийг Nextion Display рүү дамжуулна

SRSerial.print (InpReg); // цуглуулсан 16 битийг Nextion Display рүү дамжуулна

SRSerial.write (терминал); // 255

SRSerial.write (терминал); // 255

SRSerial.write (терминал); // 255

}

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

Алхам 2:.. Гэхдээ өмнө нь …

.. Гэхдээ өмнө нь …
.. Гэхдээ өмнө нь …

Мэдээжийн хэрэг код нь бүх мэдэгдэл, тохиргооноос эхэлдэг ().

Оролт нь INPUT_PULLUP байдаг тул оролтын унтраалга нь ихэвчлэн нээлттэй байдаг бөгөөд хаагдах үед GND -ийг харгалзах оролтод ашигладаг.

(Энэ бол миний анхны зааварчилгаа бөгөөд кодоо ийм муухай байдлаар харуулсанд уучлаарай. ArduinoCode. PDF файлыг маш ойлгомжтой татаж аваарай.

Энэ талаар илүү дэлгэрэнгүй яръя

Би Nextion дэлгэц дээр юу хийх ёстойгоо харуулах "өөрийн" аргыг бий болгосон. Ихэвчлэн MCU (миний хувьд Arduino) нь аливаа объектын шинж чанарт хамаарах бүх хувилбар бүрт мессеж илгээдэг бөгөөд энэ арга нь цуваа шугамыг тасралтгүй ачаалахад тийм ч яаралтай байдаггүй зүйлийг хийхэд маш их цаг зарцуулдаг. Arduino нь Nextion дээр өөр өөр шинж чанаруудын талаархи мэдээллийг 16 битийн бүртгэлд цуглуулах нь надад илүү тохиромжтой санагдсан. Ойролцоогоор 500 mS тутамд миний Arduino Nextion руу регистр бүрт багтсан 16 битийг агуулсан нэг мессеж илгээдэг. Мэдээж Nextion -д бид гүйцэтгэх ёстой зүйлийг зохицуулах код хэрэгтэй байна. Даалгавар (ба код) -ийн энэхүү хуваарилалт нь бусад олон давуу талыг олж авах боломжийг олгодог. Жишээлбэл, хэрхэн анивчихыг гэрэл болгох талаар бодоорой! Миний арга барилаар энэ нь маш хялбар юм: Arduino бүртгэлд жаахан оруулаад Nextion руу илгээнэ үү. Nextion ихэр бүртгэлийг Arduino -аас маш ховор шинэчлэх боломжтой байдаг, учир нь анивчих давтамж нь харилцаанаас хамаардаггүй; анивчих давтамж нь Таймерын объектоос Nextion руу хамаардаг бөгөөд хамгийн бага хугацааны суурин дээр 50 мС орчим ажиллах боломжтой. Миний аргыг ашиглан бид Nextion -ийн гэрлийг харьцангуй өндөр давтамжтайгаар (2 Гц гэж бодъё), миний Arduino 10 секунд тутамд мессеж илгээдэг байсан ч гэсэн маш тод жишээ болгож болно. Энэ нь эсрэг талын асуудлыг санал болгож болох юм: Харилцаа холбоо тасарсан тохиолдолд яаж хийх вэ? Энэ бол энэ хэлэлцүүлгийн зорилго биш, гэхдээ би энэ асуудлыг нэг төрлийн ажиглагч нохойгоор аль хэдийн шийдсэн: нэг нь Arduino код дотор, нөгөө нь Nextion код руу орсон.

Нүдээ анивчдаг байдлыг Nextion кодоор зохицуулдаг бөгөөд гэрэл тус бүр өөрийн тохирох дүрмийг дагаж мөрддөг: ON/OFF, GREEN/RED, эсвэл дотор нь бичсэнийг өөрчилдөг (эсвэл бусад). Би төслийнхөө талаар өөр зүйл хэлж болох байсан ч гэсэн миний асуултыг хүлээхийг хүсч байна, хэтэрхий их үг оруулахаасаа өмнө орчуулах нь надад тийм ч хялбар биш юм.

Алхам 3: Nextion объектуудыг засварлах

Nextion объектуудыг засварлаж байна
Nextion объектуудыг засварлаж байна

Tm0 объект дээр Nextion Editor -тэй бичсэн кодын нэг хэсэг энд байна.

Ардуиногоос авсан 16 битийн тусламжтайгаар Nextion дэлгэц нь дохиог асааж, унтраахгүй байгааг бид анзаарахгүй өнгөрч чадахгүй байна. Ойлгоход хүндрэл учруулахгүйн тулд би одоогоор тайлбарыг орхигдуулж байна.

Би эхлэгч тул эндүүрсэн кодыг эндээс уншихын тулд Nextion code. PDF хуудсыг татаж авах нь дээр. (Уучлаарай энэ бол миний анхны зааварчилгаа юм)

Хэрэв та хүсвэл энэ програмын "HMI" кодыг бүрэн татаж авах боломжтой. Энэ кодын файлын нэр нь POW1225. HMI юм. Энэ нь NX4024T032 Nextion дэлгэц дээр ажиллах боломжтой боловч үүнийг ойлгохын тулд та олон объект руу сэлж, засварлагчийн жижиг цонхон дээрх кодыг харах хэрэгтэй. Nextion code. PDF файлд бичигдсэн үндсэн кодыг харахад илүү хялбар байх болно гэж би бодож байна

// Төсөл POW1225. HMI 15 May 2019

// vACC (va0) хуримтлуулагч

// vINP (va1) Оролтын бүртгэл xxxx xxxx xxxx xxxx

tm0.en = 1 // tm0 Эхлэх

tm0.tim = 50 // tm0 Цагийн суурь 50 mS

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

vACC.val = vINP.val & 0x0001 // Маск

if (vACC.val! = 0) // RDY тест хийх

{

tRDY.pco = ХӨХ // УЛААН

} өөр

{

tRDY.pco = Саарал // бараан Саарал

}

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

vACC.val = vINP.val & 0x0002

if (vACC.val! = 0) // PWR тест хийх

{

tPWR.pco = НОГООН // цайвар НОГООН

tPON.txt = "ON" // ON

tPON.pco = НОГООН // цайвар НОГООН

} өөр

{

tPWR.pco = Саарал // бараан Саарал 33808

tPON.txt = "OFF" // OFF

tPON.pco = Саарал // бараан Саарал 33808

}

// Хуурай ***************

vACC.val = vINP.val & 0x0004

if (vACC.val! = 0) // Хуурай эсэхийг шалгах

{

tDRV.pco = ХӨХ // Цэнхэр

tDRY.pco = ХӨХ // Цэнхэр

} өөр

{

tDRV.pco = Саарал // бараан Саарал 33808

tDRY.pco = Саарал // бараан Саарал 33808

}

// ГҮЙХ ***************

vACC.val = vINP.val & 0x0018

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

{

tRUN.bco = RED // MARCIA RED (асаалттай)

tRUN.pco = BLACK // BLACK дээр

tDIR.bco = RED // DIR RED

tDIR.pco = BLACK // BLACK дээр

} өөр

{

tRUN.bco = 32768 // Марсиа Грэй (унтраалттай)

tRUN.pco = Саарал // Саарал дээр

tDIR.bco = 32768 // DIR dark GREEN 1024

tDIR.pco = Саарал // DIR GRAY

tDIR.txt = "---" // ЗОГСОО

}

// ЗҮҮН **************

vACC.val = vINP.val & 0x0008

if (vACC.val! = 0) // Зөв гүйх тест

{

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

}

// ЗӨВ *************

vACC.val = vINP.val & 0x0010

if (vACC.val! = 0) // Зүүн тийш гүйх тест

{

tDIR.txt = ">>>" // ДИР ЗӨВ

}

// Хоёулаа **************

vACC.val = vINP.val & 0x0018

if (vACC.val == 24) // Хоёуланг нь ажиллуулах

{

tDIR.txt = ">>! <<" // ХОЁР

}

// ШАЛГАЛТ **************

vACC.val = vINP.val & 0x0020

if (vACC.val! = 0) // Тест тест хийх

{

tTEST.pco = ЦАГААН // ЦАГААН

tsw tTEST, 1 // Touch үйл явдлыг идэвхжүүлэх

} өөр

{

tTEST.pco = Саарал // бараан Саарал 33808

tsw tTEST, 0 // Touch үйл явдлыг идэвхгүй болгох

}

// БУРУУ *************

vACC.val = vINP.val & 0x0040

if (vACC.val == 0) // Туршилтын алдаа

{

tFLT.pco = Саарал // БУРУУ байхгүй байна

}

хэрэв (vACC.val! = 0)

{

tFLT.pco = YELLOW // FULT бэлэн байна

}

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

vACC.val = vINP.val & 0x0080

if (vACC.val == 0) // EME -ийг турших

{

tEME.pco = Саарал // EME байхгүй байна

}

хэрэв (vACC.val! = 0)

{

tEME.pco = RED // EME байгаа

}

}

// ФЕРМО *************

vACC.val = vINP.val & 0x0100

if (vACC.val! = 0) // FERMO тест хийх

{

tFER.pco = ХАР // ХАР

tFER.bco = НОГООН // НОГООН

} өөр

{

tFER.pco = Саарал // Саарал

tFER.bco = 672 // харанхуй НОГООН

}

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

Талархал

Би Гидеон Россуввд талархлаа илэрхийлэхийг хүсч байна, учир нь түүний зааврыг уншсанаар би зорилгынхоо нэг хэсгийг хурдан олж авлаа. Баярлалаа ноён. Гидеон Россов

Зөвлөмж болгож буй: