Sisällysluettelo:

Erilainen lähestymistapa Nextionilla: 3 vaihetta
Erilainen lähestymistapa Nextionilla: 3 vaihetta

Video: Erilainen lähestymistapa Nextionilla: 3 vaihetta

Video: Erilainen lähestymistapa Nextionilla: 3 vaihetta
Video: Полный курс по Next js - Изучи Nextjs за 2 часа! | React SSR +таймкоды 2024, Marraskuu
Anonim
Erilainen lähestymistapa Nextionin kanssa
Erilainen lähestymistapa Nextionin kanssa

Ensimmäisessä projektissani, jossa Arduino Nano oli kytketty Nextion -kosketusnäyttöön, olin kirjoittanut pitkän sarjan komentoja, jotka on toimitettava Nextionille sarjaportin kautta, ja tämä on väistämätöntä, jos meidän on lähetettävä täysin riippumattomia komentoja satunnaisissa hetkissä.

Minun on myös myönnettävä, että vietin enemmän aikaa taisteluissa kirjastojen kanssa kuin mikään muu. Tulin siis vähitellen töihin täysin ilman raskaita ITEAD -kirjastoja.

Pian huomasin, ettei minulla ollut kiirettä ilmoittaa Nextionille visuaalisten kohteiden ominaisuuksien muutoksista, mutta odotan mieluummin, kunnes olen kerännyt ne ja lähetän nextionille kokonaisuudessaan, kun saan täydellisen ryhmän.

Yritän selittää itseni paremmin.

Kun projektissani, joka koostuu 16 tekstimerkinnästä, haluan ottaa osan niistä käyttöön tai pois käytöstä, teen sen hyödyntämällä bco -attribuuttia, joka kytkeytyy päälle (esimerkiksi) tummanharmaasta valkoiseksi (jos musta suorakulmio), ja päinvastoin sammuttaaksesi.

Sovelluksessani havaitsin, että on hyödytöntä lähettää 16 komentoa sarjaporttiin 16 eri hetkessä, yksi kullekin 16 signaalin bco: lle.

Haluan sen sijaan, että Arduino kerää 16-bittisessä rekisterissä, mitkä signaalit on oltava päällä (HIGH) ja mitkä ovat pois päältä (LOW), jossa jokainen bitti vastaa yhtä Nextionin 16-signaloinnista.

Päivitettyäni rekisterin jokaisen bitin lähetän sen arvon Nextionille, yhdelle viestille, joka sisältää 16 elementtiä koskevat kollektiiviset tiedot.

Tällä tavalla Arduinon ja Nextionin viestintä vähenee huomattavasti, koska siinä sarjassa Nextionille lähetetyssä yksittäisessä viestissä kerätään tietoja, jotka muuten olisivat vaatineet 16 viestin lähettämistä.

Totta, kaikkien raporttien päivittäminen ei ole aina välttämätöntä, mutta olen varma, että muuten toimiminen tuhlaa enemmän aikaa.

Luonnollisesti jokainen bitti, joka sisältyy Arduinon vastaanottamaan kokonaislukuun, Nextion -näytön on liitettävä se haluttuun määritteeseen.

Tämä tarkoittaa, että koodi on kirjoitettava Nextion -näyttöön, mutta sitä ei tarvitse pelätä: jos onnistuin…

Sitten on kaksinkertainen etu: Arduinolla on kevyempi koodi ja hän on vähemmän sitoutunut sarjaliikenteeseen Nextionin kanssa.

Nextion vastaanottaa tiedot yhdessä viestissä, käyttää niitä paljon nopeammin kuin jos se odottaisi 16 viestiä. 16 signaalin kytkeminen päälle tai pois päältä on siten lähes samanaikainen tavallisimmassa tilassa, jossa aika tuntemattomalle määrälle viestejä kuluu ensimmäisen signaloinnin komennon suorittamisen ja viimeisen signaloinnin komennon välillä.

Nextion -näytössä loin tämän järjestelmän klassisella tavalla, toisin sanoen kääntämällä "maski" -rekisterin joka kerta voit tarkastella jokaista 16 bittiä. Kun tutkittu bitti on HIGH, kyseiseen bittiin liittyvä signaali syttyy näytölle ja sammuu, kun bitti on LOW.

Tämän järjestelmän "negatiivinen" puoli on, että Nextion -näyttöön kirjoitettu koodi on vähemmän kätevä dokumentoida kuin Arduino -koodi. Lisäksi Nextion -koodi voi hajota eri kohteisiin. On huolehdittava siitä, että dokumentoit tekemäsi heti.

Käytän Notepad ++: a koodin kirjoittamiseen, jonka kopioin sitten Nextion -objektiin, joka on lähes yksinomaan sivun 0 tm0: ssa.

Nextion -kielen syntaksilla on lukuisia rajoituksia, mutta se onnistuu voittamaan ne tai kiertämään ne pienellä vaivalla ja yrittämään nähdä ongelmat myös epätavallisista näkökulmista.

Esimerkkinä kerron tavasta, jolla Arduino kirjoittaa lähetettävän rekisterin, jonka olen kirjoittanut mahdollisimman alkeellisella tavalla.

Vaihe 1: Kuinka rekisteri lähetetään

Tiedostossa ArduinoCode. PDF näytän kaikki luonnokseni. (Koodin lukeminen täällä ei ole niin selvää)

Tässä alla haluan vain näyttää, millä tavalla Arduino lähettää 16 -bittisen rekisterin Nextionille ilman kirjastojen apua, mutta kunnioittaen ITEADin kuvaamaa syntaksia.

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

mitätön NexUpd ()

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

{

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

SRSerial.print (InpReg); // lähettää 16 kerättyä bittiä Nextion -näyttöön

SRSerial.print (InpReg); // lähettää 16 kerättyä bittiä Nextion -näyttöön

SRSerial.write (pääte); // 255

SRSerial.write (pääte); // 255

SRSerial.write (pääte); // 255

}

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

Vaihe 2:.. Mutta ennen…

.. Mutta ennen …
.. Mutta ennen …

Tietenkin koodi alkaa kaikista ilmoituksista ja asetuksista ().

Tulot ovat INPUT_PULLUP, joten tulokytkimet ovat normaalisti auki ja suljettuina ne käyttävät GND: tä vastaavaan tuloon.

(Tämä on ensimmäinen Instructable, ja olen pahoillani, että näytän sinulle koodini tällä huonolla tavalla. Lataa tiedosto ArduinoCode. PDF, jotta se on hyvin selvä.

Anna minun puhua siitä lisää

Olen kehittänyt oman tavan kertoa Nextion -näytölle, mitä sen on tehtävä. Yleensä MCU (minun tapauksessani Arduino) lähettää viestin jokaisesta muunnelmasta, jota sovelletaan minkä tahansa yksittäisen objektin määritteeseen. Pidin kätevämpänä, että Arduino kerää 16 -bittisiin rekistereihin tiedot ominaisuuksista, jotka vaihtelevat Nextionissa. Noin joka 500 mS Arduino lähettää Nextionille yhden viestin, joka sisältää kussakin rekisterissä olevat 16 bittiä kerrallaan. Ilmeisesti Nextionissa tarvitsemme koodin, joka käsittelee suoritettavat asiat. Tämä tehtävän (ja koodin) jakaminen antaa monia muita etuja. Ajattele esimerkiksi, kuinka saada vilkkumaan valo! Minun lähestymistapani on helppoa: aseta vähän Arduinon rekisteriin ja lähetä se Nextionille. Nextion -kaksoisrekisterit voidaan päivittää Arduinosta hyvin harvoin, koska välähdystaajuus on riippumaton viestinnästä; välkkymistiheys riippuu ajastinobjektista Nextioniin ja voi toimia vähimmäisaikalla lähellä 50 mS. Joten menetelmälläni voimme vilkuttaa valoa Nextionissa suhteellisen korkealla taajuudella (oletetaan 2 Hz), vaikka Arduino lähettäisi viestejä 10 sekunnin välein, vain äärimmäisen esimerkin vuoksi. Tämä voi ehdottaa päinvastaista ongelmaa: miten toimia, jos tiedonsiirto epäonnistuu? Tämä ei ole tämän keskustelun kohde, mutta olen jo ratkaissut tämän ongelman eräänlaisella Watch Dogilla: yksi Arduino -koodin sisällä, toinen Nextion -koodissa.

Vilkkua säätelee Nextion -koodi, jossa jokainen valo noudattaa hänen asianmukaisia sääntöjään: ON/OFF tai VIHREÄ/PUNAINEN tai myös muuttamalla kirjoitettua tekstiä (tai muuta). Voisin kertoa joitain muita asioita projektistani, mutta odotan mieluummin kysymyksiänne, ennen kuin lisään liikaa sanoja, joiden kääntäminen ei ole niin helppoa kuin haluaisin.

Vaihe 3: Nextion -objektien muokkaaminen

Nextion -objektien muokkaaminen
Nextion -objektien muokkaaminen

Tässä on osa koodista, jonka kirjoitin Nextion Editorilla tm0 -objektille.

Emme voi välttyä huomaamukseltamme, että Arduinolta vastaanotetuilla 16 bitillä Nextion -näyttö ei vain sytytä ja sammuta signaaleja. Jätän tällä hetkellä selitykset huomiotta, jotta ymmärrystä ei vaikeutettaisi.

Olen aloittelija, joten on parempi ladata Nextion code. PDF -sivu sen sijaan lukea sekava koodi täältä. (Anteeksi, että tämä on ensimmäinen ohjeeni)

Jos haluat, voit ladata koko koodin "HMI" tätä sovellustani varten. Tämän koodin tiedostonimi on POW1225. HMI. Se voi törmätä Nextion -näyttöön NX4024T032, mutta ymmärtääksesi sen sinun täytyy uida moniin kohteisiin ja katsoa koodi editorin pienen ikkunan sisältä. Joten mielestäni on helpompi katsoa pääkoodi, joka on kirjoitettu Nextion code. PDF -tiedostoon

// Project POW1225. HMI 15. toukokuuta 2019

// vACC (va0) Akku

// vINP (va1) Syöttörekisteri xxxx xxxx xxxx xxxx

tm0.en = 1 // tm0 Aloita

tm0.tim = 50 // tm0 Aikakanta 50 mS

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

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

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

{

tRDY.pco = SININEN // PUNAINEN

}muu

{

tRDY.pco = HARMAA // tumma HARMAA

}

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

vACC.val = vINP.val & 0x0002

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

{

tPWR.pco = VIHREÄ // vaalea VIHREÄ

tPON.txt = "PÄÄLLÄ" // PÄÄLLÄ

tPON.pco = VIHREÄ // vaalea VIHREÄ

}muu

{

tPWR.pco = HARMAA // tumma HARMAA 33808

tPON.txt = "POIS" // POIS

tPON.pco = HARMAA // tumma HARMAA 33808

}

// KUIVA ***************

vACC.val = vINP.val & 0x0004

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

{

tDRV.pco = SININEN // SININEN

tDRY.pco = SININEN // SININEN

}muu

{

tDRV.pco = HARMAA // tumma HARMAA 33808

tDRY.pco = HARMAA // tumma HARMAA 33808

}

// JUOSTA ***************

vACC.val = vINP.val & 0x0018

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

{

tRUN.bco = PUNAINEN // MARCIA RED (päällä)

tRUN.pco = MUSTA // mustalla

tDIR.bco = PUNAINEN // DIR PUNAINEN

tDIR.pco = MUSTA // mustalla

}muu

{

tRUN.bco = 32768 // MARCIA GREY (pois päältä)

tRUN.pco = HARMAA // HARMAALLA

tDIR.bco = 32768 // DIR tumma VIHREÄ 1024

tDIR.pco = HARMAA // DIR HARMAA

tDIR.txt = "---" // PYSÄYTÄ

}

// VASEN ***************

vACC.val = vINP.val & 0x0008

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

{

tDIR.txt = "<<<" // VASEN

}

// OIKEA *************

vACC.val = vINP.val & 0x0010

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

{

tDIR.txt = ">>>" // OIKEA

}

// Molemmat ***************

vACC.val = vINP.val & 0x0018

if (vACC.val == 24) // Testaa RUN molemmat

{

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

}

// TESTI **************

vACC.val = vINP.val & 0x0020

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

{

tTEST.pco = VALKOINEN // VALKOINEN

tsw tTEST, 1 // Ota kosketustapahtumat käyttöön

}muu

{

tTEST.pco = HARMAA // tumma HARMAA 33808

tsw tTEST, 0 // Poista kosketustapahtumat käytöstä

}

// VIKA *************

vACC.val = vINP.val & 0x0040

if (vACC.val == 0) // Testivika

{

tFLT.pco = HARMAA // VIKA puuttuu

}

jos (vACC.val! = 0)

{

tFLT.pco = KELTAINEN // VIKA läsnä

}

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

vACC.val = vINP.val & 0x0080

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

{

tEME.pco = HARMAA // EME puuttuu

}

jos (vACC.val! = 0)

{

tEME.pco = PUNAINEN // EME läsnä

}

}

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

vACC.val = vINP.val & 0x0100

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

{

tFER.pco = MUSTA // MUSTA

tFER.bco = VIHREÄ // VIHREÄ

}muu

{

tFER.pco = HARMAA // HARMAA

tFER.bco = 672 // tumma VIHREÄ

}

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

Kuittaus

Haluan antaa kiitokseni Gideon Rossouwville, koska lukemalla hänen oppaitaan olen saavuttanut nopeasti osan tavoitteistani. Kiitos herra. Gideon Rossouwv

Suositeltava: