Indholdsfortegnelse:

En anden tilgang med Nextion: 3 trin
En anden tilgang med Nextion: 3 trin

Video: En anden tilgang med Nextion: 3 trin

Video: En anden tilgang med Nextion: 3 trin
Video: Как сделать фундамент, бетонные полы и крыльцо своими руками 2024, November
Anonim
En anden tilgang med Nextion
En anden tilgang med Nextion

I mit første projekt med Arduino Nano forbundet til Nextion touch display, havde jeg skrevet en lang række kommandoer, der skulle kommunikeres til Nextion via den serielle port, og dette er uundgåeligt, hvis vi skal sende totalt uafhængige kommandoer i tilfældige øjeblikke.

Jeg må også indrømme, at jeg brugte mere tid på at 'kæmpe' med biblioteker end noget andet. Så jeg kom gradvist til at arbejde helt uden de tunge ITEAD -biblioteker.

Jeg indså hurtigt, at jeg ikke havde nogen hastende karakter til at kommunikere ændringerne i attributterne for visuelle objekter til Nextion, men jeg foretrækker at vente, indtil jeg samlede dem og sende dem til Nextion som helhed, da jeg fik en komplet gruppe.

Jeg vil prøve at forklare mig bedre.

Når jeg i mit projekt består af 16 tekstindikationer, jeg vil tænde eller slukke nogle af dem, gør jeg det ved at udnytte attributten 'bco', der for at tænde, f.eks. Går fra mørkegrå til hvid (hvis i et sort rektangel), og omvendt for at slukke.

I min ansøgning fandt jeg det nytteløst at sende 16 kommandoer til den serielle port i 16 forskellige øjeblikke, en for hver 'bco' af de 16 signaler.

Jeg foretrækker i stedet, at Arduino indsamler, hvilke signaler der skal være 'tændt' (HIGH), og hvilke der skal være 'off' (LOW) i et 16-bit register, hvor hver bit svarer til en af de 16 signaler af Nextion.

Efter at have opdateret hver bit i registret, overfører jeg dens værdi til Nextion, en enkelt besked, der indeholder en kollektiv information vedrørende 16 elementer.

På denne måde reduceres kommunikationen fra Arduino og Nextion betydeligt, fordi i den eneste besked, der sendes på serien til Nextion, indsamles oplysninger, som ellers ville have krævet transmission af 16 meddelelser.

Det er rigtigt, at det ikke altid er nødvendigt at opdatere alle rapporter, men jeg er sikker på, at det ellers ville spilde mere tid at gøre andet.

Hver bit indeholdt i heltalet modtaget af Arduino skal Nextion -displayet naturligvis knytte det til den ønskede attribut.

Det betyder, at kode skal skrives i Nextion -displayet, men det skal ikke skræmme: hvis det lykkedes mig …

Så er der en dobbelt fordel: Arduino vil have en lettere kode og vil være mindre engageret i seriel kommunikation med Nextion.

Nextion efter at have modtaget dataene i en enkelt besked, vil bruge dem meget hurtigere, end hvis det skulle vente på 16 meddelelser. Tænding eller slukning af 16 signaler vil derfor være næsten samtidig med hensyn til den mest sædvanlige tilstand, hvor tiden for et ukendt antal meddelelser forløber mellem udførelsen af kommandoen for den første signalering og kommandoen for den sidste signalering.

I Nextion -displayet oprettede jeg dette system på den klassiske måde, det vil sige at dreje et 'maske' register hver gang giver dig mulighed for at undersøge hver af de 16 bits. Når den undersøgte bit er HØJ, lyser signalet, der er knyttet til den bit, på displayet og slukker, når en bit er LAV.

Det 'negative' aspekt af dette system er, at koden, der er skrevet i Nextion -displayet, er mindre praktisk at dokumentere end Arduino -koden. Desuden risikerer Nextion -koden at blive spredt over forskellige objekter. Man skal passe på med at dokumentere, hvad man gør med det samme.

Jeg bruger Notepad ++ til at skrive koden, som jeg derefter kopierer til Nextion -objektet, som næsten udelukkende er i tm0 på side 0.

Syntaxen for Nextion -sproget har mange begrænsninger, men det formår at overvinde dem eller komme uden om dem med et minimum af indsats og forsøge at se problemerne fra synspunkter, der også er usædvanlige.

Som et eksempel rapporterer jeg den måde, hvorpå Arduino skriver det register, der skal transmitteres, skrevet af mig på den mest elementære måde.

Trin 1: Sådan sendes registret

I filen ArduinoCode. PDF viser jeg hele min skitse. (At læse koden her nede er ikke så klart)

Her nede vil jeg kun vise på hvilken måde Arduino sender 16 bit Register til Nextion, uden hjælp fra bibliotekerne, men jus respekterer syntaksen beskrevet af ITEAD.

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

ugyldig NexUpd ()

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

{

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

SRSerial.print (InpReg); // overfør de 16 indsamlede bits til Nextion Display

SRSerial.print (InpReg); // overfør de 16 indsamlede bits til Nextion Display

SRSerial.write (termin); // 255

SRSerial.write (termin); // 255

SRSerial.write (termin); // 255

}

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

Trin 2:.. Men før…

.. Men før…
.. Men før…

Koden starter selvfølgelig med alle deklarationer og opsætningen ().

Indgangene er INPUT_PULLUP, så inputkontakterne er normalt åbne, og når de lukkes, anvender de GND på korrespondentindgangen.

(Dette er min første instruks, og jeg er ked af at vise dig min kode på denne dårlige måde. Download venligst filen ArduinoCode. PDF, at den er meget klar.

Lad mig tale mere om det

Jeg har udviklet min egen måde at 'fortælle' til Nextion -displayet, hvad den skal gøre. Normalt sender MCU'en (Arduino i mit tilfælde) en besked for hver enkelt variation, der skal gælde for attributten for et enkelt objekt. Denne metode spilder meget tid på at gøre ting, der ikke altid er så presserende for at indlæse serielinjen kontinuerligt. Jeg fandt mere bekvemt, at Arduino indsamler i 16 bit -registre de oplysninger om attributterne, der skal variere på Nextion. Omkring hver 500 mS sendte min Arduino en meddelelse til Nextion med den 16 bit, der var indeholdt i hvert register til enhver tid. Det er klart, at vi i Nextion har brug for koden, der håndterer det, der skal udføres. Denne fordeling af opgaven (og koden) giver mange andre fordele. Tænk for eksempel på, hvordan man får blink til at lyse! Med min tilgang er det let: sæt lidt ind i Arduino -registret og send det til Nextion. Nextion -tvillingregisterne kunne meget sjældent opdateres fra Arduino, fordi blinkfrekvensen er uafhængig af kommunikationen; blinkfrekvensen afhænger af et timerobjekt til Nextion og kan køre med en minimumsbasis på nær 50 mS. Så med min metode kan vi blinke et lys i Nextion med en relativt høj frekvens (antag 2 Hz), selvom min Arduino sender beskeder hvert 10. sekund, bare for et ekstremt eksempel. Dette kan tyde på det modsatte problem: Hvordan gør man, hvis kommunikationen mislykkes? Dette er ikke genstand for denne diskussion, men jeg har allerede løst dette problem med en slags Watch Dog: en inde i Arduino -koden, en anden i Nextion -koden.

Blinkningen reguleres af Nextion -koden, hvor hvert lys følger hans korrekte regler: TIL/FRA eller GRØN/RØD eller også ændring af det indvendige (eller andet mere). Jeg kunne fortælle nogle andre ting om mit projekt, men jeg foretrækker at vente på dine spørgsmål, før jeg tilføjer for mange ord, der ikke er så lette for mig at oversætte godt, som jeg ville.

Trin 3: Redigering af Nextion -objekterne

Redigering af Nextion -objekterne
Redigering af Nextion -objekterne

Her er en del af koden, jeg skrev med Nextion Editor på tm0 -objektet.

Det undgår ikke vores bemærkning, at med de 16 bit modtaget fra Arduino, Nextion -displayet ikke bare tænder og slukker signalerne. I øjeblikket udelader jeg forklaringerne for ikke at komplicere forståelsen.

Jeg er nybegynder, og derfor er det bedre at downloade Nextion -kode. PDF -siden i stedet for at læse den forvirrede kode her nede. (Beklager, det er min første instruktion)

Hvis du ønsker det, kan du downloade den komplette kode "HMI" til denne min applikation. Filnavnet på denne kode er POW1225. HMI. Det kan løbe ind i din Nextion -skærm NX4024T032, men for at forstå det skal du svømme ind i mange objekter og se koden inde i editorens lille vindue. Så jeg tror, det vil være lettere at se hovedkoden, skrevet i filen Nextion code. PDF

// Projekt POW1225. HMI 15. maj 2019

// vACC (va0) Akkumulator

// vINP (va1) Inputregister xxxx xxxx xxxx xxxx

tm0.da = 1 // tm0 Start

tm0.tim = 50 // tm0 Tidsgrundlag 50 mS

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

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

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

{

tRDY.pco = BLÅ // RØD

}andet

{

tRDY.pco = GRÅ // mørk GRÅ

}

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

vACC.val = vINP.val & 0x0002

hvis (vACC.val! = 0) // Test PWR

{

tPWR.pco = GRØN // lys GRØN

tPON.txt = "ON" // ON

tPON.pco = GRØN // lys GRØN

}andet

{

tPWR.pco = GRÅ // mørk GRÅ 33808

tPON.txt = "OFF" // OFF

tPON.pco = GRÅ // mørk GRÅ 33808

}

// TØR ***************

vACC.val = vINP.val & 0x0004

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

{

tDRV.pco = BLÅ // BLÅ

tDRY.pco = BLÅ // BLÅ

}andet

{

tDRV.pco = GRÅ // mørk GRÅ 33808

tDRY.pco = GRÅ // mørk GRÅ 33808

}

// LØB ***************

vACC.val = vINP.val & 0x0018

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

{

tRUN.bco = RØD // MARCIA RØD (on)

tRUN.pco = SORT // på SORT

tDIR.bco = RØD // DIR RØD

tDIR.pco = SORT // på SORT

}andet

{

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

tRUN.pco = GRÅ // på GRÅ

tDIR.bco = 32768 // DIR mørkegrøn 1024

tDIR.pco = GRÅ // DIR GRÅ

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

}

// VENSTRE **************

vACC.val = vINP.val & 0x0008

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

{

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

}

// RET *************

vACC.val = vINP.val & 0x0010

hvis (vACC.val! = 0) // Test RUN venstre

{

tDIR.txt = ">>>" // DIR HØJRE

}

// BEGGE **************

vACC.val = vINP.val & 0x0018

hvis (vACC.val == 24) // Test KØR begge

{

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

}

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

vACC.val = vINP.val & 0x0020

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

{

tTEST.pco = HVID // HVID

tsw tTEST, 1 // Aktiver Touch -begivenheder

}andet

{

tTEST.pco = GRÅ // mørk GRÅ 33808

tsw tTEST, 0 // Deaktiver berøringshændelser

}

// FEJL **************

vACC.val = vINP.val & 0x0040

hvis (vACC.val == 0) // Test FEJL

{

tFLT.pco = GRÅ // FEJL fraværende

}

hvis (vACC.val! = 0)

{

tFLT.pco = GUL // FEJL til stede

}

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

vACC.val = vINP.val & 0x0080

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

{

tEME.pco = GRÅ // EME fraværende

}

hvis (vACC.val! = 0)

{

tEME.pco = RØD // EME til stede

}

}

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

vACC.val = vINP.val & 0x0100

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

{

tFER.pco = SORT // SORT

tFER.bco = GRØN // GRØN

}andet

{

tFER.pco = GRÅ // GRÅ

tFER.bco = 672 // mørk GRØN

}

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

Anerkendelse

Jeg vil give mine anerkendelser til Gideon Rossouwv, fordi jeg hurtigt har fået en del af mine mål ved at læse hans instruktioner. Tak mr. Gideon Rossouwv

Anbefalede: