Innehållsförteckning:
Video: Ett annat tillvägagångssätt med Nextion: 3 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
I mitt första projekt med Arduino Nano ansluten till Nextion pekskärm hade jag skrivit en lång rad kommandon som skulle kommuniceras till Nextion via serieporten och detta är oundvikligt om vi behöver skicka helt oberoende kommandon i slumpmässiga ögonblick.
Jag måste också erkänna att jag ägnade mer tid åt att "slåss" med biblioteken än något annat. Så jag kom gradvis till jobbet helt utan de tunga ITEAD -biblioteken.
Jag insåg snart att jag inte hade någon brådska att kommunicera ändringarna i attributen för visuella objekt till Nextion, men jag föredrar att vänta tills jag samlat dem och skicka dem till Nextion som helhet, när jag fick en komplett grupp.
Jag ska försöka förklara mig bättre.
När jag i mitt projekt består av 16 textindikationer vill jag slå på eller av några av dem, gör jag det genom att dra nytta av attributet 'bco' som för att slå på, övergår (till exempel) från mörkgrått till vitt (om i en svart rektangel), och vice versa för att stänga av.
I min applikation tyckte jag att det var meningslöst att skicka 16 kommandon till serieporten i 16 olika ögonblick, en för varje "bco" av de 16 signalerna.
Jag föredrar istället att Arduino samlar vilka signaler som måste vara 'på' (HIGH) och vilka som måste vara 'off' (LOW) i ett 16-bitars register, där varje bit motsvarar en av de 16 signalerna av Nextion.
Efter att ha uppdaterat varje bit i registret överför jag dess värde till Nextion, ett enda meddelande som innehåller en kollektiv information om 16 element.
På detta sätt reduceras kommunikationen från Arduino och Nextion avsevärt eftersom i det enda meddelandet som överförs på serien till Nextion, samlas information in som annars skulle ha krävt överföring av 16 meddelanden.
Det är sant att det inte alltid är nödvändigt att uppdatera alla rapporter, men jag är säker på att att göra annat skulle slösa mer tid.
Naturligtvis måste varje bit i heltalet som tas emot av Arduino, Nextion -displayen koppla den till det önskade attributet.
Det betyder att koden måste skrivas i Nextion -displayen, men den ska inte vara rädd: om jag lyckades …
Sedan finns det en dubbel fördel: Arduino kommer att ha en lättare kod och kommer att vara mindre engagerad i seriell kommunikation med Nextion.
Nextion efter att ha tagit emot data i ett enda meddelande, kommer att använda dem mycket snabbare än om det skulle vänta på 16 meddelanden. Slå på eller av 16 signaler kommer därför att vara nästan samtidiga med avseende på det vanligaste läget, i vilket tiden för ett okänt antal meddelanden förflutit mellan utförandet av kommandot för den första signalen och kommandot för den sista signalen.
I Nextion -displayen skapade jag detta system på det klassiska sättet, det vill säga genom att vrida ett "mask" -register varje gång kan du undersöka var och en av de 16 bitarna. När den undersökta biten är HÖG lyser signalen som är associerad med den biten på displayen och stängs av när en bit är LÅG.
Den "negativa" aspekten av detta system är att koden som skrivs i Nextion -displayen är mindre bekväm att dokumentera än Arduino -koden. Dessutom riskerar Nextion -koden att spridas över olika objekt. Var noga med att dokumentera vad du gör direkt.
Jag använder Anteckningar ++ för att skriva koden som jag sedan kopierar till Nextion -objektet som nästan uteslutande finns på tm0 på sidan 0.
Syntaxen för Nextion -språket har många begränsningar, men det lyckas övervinna dem eller komma runt dem med ett minimum av ansträngning och försöka se problemen från synvinklar som också är ovanliga.
Som exempel rapporterar jag hur Arduino skriver det register som ska överföras, skrivet av mig på det mest elementära sätt som möjligt.
Steg 1: Hur registret överförs
I filen ArduinoCode. PDF visar jag hela min skiss. (Att läsa koden här ner är inte så tydligt)
Här ner vill jag bara visa på vilket sätt Arduino skickar 16 -bitarsregistret till Nextion, utan hjälp av biblioteken, men bara respekterar syntaxen som beskrivs av ITEAD.
//***************************************************************************************
void NexUpd ()
//***************************************************************************************
{
SRSerial.print ("vINP.val =");
SRSerial.print (InpReg); // överför de 16 samlade bitarna till Nextion Display
SRSerial.print (InpReg); // överför de 16 samlade bitarna till Nextion Display
SRSerial.write (termin); // 255
SRSerial.write (termin); // 255
SRSerial.write (termin); // 255
}
//***************************************************************************************
Steg 2:.. Men innan…
Naturligtvis börjar koden med alla deklarationer och setup ().
Ingångarna är INPUT_PULLUP, så ingångsbrytarna är normalt öppna och när de är stängda tillämpar de GND på korrespondentingången.
(Detta är min första instruerbara och jag är ledsen att visa dig min kod på detta dåliga sätt. Ladda ner filen ArduinoCode. PDF att det är mycket tydligt.
Låt mig prata mer om det
Jag har utvecklat mitt eget sätt att "berätta" för Nextion -displayen vad den måste göra. Vanligtvis skickar MCU (Arduino i mitt fall) ett meddelande för varje variant att gälla attributet för ett enda objekt. Denna metod slösar bort mycket tid på att göra saker som inte alltid är så brådskande att kontinuerligt ladda serielinjen. Jag tyckte det var mer bekvämt att Arduino samlar in 16 -bitarsregister informationen om attributen som ska variera på Nextion. Ungefär var 500 mS skickade min Arduino ett meddelande till Nextion med 16 bitar i varje register. Självklart behöver vi i Nextion koden som hanterar det som måste utföras. Denna fördelning av uppgiften (och koden) ger många andra fördelar. Tänk till exempel hur man gör att blinka ett ljus! Med mitt tillvägagångssätt är det enkelt: sätt in lite i Arduino -registret och skicka det till Nextion. Nextion -tvillingregistren skulle kunna uppdateras från Arduino mycket sällan, eftersom blinkfrekvensen är oberoende av kommunikationen; blinkfrekvensen beror från ett timerobjekt till Nextion och kan köras med en minsta tidsbas nära 50 mS. Så med min metod kan vi blinka ett ljus i Nextion vid relativt hög frekvens (antar 2 Hz), även om min Arduino skickar meddelanden var tionde sekund, bara för ett extremt exempel. Detta kan föreslå det motsatta problemet: hur gör man om kommunikationen misslyckas? Detta är inte föremålet för denna diskussion, men jag har redan löst detta problem med en slags Watch Dog: en inuti Arduino -koden, en annan i Nextion -koden.
Blinkningen regleras av Nextion -koden, där varje lampa följer sina riktiga regler: PÅ/AV eller GRÖN/RÖD eller också ändra den inskrivna insidan (eller annat mer). Jag kan berätta några andra saker om mitt projekt men jag föredrar att vänta på dina frågor innan jag lägger till för mycket ord som inte är så lätt för mig att översätta så bra som jag skulle.
Steg 3: Redigera Nextion -objekt
Här är en del av koden jag skrev med Nextion Editor på tm0 -objektet.
Det undgår inte att vi känner till att med de 16 bitar som mottagits från Arduino, Nextion -displayen inte bara slår på och av signalerna. För tillfället utelämnar jag förklaringarna för att inte försvåra förståelsen.
Jag är nybörjare och det är därför bättre att ladda ner Nextion code. PDF -sidan istället för att läsa den förvirrade koden här ner. (Jag är ledsen att detta är min första instruerbara)
Om du vill kan du ladda ner hela koden "HMI" för denna min applikation. Filnamnet för denna kod är POW1225. HMI. Det kan springa in i din Nextion -skärm NX4024T032 men för att förstå det måste du simma in i många objekt och titta på koden inuti redaktörens lilla fönster. Så jag tror att det blir lättare att titta på huvudkoden, skriven i filen Nextion code. PDF
// Projekt POW1225. HMI 15 maj 2019
// vACC (va0) Ackumulator
// vINP (va1) Inmatningsregister xxxx xxxx xxxx xxxx
tm0.sv = 1 // tm0 Start
tm0.tim = 50 // tm0 Tidsbas 50 mS
// RDY ****************
vACC.val = vINP.val & 0x0001 // Mask
if (vACC.val! = 0) // Testa RDY
{
tRDY.pco = BLÅ // RÖD
}annan
{
tRDY.pco = GRÅ // mörk GRÅ
}
// PWR ****************
vACC.val = vINP.val & 0x0002
if (vACC.val! = 0) // Testa PWR
{
tPWR.pco = GRÖN // ljus GRÖN
tPON.txt = "ON" // ON
tPON.pco = GRÖN // ljus GRÖN
}annan
{
tPWR.pco = GRÅ // mörk GRÅ 33808
tPON.txt = "AV" // AV
tPON.pco = GRÅ // mörk GRÅ 33808
}
// TORR ***************
vACC.val = vINP.val & 0x0004
if (vACC.val! = 0) // Test DRY
{
tDRV.pco = BLÅ // BLÅ
tDRY.pco = BLÅ // BLÅ
}annan
{
tDRV.pco = GRÅ // mörk GRÅ 33808
tDRY.pco = GRÅ // mörk GRÅ 33808
}
// SPRINGA ***************
vACC.val = vINP.val & 0x0018
if (vACC.val! = 0) // Test RUN
{
tRUN.bco = RÖD // MARCIA RÖD (på)
tRUN.pco = SVART // på SVART
tDIR.bco = RÖD // DIR RÖD
tDIR.pco = SVART // på SVART
}annan
{
tRUN.bco = 32768 // MARCIA GREY (av)
tRUN.pco = GRÅ // på GRÅ
tDIR.bco = 32768 // DIR dark GREEN 1024
tDIR.pco = GRÅ // DIR GRÅ
tDIR.txt = "---" // STOPP
}
// VÄNSTER **************
vACC.val = vINP.val & 0x0008
if (vACC.val! = 0) // Test RUN Right
{
tDIR.txt = "<<<" // DIR VÄNSTER
}
// HÖGER *************
vACC.val = vINP.val & 0x0010
if (vACC.val! = 0) // Test RUN Left
{
tDIR.txt = ">>>" // DIR RIGHT
}
// Båda ***************
vACC.val = vINP.val & 0x0018
if (vACC.val == 24) // Test RUN båda
{
tDIR.txt = ">>! <<" // DIR BÅDE
}
// TEST ***************
vACC.val = vINP.val & 0x0020
if (vACC.val! = 0) // Test TEST
{
tTEST.pco = VIT // VIT
tsw tTEST, 1 // Aktivera Touch -händelser
}annan
{
tTEST.pco = GRÅ // mörk GRÅ 33808
tsw tTEST, 0 // Inaktivera Touch -händelser
}
// FEL **************
vACC.val = vINP.val & 0x0040
if (vACC.val == 0) // Test FEL
{
tFLT.pco = GRÅ // FEL frånvarande
}
om (vACC.val! = 0)
{
tFLT.pco = GUL // FEL närvarande
}
// EME ****************
vACC.val = vINP.val & 0x0080
if (vACC.val == 0) // Test EME
{
tEME.pco = GRÅ // EME frånvarande
}
om (vACC.val! = 0)
{
tEME.pco = RÖD // EME närvarande
}
}
// FERMO **************
vACC.val = vINP.val & 0x0100
if (vACC.val! = 0) // Test FERMO
{
tFER.pco = SVART // SVART
tFER.bco = GRÖN // GRÖN
}annan
{
tFER.pco = GRÅ // GRÅ
tFER.bco = 672 // mörk GRÖN
}
// *******************
Bekräftelse
Jag vill ge mina erkännanden till Gideon Rossouwv eftersom jag snabbt fått en del av mina mål när jag läste hans instruktioner. Tack mr. Gideon Rossouwv
Rekommenderad:
Hur man lägger till EL Wire i en rock eller annat plagg: 10 steg (med bilder)
Hur man lägger till EL Wire i en rock eller annat plagg: Som upplyst kostymdesigner får jag många frågor från människor som vill veta hur man gör sina egna EL -tråddräkter. Jag har inte tid att hjälpa alla individuellt, så jag tänkte konsolidera mina råd till en instruerbar. Förhoppningsvis
Bygg en Arduino i en Nissan Qashqai för att automatisera vingspegelvikning eller något annat: 9 steg (med bilder)
Bygg en Arduino i en Nissan Qashqai för att automatisera vingspegelfällning eller något annat: Nissan Qashqai J10 har några små irriterande saker om kontrollerna som lätt kan vara bättre. En av dem måste komma ihåg att trycka på speglarnas öppna/stänga omkopplare innan du tar ut nyckeln ur tändningen. En annan är den lilla konfigurationen
Hur man efterliknar en TV -fjärrkontroll eller annat med Arduino Irlib: 3 steg (med bilder)
Hur man efterliknar en TV -fjärrkontroll eller annat med Arduino Irlib: Introduktion Hej alla och välkommen till min första Instructable.Idag lär vi oss, som titeln säger, att emulera en TV -fjärrkontroll eller något liknande som fungerar med infraröda signaler med Arduino (vilken modell som helst) .Problemet var: Hur kan jag överföra koder till en
Ett annat USB -nyckelhölje, den här gången för de analoga fotograferna: 3 steg
Ett annat USB -nyckelhölje, den här gången för de analoga fotograferna: Jag hade en usb -nyckel liggande på mitt skrivbord en stund, höljet hade spruckit och öppnats och jag förvarade det tills jag hittade rätt ersättningshölje. Jag hoppas att den analoga känslan av det kommer att snälla filmfotograferna på instruktioner
Ett annat bärbart stativ (otro Soporte Para Notebook): 4 steg (med bilder)
Ytterligare ett bärbart stativ (otro Soporte Para Notebook): För favorit, se även en https://www.instructables.com/id/Mejoras-al-Soporte-para-laptops-laptops-stand-enhan/ Mi notebook tiene un problemita : la pantalla parpadea a ratos (arreglado a fines de setiembre 2010, era un contacto flojo). Men jag