Sisukord:

Erinev lähenemine Nextioniga: 3 sammu
Erinev lähenemine Nextioniga: 3 sammu

Video: Erinev lähenemine Nextioniga: 3 sammu

Video: Erinev lähenemine Nextioniga: 3 sammu
Video: 10 самых АТМОСФЕРНЫХ мест Дагестана. БОЛЬШОЙ ВЫПУСК #Дагестан #ПутешествиеПоДагестану 2024, Detsember
Anonim
Nextioniga teistsugune lähenemine
Nextioniga teistsugune lähenemine

Oma esimeses projektis, kus Arduino Nano oli ühendatud Nextioni puutetundliku ekraaniga, olin kirjutanud pika seeria käske, mida Nextionile jadaporti kaudu edastada, ja see on vältimatu, kui peame saatma täiesti sõltumatud käsud juhuslikel hetkedel.

Pean ka tunnistama, et veetsin raamatukogudega võitlemisel rohkem aega kui miski muu. Nii hakkasin tasapisi täiesti ilma raskete ITEADi raamatukogudeta tööle.

Mõistsin peagi, et mul ei ole kiiret vajadust Nextionile visuaalsete objektide atribuutide muudatustest teatada, kuid eelistan oodata, kuni need kokku kogun, ja saata need tervikuna Nextionile.

Püüan ennast paremini selgitada.

Kui oma projektis, mis koosneb 16 tekstinäidust, tahan mõned neist sisse või välja lülitada, kasutan seda atribuudi „bco” abil, mis sisselülitamisel muutub (näiteks) tumehallist valgeks (kui must ristkülik) ja väljalülitamiseks vastupidi.

Leidsin, et minu rakenduses on kasutu saata 16 käsku jadapordile 16 erineval hetkel, üks iga 16 signaali bco kohta.

Eelistan selle asemel, et Arduino koguks 16-bitises registris, millised signaalid peavad olema sisse lülitatud (HIGH) ja millised välja lülitatud (LOW), kus iga bit vastab ühele Nextioni 16 signaalist.

Pärast registri iga bitti värskendamist edastan selle väärtuse Nextionile, ühele sõnumile, mis sisaldab 16 elemendi kohta koguteavet.

Sel moel väheneb Arduino ja Nextioni suhtlus märkimisväärselt, sest selle ühe jada kaudu Nextionile edastatud sõnumi käigus kogutakse teavet, mis muidu oleks nõudnud 16 sõnumi edastamist.

Tõsi, alati pole vaja kõiki aruandeid värskendada, kuid olen kindel, et muidu toimides kuluks rohkem aega.

Loomulikult peab iga Arduino saadud täisarvu bitti Nextioni kuvar seostama selle soovitud atribuudiga.

See tähendab, et kood tuleb Nextioni ekraanile kirjutada, kuid ärge kartke: kui mul see õnnestub…

Siis on kahekordne eelis: Arduinol on kergem kood ja ta tegeleb vähem Nextioniga jadasidega.

Nextion pärast andmete saamist ühes sõnumis kasutab neid palju kiiremini kui 16 sõnumi ootamine. 16 signaali sisselülitamine või väljalülitamine on seega peaaegu samaaegne kõige tavalisema režiimi puhul, mille puhul esimese signaalimise käsu täitmise ja viimase signaalimise käsu vahel möödub tundmatu arvu sõnumite aeg.

Nextioni ekraanil lõin selle süsteemi klassikalisel viisil, see tähendab, et iga kord, kui keerate maskiregistri, saate uurida iga 16 bitti. Kui uuritud bitt on HIGH, süttib selle bitiga seotud signaal ekraanil ja kustub, kui bitt on LOW.

Selle süsteemi negatiivne aspekt on see, et Nextioni ekraanile kirjutatud koodi on vähem mugav dokumenteerida kui Arduino koodi. Lisaks võib Nextioni kood hajutada erinevate objektide vahel. Tuleb hoolitseda selle eest, et dokumenteeriksite kohe, mida teete.

Kasutan Notepad ++ koodi kirjutamiseks, mille seejärel kopeerin Nextioni objekti, mis asub peaaegu eranditult lehe 0 tm0 -s.

Nextioni keele süntaksil on palju piiranguid, kuid see suudab neist üle saada või neist minimaalse pingutusega mööda minna ning püüda näha probleeme ka ebatavalistest vaatenurkadest.

Näitena toon välja viisi, kuidas Arduino kirjutab edastatava registri, mille olen kirjutanud võimalikult elementaarsel viisil.

Samm: kuidas registrit edastatakse

Failis ArduinoCode. PDF näitan kogu oma visandit. (Koodi lugedes pole see nii selge)

Siin all tahan ma ainult näidata, kuidas Arduino 16 -bitise registri Nextionile saadab, ilma raamatukogude abita, kuid austades ITEADi kirjeldatud süntaksit.

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

tühine NexUpd ()

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

{

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

SRSerial.print (InpReg); // edastage 16 kogutud bitti Nextioni kuvarile

SRSerial.print (InpReg); // edastage 16 kogutud bitti Nextioni kuvarile

SRSerial.write (terminal); 255

SRSerial.write (terminal); 255

SRSerial.write (terminal); 255

}

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

2. samm:.. Aga enne…

.. Aga enne…
.. Aga enne…

Loomulikult algab kood kõigi deklaratsioonide ja seadistusega ().

Sisendid on INPUT_PULLUP, seega on sisendlülitid tavaliselt avatud ja kui need on suletud, rakendavad nad GND -d vastavale sisendile.

(See on minu esimene Instructable ja mul on kahju teile oma koodi nii halvasti näidata. Palun laadige alla fail ArduinoCode. PDF, et see on väga selge.

Las ma räägin sellest lähemalt

Olen välja töötanud oma viisi, kuidas Nextioni ekraanile öelda, mida see peab tegema. Tavaliselt saadab MCU (minu puhul Arduino) sõnumi iga variatsiooni kohta, mida kohaldatakse iga üksiku objekti atribuudi suhtes. See meetod raiskab palju aega, et teha asju, mis ei ole alati nii kiireloomulised, et järjestikune liin pidevalt laadida. Leidsin, et Arduino on mugavam koguda 16 -bitistesse registritesse teavet atribuutide kohta, mis Nextioni puhul erinevad. Umbes iga 500 ms järel saadab minu Arduino Nextionile ühe sõnumi, mis sisaldab igas registris sisalduvat 16 bitti korraga. Ilmselt vajame Nextionis koodi, mis haldab seda, mida tuleb täita. See ülesande (ja koodi) jaotus võimaldab saada palju muid eeliseid. Näiteks mõelge, kuidas panna vilkuma! Minu lähenemisega on see lihtne: seadke natuke Arduino registrisse ja saatke see Nextionile. Nextioni kaksikregistreid saab Arduinost uuendada väga harva, kuna vilkumissagedus on kommunikatsioonist sõltumatu; Vilgumissagedus sõltub taimeri objektist Nextioni ja võib töötada minimaalse ajavahemikuga 50 mS lähedal. Nii et minu meetodi abil saame Nextionis suhteliselt kõrgel sagedusel (oletame 2 Hz) valgustada, isegi kui minu Arduino saadab sõnumeid iga 10 sekundi tagant, ainult äärmusliku näite jaoks. See võib soovitada vastupidist probleemi: kuidas toimida, kui side ebaõnnestub? See ei ole selle arutelu objekt, kuid olen selle probleemi juba lahendanud omamoodi valvekoeraga: üks Arduino koodi sees, teine Nextioni koodis.

Vilkuvust reguleerib Nextioni kood, kus iga valgus järgib tema õigeid reegleid: ON/OFF või ROHELINE/PUNANE või muudab ka sisemust (või muud). Ma võiksin oma projekti kohta veel mõndagi rääkida, kuid eelistan teie küsimusi oodata, enne kui lisan liiga palju sõnu, mida pole nii lihtne tõlkida, nagu ma seda teeksin.

3. samm: Nextion -objektide redigeerimine

Nextion -objektide redigeerimine
Nextion -objektide redigeerimine

Siin on osa koodist, mille kirjutasin Nextion Editoriga objektile tm0.

Me ei hoia tähelepanuta, et Arduinolt saadud 16 bitiga ei lülita Nextioni ekraan lihtsalt sisse ja välja signaale. Hetkel jätan selgitused välja, et mitte arusaamist keerulisemaks muuta.

Olen algaja ja seetõttu on parem alla laadida Nextioni kood. PDF -i leht, et lugeda segaduses olevat koodi siit allapoole. (Vabandust, see on mu esimene juhendatav)

Soovi korral saate selle minu rakenduse jaoks alla laadida täieliku koodi "HMI". Selle koodi failinimi on POW1225. HMI. See võib sattuda teie Nextioni ekraanile NX4024T032, kuid selle mõistmiseks peate ujuma paljudesse objektidesse ja vaatama koodi redaktori väikesest aknast. Nii et ma arvan, et on lihtsam vaadata põhikoodi, mis on kirjutatud faili Nextion code. PDF

// Projekt POW1225. HMI 15. mai 2019

// vACC (va0) Aku

// vINP (va1) Sisendregister xxxx xxxx xxxx xxxx

tm0.en = 1 // tm0 Alusta

tm0.tim = 50 // tm0 Aja baas 50 mS

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

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

if (vACC.val! = 0) // Testi RDY

{

tRDY.pco = SININE // PUNANE

} muud

{

tRDY.pco = HALL // tumeHALL

}

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

vACC.val = vINP.val & 0x0002

if (vACC.val! = 0) // Testi PWR

{

tPWR.pco = ROHELINE // hele ROHELINE

tPON.txt = "SEES" // SEES

tPON.pco = ROHELINE // hele ROHELINE

} muud

{

tPWR.pco = HALL // tume HALL 33808

tPON.txt = "VÄLJAS" // VÄLJAS

tPON.pco = HALL // tume HALL 33808

}

// KUIV ***************

vACC.val = vINP.val & 0x0004

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

{

tDRV.pco = SININE // SININE

tDRY.pco = SININE // SININE

} muud

{

tDRV.pco = HALL // tume HALL 33808

tDRY.pco = HALL // tume HALL 33808

}

// RUN ***************

vACC.val = vINP.val & 0x0018

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

{

tRUN.bco = PUNANE // MARCIA RED (sees)

tRUN.pco = MUST // mustal

tDIR.bco = PUNANE // DIR PUNANE

tDIR.pco = MUST // mustal

} muud

{

tRUN.bco = 32768 // MARCIA GREY (väljas)

tRUN.pco = HALL // hallil

tDIR.bco = 32768 // DIR tume GREEN 1024

tDIR.pco = HALL // DIR HALL

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

}

// VASAK **************

vACC.val = vINP.val & 0x0008

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

{

tDIR.txt = "<<<" // VASAK

}

// ÕIGE *************

vACC.val = vINP.val & 0x0010

if (vACC.val! = 0) // Test RUN Left

{

tDIR.txt = ">>>" // ÕIGE

}

// MÕLEMAD **************

vACC.val = vINP.val & 0x0018

if (vACC.val == 24) // Testi RUN mõlemad

{

tDIR.txt = ">>! <<" // MÕLEM

}

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

vACC.val = vINP.val & 0x0020

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

{

tTEST.pco = VALGE // VALGE

tsw tTEST, 1 // Luba puutetundlikud sündmused

} muud

{

tTEST.pco = HALL // tumeHALL 33808

tsw tTEST, 0 // Puuteürituste keelamine

}

// VIGA *************

vACC.val = vINP.val & 0x0040

if (vACC.val == 0) // Test FAULT

{

tFLT.pco = HALL // VIGA puudub

}

kui (vACC.val! = 0)

{

tFLT.pco = KOLLANE // VIGA esineb

}

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

vACC.val = vINP.val & 0x0080

if (vACC.val == 0) // Testi EME

{

tEME.pco = HALL // EME puudub

}

kui (vACC.val! = 0)

{

tEME.pco = PUNANE // EME on kohal

}

}

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

vACC.val = vINP.val & 0x0100

if (vACC.val! = 0) // Testi FERMO

{

tFER.pco = MUST // MUST

tFER.bco = ROHELINE // ROHELINE

} muud

{

tFER.pco = HALL // HALL

tFER.bco = 672 // tume ROHELINE

}

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

Tunnustus

Ma tahan Gideon Rossouwvile oma tänu avaldada, sest tema juhendit lugedes olen kiiresti saavutanud osa oma eesmärkidest. Tänan teid, mr. Gideon Rossouwv

Soovitan: