Sadržaj:

Različit pristup sa susjedstvom: 3 koraka
Različit pristup sa susjedstvom: 3 koraka

Video: Različit pristup sa susjedstvom: 3 koraka

Video: Različit pristup sa susjedstvom: 3 koraka
Video: ЧЁРНАЯ МЕТКА ОТ ОККУЛЬТИСТА 2024, Juli
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 poslati potpuno neovisne naredbe, u slučajnim trenucima.

Moram priznati i da sam više vremena proveo u 'borbi' s bibliotekama nego bilo šta drugo. Tako sam postupno počeo raditi potpuno bez teških ITEAD biblioteka.

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

Pokušat ću se bolje objasniti.

Kada u svom projektu koji se sastoji od 16 tekstualnih oznaka želim uključiti ili isključiti neke od njih, to činim koristeći 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, više volim 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 Nextion-a.

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

Na ovaj način komunikacija s Arduina i Nextiona je znatno smanjena 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 sve izvještaje, 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, Nextion zaslon će ga morati povezati sa željenim atributom.

To znači da kôd mora biti napisan na ekranu Nextion, ali ne treba se plašiti: ako uspijem …

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

Nextion će ih nakon primanja podataka 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 najuobičajeniji način rada, u kojem vrijeme za nepoznati broj poruka protekne između izvršavanja naredbe za prvu signalizaciju i naredbe za posljednju signalizaciju.

Na Nextion ekranu stvorio sam ovaj sistem na klasičan način, to jest, svaki put okretanjem registra 'maske' možete pregledati svaki od 16 bitova. Kad je ispitivani bit VISOK, signal povezan s tim bitom svijetli na ekranu i isključuje se kada je bit NISAK.

'Negativan' aspekt ovog sistema je to što je kôd napisan na Nextion ekranu manje prikladan za dokumentiranje od Arduino koda. Nadalje, Nextion kod riskira da se rasprši po raznim objektima. Morate voditi računa 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 Nextion jezika ima brojna ograničenja, ali uspijeva ih prevladati ili zaobići uz minimalan napor i 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 biblioteka, ali samo poštujući sintaksu koju je opisao ITEAD.

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

void NexUpd ()

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

{

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

SRSerial.print (InpReg); // prenosi 16 prikupljenih bitova na Nextion Display

SRSerial.print (InpReg); // prenosi 16 prikupljenih bitova na Nextion Display

SRSerial.write (termin); // 255

SRSerial.write (termin); // 255

SRSerial.write (termin); // 255

}

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

Korak 2:.. Ali prije…

.. Ali prije…
.. Ali prije…

Naravno, kod 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 kod na ovaj loš način. Preuzmite datoteku ArduinoCode. PDF da je vrlo jasna.

Dozvolite mi da pričam više o tome

Razvio sam vlastiti način da 'kažem' Nextion ekranu šta mora raditi. 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 radnje koje nisu uvijek tako hitne za stalno učitavanje serijske linije. Bilo mi je zgodnije da Arduino prikuplja podatke u 16 bitne registre o podacima koji se razlikuju na Nextionu. Otprilike na svakih 500 mS, moj Arduino šalje Nextionu jednu poruku koja sadrži 16 bita sadržanih u svakom registru u isto vrijeme. Očigledno u Nextionu nam je potreban kod koji upravlja onim što se mora izvršiti. Ovakva distribucija 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 ažurirati s Arduina vrlo rijetko, jer je frekvencija treptanja neovisna o komunikaciji; učestalost treptanja ovisi od objekta Timer do 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. Ovo 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 čekam 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 je ovo moja prva instrukcija)

Ako želite, možete preuzeti cijeli kod "HMI" za ovu moju aplikaciju. Naziv datoteke ovog koda je POW1225. HMI. Može naići na vaš Nextion ekran 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, napisan u datoteci Nextion code. PDF

// Projekat POW1225. HMI 15. maja 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

} else

{

tRDY.pco = SIVA // tamno SIVA

}

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

vACC.val = vINP.val & 0x0002

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

{

tPWR.pco = ZELENO // svijetlo ZELENO

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

tPON.pco = ZELENO // svijetlo ZELENO

} else

{

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 = PLAVO // PLAVO

tDRY.pco = PLAVO // PLAVO

} else

{

tDRV.pco = SIVA // tamna SIVA 33808

tDRY.pco = SIVA // tamna SIVA 33808

}

// POKRENI ***************

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

} else

{

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 = "<<<" // UPOZORENO LIJEVO

}

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

vACC.val = vINP.val & 0x0010

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

{

tDIR.txt = ">>>" // DIR 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

} else

{

tTEST.pco = SIVA // tamna SIVA 33808

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

}

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

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

} else

{

tFER.pco = SIVA // SIVA

tFER.bco = 672 // tamno ZELENO

}

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

Priznanje

Želim izraziti priznanje Gideonu Rossouwvu jer sam čitajući njegove instrukcije brzo stekao dio svojih ciljeva. Hvala vam mr. Gideon Rossouwv

Preporučuje se: