Kazalo:
Video: Drugačen pristop z Nextion: 3 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
V svojem prvem projektu z Arduino Nano, povezanim z zaslonom na dotik Nextion, sem napisal dolgo vrsto ukazov, ki jih je treba sporočiti Nextionu prek serijskih vrat, kar je neizogibno, če moramo v naključnih trenutkih poslati popolnoma neodvisne ukaze.
Moram tudi priznati, da sem več časa preživel v 'boju' s knjižnicami kot karkoli drugega. Tako sem postopoma začel delati popolnoma brez težkih knjižnic ITEAD.
Kmalu sem spoznal, da nimam nujnosti, da Nextionu sporočim spremembe atributov vizualnih predmetov, ampak raje počakam, da jih zberem, in jih pošljem v Nextion kot celoto, ko bom dobil celotno skupino.
Poskušal se bom bolje razložiti.
Ko želim v svojem projektu, sestavljenem iz 16 besedilnih oznak, nekatere vklopiti ali izklopiti, to storim tako, da izkoristim atribut 'bco', ki za vklop preide (na primer) iz temno sive v belo (če je v črni pravokotnik) in obratno za izklop.
V moji aplikaciji se mi je zdelo neuporabno pošiljati 16 ukazov na serijska vrata v 16 različnih trenutkih, po enega za vsak 'bco' od 16 signalov.
Raje namesto tega Arduino zbira, kateri signali morajo biti 'vklopljeni' (HIGH) in kateri morajo biti 'off' (LOW) v 16-bitnem registru, kjer vsak bit ustreza enemu od 16 signalov Nextion.
Po posodobitvi vsakega bita registra prenesem njegovo vrednost v Nextion, eno samo sporočilo, ki vsebuje zbirne podatke o 16 elementih.
Na ta način se komunikacija iz Arduina in Nextiona znatno zmanjša, ker se v tem enotnem sporočilu, ki se po serijski pošilja na Nextion, zbirajo informacije, ki bi sicer zahtevale prenos 16 sporočil.
Res je, da ni vedno treba posodobiti vseh poročil, vendar sem prepričan, da bi s tem drugače izgubili več časa.
Seveda bo moral vsak bit, ki ga vsebuje celo število, ki ga je prejel Arduino, zaslon Nextion povezati z želenim atributom.
To pomeni, da mora biti koda napisana na zaslonu Nextion, vendar se ne ustrašite: če mi uspe …
Potem je dvojna prednost: Arduino bo imel lažjo kodo in se bo manj ukvarjal s serijsko komunikacijo z Nextionom.
Nextion jih bo po prejemu podatkov v enem sporočilu porabil veliko hitreje, kot če bi čakal na 16 sporočil. Vklop ali izklop 16 signalov bo torej skoraj sočasen glede na najbolj običajen način, v katerem čas za neznano število sporočil preteče med izvajanjem ukaza za prvo signalizacijo in ukazom za zadnjo signalizacijo.
Na zaslonu Nextion sem ta sistem ustvaril na klasičen način, to pomeni, da vsakič, ko obrnete register 'mask', lahko pregledate vsakega od 16 bitov. Ko je preučeni bit VISOK, signal, povezan s tem bitom, zasveti na zaslonu in se izklopi, ko je bit NIZKA.
"Negativni" vidik tega sistema je, da je koda, napisana na zaslonu Nextion, manj priročna za dokumentiranje kot koda Arduino. Poleg tega obstaja nevarnost, da bo koda Nextion razpršena po različnih predmetih. Paziti morate, da takoj dokumentirate, kaj počnete.
Notepad ++ uporabljam za pisanje kode, ki jo nato kopiram v objekt Nextion, ki je skoraj izključno v tm0 strani 0.
Sintaksa jezika Nextion ima številne omejitve, vendar jih uspe premagati ali jih obiti z minimalnim naporom in poskušati na težave gledati tudi z nenavadnega vidika.
Kot primer navajam način, na katerega Arduino zapiše register, ki ga je treba poslati, ki sem ga napisal na najbolj elementaren način.
1. korak: Kako se register prenaša
V datoteki ArduinoCode. PDF prikažem vso svojo skico. (Branje kode tukaj ni tako jasno)
Tukaj spodaj želim samo pokazati, na kakšen način Arduino pošlje 16 -bitni register v Nextion, brez pomoči knjižnic, vendar le ob upoštevanju skladnje, ki jo opisuje ITEAD.
//***************************************************************************************
void NexUpd ()
//***************************************************************************************
{
SRSerial.print ("vINP.val =");
SRSerial.print (InpReg); // pošlje 16 zbranih bitov na Nextion Display
SRSerial.print (InpReg); // pošlje 16 zbranih bitov na Nextion Display
SRSerial.write (termin); // 255
SRSerial.write (termin); // 255
SRSerial.write (termin); // 255
}
//***************************************************************************************
2. korak:.. Toda prej…
Seveda se koda začne z vsemi deklaracijami in nastavitvijo ().
Vhodi so INPUT_PULLUP, zato so vhodna stikala običajno odprta in ko so zaprta, uporabijo GND na ustrezni vhod.
(To je moj prvi Instructable in žal mi je, da vam na tako slab način pokažem svojo kodo. Prenesite datoteko ArduinoCode. PDF, da je zelo jasna.
Naj povem več o tem
Razvil sem svoj način, da na zaslonu Nextion 'povem', kaj mora narediti. Običajno MCU (v mojem primeru Arduino) pošlje sporočilo za vsako posamezno različico, ki velja za atribut katerega koli posameznega objekta. Ta metoda izgubi veliko časa za stvari, ki niso vedno tako nujne za neprekinjeno nalaganje serijske linije. Ugotovil sem, da je bolj priročno, da Arduino v 16 -bitne registre zbira podatke o atributih, ki se razlikujejo glede na Nextion. Približno vsakih 500 mS moj Arduino pošlje Nextionu eno sporočilo, ki vsebuje 16 bitov v vsakem registru hkrati. Očitno v Nextionu potrebujemo kodo, ki obravnava, kaj je treba izvesti. Ta porazdelitev naloge (in kode) omogoča številne druge prednosti. Na primer, pomislite, kako utripati luč! Z mojim pristopom je enostavno: nastavite malo v register Arduino in ga pošljite v Nextion. Registre dvojčkov Nextion je bilo mogoče zelo redko posodobiti iz Arduina, ker je frekvenca utripanja neodvisna od komunikacije; frekvenca utripanja je odvisna od predmeta Timer v Nextion in lahko deluje z najmanjšo časovno osnovo blizu 50 mS. Tako lahko z mojo metodo utripamo luč v Nextionu pri relativno visoki frekvenci (recimo 2 Hz), tudi če moj Arduino pošilja sporočila vsakih 10 sekund, samo za skrajni primer. To lahko nakazuje nasprotno težavo: kako ravnati, če komunikacija ne uspe? To ni predmet te razprave, vendar sem to težavo že rešil z nekakšnim Watch Dogom: eden znotraj kode Arduino, drugi v kodo Nextion.
Utripanje ureja koda Nextion, kjer vsaka lučka sledi njegovim pravilom: VKLOP/IZKLOP ali ZELENA/RDEČA ali pa tudi spreminjanje napisanega v notranjosti (ali kaj drugega). O svojem projektu bi lahko povedal še nekaj drugih stvari, vendar raje počakam na vaša vprašanja, preden dodam preveč besed, ki jih ni tako enostavno prevesti, kot bi jih.
3. korak: Urejanje objektov Nextion
Tukaj je del kode, ki sem jo napisal z urejevalnikom Nextion na objektu tm0.
Ne uhaja nam v oči, da pri 16 bitih, prejetih od Arduina, zaslon Nextion ne vklopi in izklopi samo signalov. Zaenkrat razlage izpustim, da ne otežim razumevanja.
Sem začetnik in zato je bolje, da namesto tega preberete zmedeno kodo, prenesite stran Nextion code. PDF. (Žal mi je to prvi pouk)
Če želite, lahko prenesete celotno kodo "HMI" za to mojo aplikacijo. Ime datoteke te kode je POW1225. HMI. Lahko se zažene v zaslon Nextion NX4024T032, vendar, da ga razumete, morate plavati v številne predmete in pogledati kodo v majhnem oknu urejevalnika. Zato menim, da bo tako lažje videti glavno kodo, zapisano v datoteki Nextion code. PDF
// Projekt POW1225. HMI 15. maj 2019
// VACC (va0) Akumulator
// vINP (va1) Vhodni register xxxx xxxx xxxx xxxx
tm0.en = 1 // tm0 Začni
tm0.tim = 50 // tm0 Časovna osnova 50 mS
// RDY ***************
vACC.val = vINP.val & 0x0001 // Maska
if (vACC.val! = 0) // Preizkusi RDY
{
tRDY.pco = MODRA // RDEČA
} drugo
{
tRDY.pco = SIVA // temno SIVA
}
// PWR ***************
vACC.val = vINP.val & 0x0002
if (vACC.val! = 0) // Preizkusite PWR
{
tPWR.pco = ZELENO // svetlo ZELENO
tPON.txt = "ON" // ON
tPON.pco = ZELENO // svetlo ZELENO
} drugo
{
tPWR.pco = SIVA // temno SIVA 33808
tPON.txt = "OFF" // OFF
tPON.pco = SIVA // temno SIVA 33808
}
// SUHO ***************
vACC.val = vINP.val & 0x0004
if (vACC.val! = 0) // Test DRY
{
tDRV.pco = MODRA // MODRA
tDRY.pco = MODRA // MODRA
} drugo
{
tDRV.pco = SIVA // temno SIVA 33808
tDRY.pco = SIVA // temno SIVA 33808
}
// RUN ***************
vACC.val = vINP.val & 0x0018
if (vACC.val! = 0) // Test RUN
{
tRUN.bco = RDEČA // MARCIA RDEČA (vklopljena)
tRUN.pco = ČRNO // na ČRNO
tDIR.bco = RDEČA // DIR RDEČA
tDIR.pco = ČRNO // na ČRNO
} drugo
{
tRUN.bco = 32768 // MARCIA GREY (izklopljeno)
tRUN.pco = SIVA // na SIVI
tDIR.bco = 32768 // DIR temno ZELENA 1024
tDIR.pco = SIVA // DIR SIVA
tDIR.txt = "---" // STOP
}
// LEVO **************
vACC.val = vINP.val & 0x0008
if (vACC.val! = 0) // Test RUN Desno
{
tDIR.txt = "<<<" // DIR LEVO
}
// PRAV *************
vACC.val = vINP.val & 0x0010
if (vACC.val! = 0) // Test RUN Left
{
tDIR.txt = ">>>" // DIR DESNO
}
// OBOJE **************
vACC.val = vINP.val & 0x0018
if (vACC.val == 24) // Preizkusite RUN oboje
{
tDIR.txt = ">>! <<" // DIR OBA
}
// TEST **************
vACC.val = vINP.val & 0x0020
if (vACC.val! = 0) // Test TEST
{
tTEST.pco = BELO // BELO
tsw tTEST, 1 // Omogoči dogodke na dotik
} drugo
{
tTEST.pco = SIVA // temno SIVA 33808
tsw tTEST, 0 // Onemogoči dogodke na dotik
}
// NAPAKA *************
vACC.val = vINP.val & 0x0040
if (vACC.val == 0) // Preverite napako
{
tFLT.pco = SIVA // NAPAKA odsotna
}
če (vACC.val! = 0)
{
tFLT.pco = RUMENA // NAPAKA prisotna
}
// EME ***************
vACC.val = vINP.val & 0x0080
if (vACC.val == 0) // Preizkusite EME
{
tEME.pco = SIVA // EME odsoten
}
če (vACC.val! = 0)
{
tEME.pco = RDEČA // EME prisotna
}
}
// FERMO *************
vACC.val = vINP.val & 0x0100
if (vACC.val! = 0) // Preizkusite FERMO
{
tFER.pco = ČRNA // ČRNA
tFER.bco = ZELENO // ZELENO
} drugo
{
tFER.pco = SIVA // SIVA
tFER.bco = 672 // temno ZELENA
}
// *******************
Priznanje
Gideonu Rossouwvu se želim zahvaliti, ker sem ob branju njegovih navodil hitro dosegel del svojih ciljev. Hvala g. Gideon Rossouwv
Priporočena:
Diy makro objektiv z AF (drugačen od vseh drugih makro objektivov DIY): 4 koraki (s slikami)
Naredite sami makro objektiv z AF (drugačen od vseh drugih makro objektivov »naredi sam«): videl sem veliko ljudi, ki izdelujejo makro objektive s standardnim objektivom (običajno 18-55 mm). Večina jih je leča, ki se lepi na kamero nazaj ali pa odstranite sprednji element. Za obe možnosti obstajata slabe strani. Za namestitev objektiva
Premikajoči se OLOID - drugačen hišni ljubljenček v različnih časih: 10 korakov (s slikami)
Premikajoči se OLOID - drugačen hišni ljubljenček v različnih časih: Korona nam je spremenila življenje: od nas zahteva fizično distanco, kar vodi v družbeno distanciranje. Kaj bi torej lahko bila rešitev? Mogoče hišni ljubljenček? Ampak ne, Corona prihaja iz živali. Rešimo se še ene Corone 2.0. Če pa imamo
Merjenje srčnega utripa je na konici prsta: pristop fotopletizmografije k določanju srčnega utripa: 7 korakov
Merjenje srčnega utripa je na dosegu roke: Fotopletizmografski pristop k določanju srčnega utripa: Fotopletizmograf (PPG) je preprosta in poceni optična tehnika, ki se pogosto uporablja za odkrivanje sprememb volumna krvi v mikrovaskularni postelji tkiva. Večinoma se uporablja neinvazivno za meritve na površini kože, običajno
Kako spremeniti oblikovanje v profesionalno PCB ploščo - Moj pristop: 9 korakov
Kako spremeniti oblikovanje v profesionalno PCB ploščo | Moj pristop: V tem prispevku bom predstavil svoj pristop k izgradnji profesionalne plošče iz PCB v zelo malo podrobnih korakih. Vdelal sem tudi videoposnetek istega, ki si ga lahko ogledate ali nadaljujete z branjem objave za podrobno razlago. Zato začnimo z
Analiza sistema Windows Windows - pristop zaznavanja senzorjev: 7 korakov (s slikami)
Analiza sistema Windows Windows - pristop SensorTag: V nadaljevanju bom naredil analizo operacijskega sistema Windows (OS) z vidika komunikacije z napravami Bluetooth z nizko porabo energije - v našem primeru z različnimi vrstami oznak senzorjev: Thunderboard React, Thunderboard Sense (b