Sadržaj:
Video: Različit pristup sa susjedstvom: 3 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:06
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…
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
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:
Prekidač Prilagodite igračku: WolVol vozom omogućen pristup prekidaču !: 7 koraka
Switch Adapt a Toy: WolVol Train Switch Switch Accessible !: Adaptacija igračaka otvara nove načine i prilagođena rješenja koja omogućuju djeci s ograničenim motoričkim sposobnostima ili smetnjama u razvoju da samostalno komuniciraju s igračkama. U mnogim slučajevima djeca kojima su potrebne prilagođene igračke nisu u mogućnosti
MCU Pristup Internet uslugama putem IFTTT - Ameba Arduino: 3 koraka
MCU Pristup internetskoj usluzi putem IFTTT - Ameba Arduino: Pristup internetskoj usluzi lak je posao za pametne uređaje poput android telefona, tableta ili računala, ali nije tako jednostavan za mikrokontrolere jer obično zahtijeva bolju povezanost i procesorsku snagu. Međutim, možemo iskrcati teški dio
Diy makro objektiv sa AF -om (različit od svih ostalih DIY makro objektiva): 4 koraka (sa slikama)
Diy makro objektiv sa AF-om (različit od svih ostalih DIY makro objektiva): Vidio sam mnogo ljudi koji rade makro sočiva sa standardnim kit objektivom (obično 18-55 mm). Većina njih je objektiv koji se samo zalijepi na kameru unatrag ili se ukloni prednji element. Za obje ove opcije postoje nedostaci. Za montažu objektiva
Kako pretvoriti svoj Raspberry Pi u pristupnik za daljinski pristup: 6 koraka
Kako pretvoriti svoj Raspberry Pi u pristupnik za daljinski pristup: Hej momci! U svjetlu nedavnih događanja, naš tim na lokaciji remote.it radio je na napornim idejama o tome kako daljinski rad učiniti bezbolnim i pristupačnim. Osmislili smo sliku remote.itPi SD kartice, SD karticu koju možete staviti u novu
Pristup vašim Solaredge podacima pomoću Pythona: 4 koraka
Pristup vašim Solaredge podacima pomoću Pythona: Budući da se podaci solaredge transformatora ne pohranjuju lokalno, već na poslužiteljima solaredgea, htio sam koristiti svoje podatke lokalno, na ovaj način mogu koristiti podatke u vlastitim programima. Pokazat ću vam kako možete zatražiti svoje podatke na solaredge mrežama