Sisällysluettelo:
- Vaihe 1: Kuinka rekisteri lähetetään
- Vaihe 2:.. Mutta ennen…
- Vaihe 3: Nextion -objektien muokkaaminen
Video: Erilainen lähestymistapa Nextionilla: 3 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
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…
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
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:
Diy -makrolinssi, jossa on automaattitarkennus (erilainen kuin kaikki muut DIY -makro -objektiivit): 4 vaihetta (kuvilla)
Diy-makrolinssi, jossa on automaattitarkennus (erilainen kuin kaikki muut DIY-makro-objektiivit): Olen nähnyt paljon ihmisiä tekemässä makro-objektiiveja tavallisella objektiivilla (yleensä 18-55 mm). Useimmat niistä ovat objektiivi, joka on vain kiinni kamerassa taaksepäin tai etuosa on poistettu. Molemmilla vaihtoehdoilla on huonot puolensa. Linssin asentamiseen
Sykkeen mittaus on sormenpäässäsi: fotopletysmografinen lähestymistapa sykkeen määrittämiseen: 7 vaihetta
Sykkeen mittaus on sormenpäässäsi: Fotopletysmografia Lähestymistapa sydämen sykkeen määrittämiseen: Fotopletysmografia (PPG) on yksinkertainen ja edullinen optinen tekniikka, jota käytetään usein havaitsemaan veren tilavuuden muutokset kudoksen mikrovaskulaarisessa kerroksessa. Sitä käytetään enimmäkseen ei-invasiivisesti mittauksiin ihon pinnalla, tyypillisesti
Erguro-one Sonos Play 5: n valmistajan lähestymistapa IKEA Kuggis -laatikolla: 7 vaihetta (kuvilla)
Erguro-one Sonos Play 5: n valmistajan lähestymistapa IKEA Kuggis -laatikolla: Tämä projekti syntyi sen jälkeen, kun kuulin ensimmäisen kerran Sonos Play 5 -kaiuttimet, ja olin niin vaikuttunut äänenlaadusta kaiuttimen pienen koon suhteen, matalat taajuudet ovat ehdottoman vaikuttavia, siksi omistan 2 Play 5;-) I h
Windowsin Bluetooth -järjestelmäanalyysi - SensorTag -lähestymistapa: 7 vaihetta (kuvilla)
Windowsin Bluetooth -järjestelmäanalyysi - SensorTag -lähestymistapa: Seuraavassa analysoin Windows -käyttöjärjestelmää (OS) kommunikoinnin kannalta Bluetooth Low Energy -laitteiden kanssa - meidän tapauksessamme erityyppiset SensorTagit: Thunderboard React, Thunderboard Sense (b
AM -modulaattori - optinen lähestymistapa: 6 vaihetta (kuvilla)
AM -modulaattori - Optinen lähestymistapa: Kuukausia sitten ostin tämän DIY AM -radiovastaanotinsarjan Banggoodilta. Olen koonnut sen. (Kuinka tehdä tämä, aioin kuvata erillisessä Instructable -ohjelmassa) Jopa ilman viritystä oli mahdollista saada joitakin radioasemia, mutta yritin tavoittaa