Sadržaj:

Različit pristup s Nextion -om: 3 koraka
Različit pristup s Nextion -om: 3 koraka

Video: Različit pristup s Nextion -om: 3 koraka

Video: Različit pristup s Nextion -om: 3 koraka
Video: Različit pristup nastavi u visokoškolskim ustanovama u BiH 2024, Srpanj
Anonim
Drugačiji pristup s Nextion -om
Drugačiji pristup s Nextion -om

U svom prvom projektu s Arduino Nano povezanim s Nextion zaslonom osjetljivim na dodir, napisao sam dugi niz naredbi koje će se komunicirati s Nextionom preko serijskog porta, a to je neizbježno ako moramo slati potpuno neovisne naredbe, u slučajnim trenucima.

Moram priznati i da sam više vremena proveo u 'borbi' s Knjižnicama nego bilo što drugo. Tako sam postupno počeo raditi potpuno bez teških ITEAD knjižnica.

Ubrzo sam shvatio da nemam hitnu potrebu obavijestiti Nextion o promjenama atributa vizualnih objekata, ali radije čekam da ih prikupim i pošaljem u Nextion u cjelini, kad dobijem kompletnu grupu.

Pokušat ću se bolje objasniti.

Kad u svom projektu koji se sastoji od 16 tekstualnih oznaka želim neke od njih uključiti ili isključiti, to činim tako da koristim atribut 'bco' koji za uključivanje prelazi (na primjer) iz tamno sive u bijelu (ako je u crni pravokutnik) i obrnuto za isključivanje.

U mojoj aplikaciji smatralo sam beskorisnim slanje 16 naredbi na serijski port u 16 različitih trenutaka, po jednu za svaki 'bco' od 16 signala.

Umjesto toga, radije bih da Arduino prikuplja podatke koji moraju biti 'uključeni' (HIGH), a koji moraju biti 'isključeni' (LOW) u 16-bitnom registru, gdje svaki bit odgovara jednom od 16 signalizacija Nextiona.

Nakon ažuriranja svakog bita registra, prenosim njegovu vrijednost u Nextion, jednu poruku koja sadrži zbirne podatke o 16 elemenata.

Na taj se način komunikacija s Arduina i Nextiona znatno smanjuje jer se u toj jednoj poruci koja se serijski prenosi na Nextion prikupljaju informacije koje bi u protivnom zahtijevale prijenos 16 poruka.

Istina, nije uvijek potrebno ažurirati sva izvješća, ali siguran sam da bi na drugi način izgubili više vremena.

Naravno, svaki bit sadržan u cijelom broju koji je primio Arduino, zaslon Nextion morat će ga povezati sa željenim atributom.

To znači da se kôd mora napisati na zaslonu Nextion, ali ne treba se bojati: ako uspijem …

Zatim postoji dvostruka prednost: Arduino će imati lakši kôd i manje će se baviti serijskom komunikacijom s Nextionom.

Nextion će ih, nakon što primi podatke u jednoj poruci, koristiti mnogo brže nego da čeka 16 poruka. Uključivanje ili isključivanje 16 signala bit će stoga gotovo istodobno s obzirom na najčešći način rada, u kojem vrijeme za nepoznati broj poruka protekne između izvršenja naredbe za prvu signalizaciju i naredbe za posljednju signalizaciju.

Na Nextion zaslonu stvorio sam ovaj sustav na klasičan način, to jest, svaki put okretanje registra 'maske' omogućuje vam pregled svakog od 16 bitova. Kad je ispitivani bit VISOK, signal povezan s tim bitom svijetli na zaslonu i isključuje se kada je bit NISKI.

'Negativan' aspekt ovog sustava je to što je kôd napisan na Nextion zaslonu manje prikladan za dokumentiranje od Arduino koda. Nadalje, Nextion kod riskira da se rasprši po raznim objektima. Morate paziti da odmah dokumentirate ono što radite.

Koristim Notepad ++ za pisanje koda koji zatim kopiram u objekt Nextion koji je gotovo isključivo u tm0 stranice 0.

Sintaksa jezika Nextion ima brojna ograničenja, ali uspijeva ih prevladati ili zaobići s minimalnim naporom te pokušati sagledati probleme s gledišta koja su također neobična.

Kao primjer navodim način na koji Arduino zapisuje registar za prijenos, koji sam napisao na najelementarniji mogući način.

Korak 1: Način prijenosa registra

U datoteci ArduinoCode. PDF pokazujem svu svoju skicu. (Čitanje koda ovdje dolje nije tako jasno)

Ovdje dolje želim samo pokazati na koji način Arduino šalje 16 -bitni registar u Nextion, bez pomoći knjižnica, ali samo poštujući sintaksu koju je opisao ITEAD.

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

void NexUpd ()

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

{

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

SRSerial.print (InpReg); // šalje 16 prikupljenih bitova na Nextion zaslon

SRSerial.print (InpReg); // šalje 16 prikupljenih bitova na Nextion zaslon

SRSerial.write (termin); // 255

SRSerial.write (termin); // 255

SRSerial.write (termin); // 255

}

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

Korak 2:.. Ali prije…

.. Ali prije …
.. Ali prije …

Naravno da kôd počinje sa svim deklaracijama i setup ().

Ulazi su INPUT_PULLUP, pa su ulazni prekidači normalno otvoreni, a kada su zatvoreni, primjenjuju GND na odgovarajući ulaz.

(Ovo je moj prvi Instructable i žao mi je što vam mogu pokazati svoj kôd na ovaj loš način. Preuzmite datoteku ArduinoCode. PDF da je vrlo jasna.

Dopustite mi da pričam više o tome

Razvio sam vlastiti način da 'kažem' Nextion zaslonu što mora učiniti. Obično MCU (u mom slučaju Arduino) šalje poruku za svaku varijaciju koja se primjenjuje na atribut bilo kojeg objekta. Ova metoda troši puno vremena na stvari koje nisu uvijek tako hitne za stalno učitavanje serijske linije. Bilo mi je prikladnije da Arduino skuplja u 16 -bitne registre podatke o atributima koji se mogu razlikovati na Nextionu. Otprilike svakih 500 mS, moj Arduino šalje Nextionu jednu poruku koja sadrži 16 bita sadržanih u svakom registru u isto vrijeme. Očito nam je u Nextionu potreban kod koji obrađuje ono što se mora izvršiti. Ova raspodjela zadatka (i koda) omogućuje mnoge druge prednosti. Na primjer, zamislite kako treptati svjetlo! S mojim pristupom je jednostavno: postavite malo u Arduino registar i pošaljite ga na Nextion. Nextion dvostruki registri mogli bi se vrlo rijetko ažurirati s Arduina jer je frekvencija treptanja neovisna o komunikaciji; učestalost treptaja ovisi od objekta Timer u Nextion i može raditi s minimalnom vremenskom bazom blizu 50 mS. Tako mojom metodom možemo treptati svjetlom u Nextionu na relativno visokoj frekvenciji (pretpostavimo 2 Hz), čak i ako moj Arduino šalje poruke svakih 10 sekundi, samo za ekstreman primjer. To može ukazivati na suprotan problem: kako postupiti ako komunikacija ne uspije? Ovo nije predmet ove rasprave, ali već sam riješio ovaj problem s nekom vrstom Watch Doga: jedan unutar Arduino koda, drugi u Nextion kodu.

Treptanje je regulirano Nextion kodom, pri čemu svako svjetlo slijedi njegova pravilna pravila: UKLJUČENO/ISKLJUČENO ili ZELENO/CRVENO ili također mijenjajući napisano unutra (ili drugo). Mogao bih reći neke druge stvari o svom projektu, ali radije bih čekao vaša pitanja, prije nego što dodam previše riječi koje mi nije tako lako prevesti kao što bih to učinio.

Korak 3: Uređivanje Nextion objekata

Uređivanje Nextion objekata
Uređivanje Nextion objekata

Evo dijela koda koji sam napisao s Nextion Editor -om na objektu tm0.

Ne bježi nam od ruke da sa 16 bita primljenih od Arduina, Nextion zaslon ne uključuje samo i isključuje signale. Za sada izostavljam objašnjenja kako ne bih zakomplicirao razumijevanje.

Ja sam početnik i zato je bolje preuzeti stranicu Nextion code. PDF umjesto da čitate zbunjeni kôd ovdje dolje. (Žao mi je što mi je ovo prva instrukcija)

Ako želite, možete preuzeti cijeli kôd "HMI" za ovu moju aplikaciju. Naziv datoteke ovog koda je POW1225. HMI. Može naići na vaš Nextion zaslon NX4024T032, ali da biste to razumjeli, morate zaplivati u mnoge objekte i pogledati kod unutar malog prozora uređivača. Tako da mislim da će tako biti lakše pogledati glavni kod, zapisan u datoteci Nextion code. PDF

// Projekt POW1225. HMI 15. svibnja 2019

// vACC (va0) Akumulator

// vINP (va1) Ulazni registar xxxx xxxx xxxx xxxx

tm0.en = 1 // tm0 Start

tm0.tim = 50 // tm0 Vremenska baza 50 mS

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

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

if (vACC.val! = 0) // Testiraj RDY

{

tRDY.pco = PLAVO // CRVENO

}drugo

{

tRDY.pco = SIVA // tamno SIVA

}

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

vACC.val = vINP.val & 0x0002

if (vACC.val! = 0) // Testiraj PWR

{

tPWR.pco = ZELENO // svijetlo ZELENO

tPON.txt = "UKLJUČENO" // UKLJUČENO

tPON.pco = ZELENO // svijetlo ZELENO

}drugo

{

tPWR.pco = SIVA // tamna SIVA 33808

tPON.txt = "OFF" // OFF

tPON.pco = SIVA // tamna SIVA 33808

}

// SUHO ***************

vACC.val = vINP.val & 0x0004

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

{

tDRV.pco = PLAVA // PLAVA

tDRY.pco = PLAVA // PLAVA

}drugo

{

tDRV.pco = SIVA // tamna SIVA 33808

tDRY.pco = SIVA // tamna SIVA 33808

}

// TRČANJE ***************

vACC.val = vINP.val & 0x0018

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

{

tRUN.bco = CRVENO // MARCIA CRVENO (uključeno)

tRUN.pco = CRNO // na CRNO

tDIR.bco = CRVENO // DIR CRVENO

tDIR.pco = CRNO // na CRNO

}drugo

{

tRUN.bco = 32768 // MARCIA GREY (isključeno)

tRUN.pco = SIVA // na SIVOJ

tDIR.bco = 32768 // DIR tamno ZELENO 1024

tDIR.pco = SIVA // DIR SIVA

tDIR.txt = "---" // STOP

}

// LIJEVO **************

vACC.val = vINP.val & 0x0008

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

{

tDIR.txt = "<<<" // SMIRNO LIJEVO

}

// PRAVO *************

vACC.val = vINP.val & 0x0010

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

{

tDIR.txt = ">>>" // DIREKTNO DESNO

}

// OBA **************

vACC.val = vINP.val & 0x0018

if (vACC.val == 24) // Testiraj oba

{

tDIR.txt = ">>! <<" // UPOZORENO OBA

}

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

vACC.val = vINP.val & 0x0020

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

{

tTEST.pco = BIJELO // BIJELO

tsw tTEST, 1 // Omogući događaje dodira

}drugo

{

tTEST.pco = SIVA // tamna SIVA 33808

tsw tTEST, 0 // Onemogući dodirne događaje

}

// KVAR *************

vACC.val = vINP.val & 0x0040

if (vACC.val == 0) // Test FAULT

{

tFLT.pco = SIVA // KVARA odsutan

}

if (vACC.val! = 0)

{

tFLT.pco = ŽUTI // GREŠKA prisutna

}

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

vACC.val = vINP.val & 0x0080

if (vACC.val == 0) // Testiraj EME

{

tEME.pco = SIVA // EME odsutan

}

if (vACC.val! = 0)

{

tEME.pco = CRVENO // EME prisutno

}

}

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

vACC.val = vINP.val & 0x0100

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

{

tFER.pco = CRNO // CRNO

tFER.bco = ZELENO // ZELENO

}drugo

{

tFER.pco = SIVA // SIVA

tFER.bco = 672 // tamno ZELENO

}

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

Priznanje

Želim zahvaliti Gideonu Rossouwvu jer sam čitajući njegove Instructables brzo stekao dio svojih ciljeva. Hvala gosp. Gideon Rossouwv

Preporučeni: