Talaan ng mga Nilalaman:

Isang Iba't ibang Diskarte Sa Nextion: 3 Mga Hakbang
Isang Iba't ibang Diskarte Sa Nextion: 3 Mga Hakbang

Video: Isang Iba't ibang Diskarte Sa Nextion: 3 Mga Hakbang

Video: Isang Iba't ibang Diskarte Sa Nextion: 3 Mga Hakbang
Video: Iba’t ibang diskarte sa pag-iipon, alamin! | Dapat Alam Mo! 2024, Nobyembre
Anonim
Isang Iba't ibang Diskarte Sa Nextion
Isang Iba't ibang Diskarte Sa Nextion

Sa aking unang proyekto kasama ang Arduino Nano na nakakonekta sa Nextion touch display, nagsulat ako ng isang mahabang serye ng mga utos upang maiparating sa Nextion sa pamamagitan ng serial port at hindi ito maiiwasan kung kailangan nating magpadala ng ganap na independiyenteng mga utos, sa mga random na sandali.

Aaminin ko din na gumugol ako ng mas maraming oras sa 'pakikipaglaban' sa Mga Aklatan kaysa sa anupaman. Kaya't unti-unti akong nagtatrabaho nang wala ang mga mabibigat na aklatan ng ITEAD.

Sa lalong madaling panahon napagtanto ko na wala akong pagpipilit na makipag-usap sa Nextion ng mga pagbabago sa mga katangian ng mga visual na bagay, ngunit mas gusto kong maghintay hanggang sa kolektahin ko sila at ipadala ang mga ito sa Nextion bilang isang buo, nang makakuha ako ng isang kumpletong pangkat.

Susubukan kong ipaliwanag nang mas mabuti ang aking sarili.

Kapag sa aking proyekto na binubuo ng 16 na pahiwatig na pang-tekstuwal na nais kong buksan o i-off ang ilan sa kanila, ginagawa ko ito sa pamamagitan ng pagsasamantala sa katangiang 'bco' na para sa pag-on, ipinapasa (halimbawa) mula sa maitim na kulay-abo hanggang puti (kung sa isang itim na rektanggulo), at vice versa upang patayin.

Sa aking aplikasyon nahanap kong walang silbi na magpadala ng 16 na mga utos sa serial port sa 16 na magkakaibang sandali, isa para sa bawat 'bco' ng 16 signal.

Mas gusto ko sa halip na kolektahin ng Arduino kung aling mga signal ang dapat na 'nasa' (TAAS) at alin ang dapat na 'off' (LOW) sa isang 16-bit na rehistro, kung saan ang bawat bit ay tumutugma sa isa sa 16 na pagbibigay ng senyas ng Nextion.

Matapos i-update ang bawat piraso ng rehistro, ipinapadala ko ang halaga nito sa Nextion, isang solong mensahe na naglalaman ng isang kolektibong impormasyon tungkol sa 16 na elemento.

Sa ganitong paraan ang komunikasyon mula sa Arduino at Nextion ay lubos na nabawasan sapagkat sa iisang mensahe na naihatid sa serial sa Nextion, nakolekta ang impormasyon na kung hindi ay kinakailangan ng paghahatid ng 16 na mensahe.

Totoo, hindi laging kinakailangan na i-update ang lahat ng mga ulat, ngunit sigurado ako na upang gawin kung hindi man ay mag-aaksaya ng mas maraming oras.

Naturally ang bawat bit na nilalaman sa integer na natanggap ng Arduino, ang pagpapakita ng Nextion ay kailangang iugnay ito sa nais na katangian.

Nangangahulugan ito na ang code ay dapat na nakasulat sa pagpapakita ng Nextion, ngunit hindi ito dapat matakot: kung magtagumpay ako …

Pagkatapos mayroong isang dobleng kalamangan: Ang Arduino ay magkakaroon ng isang mas magaan na code at hindi gaanong nakikilahok sa serial na komunikasyon sa Nextion.

Ang nextion pagkatapos matanggap ang data sa isang solong mensahe, gagamitin ang mga ito nang mas mabilis kaysa sa maghihintay ito ng 16 na mensahe. Ang pag-on o pag-off ng 16 signal ay samakatuwid ay halos magkakasabay na patungkol sa pinaka-karaniwang mode, kung saan ang oras para sa isang hindi kilalang bilang ng mga mensahe ay lumipas sa pagitan ng pagpapatupad ng utos para sa unang pagbibigay ng senyas at utos para sa huling pagbibigay ng senyas.

Sa display na Nextion nilikha ko ang sistemang ito sa klasikong paraan, iyon ay, ang pag-on ng isang 'mask' register bawat oras ay nagbibigay-daan sa iyo upang suriin ang bawat isa sa 16 na piraso. Kapag ang maliit na napagmasdan ay MASAKI, ang signal na nauugnay sa bit na iyon ay nag-iilaw sa display at patayin kapag ang isang medyo mababa.

Ang aspetong 'negatibo' ng sistemang ito ay ang code na nakasulat sa pagpapakita ng Nextion ay hindi gaanong naidodokumento kaysa sa Arduino code. Bukod dito, mapanganib ang code ng Nextion na nakakalat sa iba't ibang mga object. Dapat mag-ingat upang idokumento ang kaagad mong ginagawa.

Gumagamit ako ng Notepad ++ upang isulat ang code na pagkatapos ay kopyahin ko sa bagay na Nextion na halos eksklusibo sa tm0 ng pahina 0.

Ang syntax ng wikang Nextion ay may maraming mga limitasyon, ngunit namamahala ito upang mapagtagumpayan ang mga ito o upang mapalibot ang mga ito nang may pinakamaliit na pagsisikap at subukan na makita ang mga problema mula sa mga pananaw na hindi rin karaniwan.

Bilang isang halimbawa, iniuulat ko ang paraan kung saan nagsusulat si Arduino ng rehistro upang maipadala, na isinulat ko sa pinaka-elementarya na paraan na posible.

Hakbang 1: Paano Ipinadala ang Rehistro

Sa file na ArduinoCode. PDF ipinapakita ko ang lahat ng aking sketch. (Ang pagbabasa ng code dito pababa ay hindi gaanong malinaw)

Dito pababa, nais kong ipakita lamang sa kung aling paraan ipadala ng Arduino ang 16 bit na Magrehistro sa Nextion, nang walang tulong ng mga aklatan, ngunit respeto ng jus sa syntax na inilarawan ng ITEAD.

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

walang bisa ang NexUpd ()

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

{

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

SRSerial.print (InpReg); // ihatid ang 16 na nakolektang mga piraso sa Nextion Display

SRSerial.print (InpReg); // ihatid ang 16 na nakolektang mga piraso sa Nextion Display

SRSerial.write (termin); // 255

SRSerial.write (termin); // 255

SRSerial.write (termin); // 255

}

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

Hakbang 2:.. Ngunit Bago …

.. Ngunit Bago …
.. Ngunit Bago …

Siyempre nagsisimula ang code sa lahat ng mga deklarasyon at pag-setup ().

Ang mga Input ay INPUT_PULLUP, kaya't ang mga switch ng input ay karaniwang bukas at kapag sarado, inilalapat nila ang GND sa input ng sulat.

(Ito ang aking unang Makatuturo at humihingi ako ng paumanhin na ipakita sa iyo ang aking code sa masamang paraan. Mangyaring i-download ang file na ArduinoCode. PDF na napakalinaw nito.

Hayaan mong pag-usapan ko pa ito

Bumuo ako ng aking sariling paraan upang 'sabihin' sa pagpapakita ng Nextion kung ano ang dapat gawin. Kadalasan ang MCU (Arduino sa aking kaso) ay nagpapadala ng isang mensahe para sa bawat solong pagkakaiba-iba upang mailapat sa katangian ng anumang solong object. Ang methode na ito ay nag-aaksaya ng maraming oras upang gawin ang mga bagay na hindi palaging kagyat na mag-load ng tuloy-tuloy sa Serial Line. Natagpuan ko na mas maginhawa na kinokolekta ng Arduino sa 16 bit ang pagrehistro ng impormasyon tungkol sa mga katangian na magkakaiba sa Nextion. Halos bawat 500 mS, ang aking Arduino ay nagpapadala sa Nextion ng isang mensahe na naglalaman ng 16 bit na nilalaman sa bawat rehistro sa oras. Malinaw na sa Nextion kailangan namin ang code na humahawak sa dapat ipatupad. Ang pamamahagi ng gawain (at ang code) hayaan makakuha ng maraming iba pang mga kalamangan. Halimbawa, isipin kung paano gawing isang ilaw ang blink! Sa aking diskarte madali ito: magtakda ng kaunti sa Arduino register at ipadala ito sa Nextion. Ang Nextion kambal rehistro ay maaaring ma-update mula sa Arduino napaka-bihirang, dahil ang blink dalas ito ay malaya mula sa komunikasyon; ang dalas ng blink ay nakasalalay mula sa isang Timer na bagay sa Nextion at maaaring tumakbo kasama ang minimum na base ng oras malapit sa 50 mS. Kaya sa aking pamamaraan maaari kaming magpikit ng ilaw sa Nextion sa dalas na medyo mataas (kunwari 2 Hz), kahit na ang aking Arduino ay nagpapadala ng mga mensahe bawat 10 segundo, para lamang sa isang matinding halimbawa. Maaari itong magmungkahi ng kabaligtaran na problema: kung paano gawin kung nabigo ang Komunikasyon? Hindi ito ang layunin ng talakayang ito, ngunit nalutas ko na ang problemang ito sa isang uri ng Watch Dog: isa sa loob ng Arduino Code, isa pa sa Nextion code.

Ang blinking ay kinokontrol ng Nextion code, kung saan ang bawat ilaw ay sumusunod sa kanyang wastong mga panuntunan: ON / OFF o GREEN / RED o binabago din ang nakasulat sa loob (o iba pa). Maaari kong sabihin ang ilang iba pang mga bagay tungkol sa aking proyekto ngunit mas gusto kong maghintay ng iyong mga katanungan, bago magdagdag ng masyadong maraming mga salita na hindi ganoon kadali para sa akin na magsalin nang maayos tulad ng gusto ko.

Hakbang 3: Pag-edit ng Mga Bagay na Nextion

Pag-edit ng Mga Bagay na Nextion
Pag-edit ng Mga Bagay na Nextion

Narito ang isang bahagi ng code na isinulat ko kasama ang Nextion Editor sa bagay na tm0.

Hindi ito nakaligtas sa aming paunawa na sa 16 na piraso na natanggap mula sa Arduino, ang pagpapakita ng Nextion ay hindi lamang i-on at i-off ang mga signal. Para sa sandaling tinatanggal ko ang mga paliwanag upang hindi masalimuot ang pag-unawa.

Ako ay isang nagsisimula at sa gayon mas mahusay na i-download ang Nextion code. PDF na pahina sa halip na basahin ang nalilito na code dito pababa. (Pasensya na ito ang aking unang itinuro)

Kung nais mo maaari mong i-download ang kumpletong code na "HMI" para sa aking application. Ang filename ng code na ito ay POW1225. HMI. Maaari itong tumakbo sa iyong Nextion display NX4024T032 ngunit upang maunawaan ito kailangan mong lumangoy sa maraming mga bagay at tingnan ang code sa loob ng maliit na window ng editor. Kaya sa palagay ko mas madali itong tingnan ang pangunahing code, nakasulat sa file na Nextion code. PDF

// Project POW1225. HMI 15 Mayo 2019

// vACC (va0) Accumulator

// vINP (va1) Mag-rehistro ng Input xxxx xxxx xxxx xxxx

tm0.en = 1 // tm0 Magsimula

tm0.tim = 50 // tm0 Oras ng batayan 50 mS

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

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

kung (vACC.val! = 0) // Test RDY

{

tRDY.pco = BLUE // RED

} iba pa

{

tRDY.pco = GRAY // dark GRAY

}

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

vACC.val = vINP.val & 0x0002

kung (vACC.val! = 0) // Subukan ang PWR

{

tPWR.pco = GREEN // light GREEN

tPON.txt = "ON" // ON

tPON.pco = GREEN // light GREEN

} iba pa

{

tPWR.pco = GRAY // dark GRAY 33808

tPON.txt = "OFF" // OFF

tPON.pco = GRAY // dark GRAY 33808

}

// DRY *************

vACC.val = vINP.val & 0x0004

kung (vACC.val! = 0) // DRY ng pagsubok

{

tDRV.pco = BLUE // BLUE

tDRY.pco = BLUE // BLUE

} iba pa

{

tDRV.pco = GRAY // dark GRAY 33808

tDRY.pco = GRAY // dark GRAY 33808

}

// TAKBAK **** *********

vACC.val = vINP.val & 0x0018

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

{

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

tRUN.pco = BLACK // on BLACK

tDIR.bco = PULA // DIR RED

tDIR.pco = BLACK // on BLACK

} iba pa

{

tRUN.bco = 32768 // MARCIA GRAY (off)

tRUN.pco = GRAY // sa GRAY

tDIR.bco = 32768 // DIR dark GREEN 1024

tDIR.pco = GRAY // DIR GRAY

tDIR.txt = "---" // TIGIL

}

// KALIWANI ***** *****

vACC.val = vINP.val & 0x0008

kung (vACC.val! = 0) // Test RUN Right

{

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

}

// TAMA *************

vACC.val = vINP.val & 0x0010

kung (vACC.val! = 0) // Test RUN Kaliwa

{

tDIR.txt = ">>>" // DIR RIGHT

}

// KAPITAN **** *********

vACC.val = vINP.val & 0x0018

kung (vACC.val == 24) // Test RUN pareho

{

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

}

// PAGSUSULIT **************

vACC.val = vINP.val & 0x0020

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

{

tTEST.pco = PUTI // PUTI

tsw tTEST, 1 // Paganahin ang mga kaganapan sa Touch

} iba pa

{

tTEST.pco = GRAY // dark GRAY 33808

tsw tTEST, 0 // Huwag paganahin ang mga kaganapan sa Touch

}

// FAULT *************

vACC.val = vINP.val & 0x0040

kung (vACC.val == 0) // FAULT

{

tFLT.pco = GRAY // FAULT absent

}

kung (vACC.val! = 0)

{

tFLT.pco = DILAW // KASALANAN kasalukuyan

}

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

vACC.val = vINP.val & 0x0080

kung (vACC.val == 0) // Test EME

{

tEME.pco = GRAY // EME absent

}

kung (vACC.val! = 0)

{

tEME.pco = PULA // EME kasalukuyan

}

}

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

vACC.val = vINP.val & 0x0100

kung (vACC.val! = 0) // Subukan ang FERMO

{

tFER.pco = BLACK // BLACK

tFER.bco = GREEN // GREEN

} iba pa

{

tFER.pco = GRAY // GRAY

tFER.bco = 672 // dark GREEN

}

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

Pagkilala

Nais kong ibigay ang aking mga pagkilala kay Gideon Rossouwv sapagkat ang pagbabasa ng kanyang Mga Tagubilin Nakakuha ako ng mabilis na bahagi ng aking mga layunin. Salamat mr. Gideon Rossouwv

Inirerekumendang: