Indholdsfortegnelse:
Video: En anden tilgang med Nextion: 3 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
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…
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
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:
En anden for det meste 3D -printet drejekontakt: 7 trin (med billeder)
En anden for det meste 3D -printet drejeskift: For et stykke tid siden oprettede jeg en for det meste 3D -udskrevet drejeskifte specielt til mit Minivac 601 -replika -projekt. Til mit nye Think-a-Tron 2020-projekt har jeg brug for endnu en drejekontakt. Jeg leder efter en SP5T panelmonteret switch. En tilføjelse
En anden MIDI til CV -boks: 7 trin (med billeder)
En anden MIDI til CV -boks: En anden MIDI til CV -boks er et projekt, jeg udviklede, da en Korg MS10 bankede på min dør og fandt sted i mit studie. Da mit setup stærkt relaterer sig til MIDI til at automatisere og synkronisere alle instrumenterne, da jeg købte MS10 det første problem, jeg havde
HV isolator vedhængslamper og anden unik accentbelysning: 8 trin (med billeder)
HV isolator vedhængslamper og anden unik accentbelysning: Jeg gik på en tangent en dag og begyndte at lave forskellige lamper. Jeg 3D -printede nogle dele og fik det meste af resten fra Lowes og dollarbutikken. Det bedste fund var, da jeg så en spand med elpælsisolatorer ved et stalgsalg. De var $ 3 hver. Derefter
Windows Bluetooth -systemanalyse - en SensorTag -tilgang: 7 trin (med billeder)
Windows Bluetooth -systemanalyse - en SensorTag -tilgang: I det følgende vil jeg foretage en analyse af Windows -operativsystemet (OS) ud fra kommunikation med Bluetooth Low Energy -enheder - i vores tilfælde med forskellige typer SensorTags: Thunderboard React, Thunderboard Sense (b
Master din mikro: bit med Arduino IDE-knap og anden GPIO: 3 trin (med billeder)
Master din mikro: bit Med Arduino IDE-Knap og anden GPIO: I vores tidligere blog Master din mikro: bit med Arduino IDE - - Light LED, vi har talt om, hvordan du installerer micro: bit bibliotek på Arduino IDE og hvordan at drive LED på micro: bit med Arduino IDE. I denne artikel vil vi fortælle dig h