Tartalomjegyzék:

Más megközelítés a Nextion segítségével: 3 lépés
Más megközelítés a Nextion segítségével: 3 lépés

Videó: Más megközelítés a Nextion segítségével: 3 lépés

Videó: Más megközelítés a Nextion segítségével: 3 lépés
Videó: Th13 Minden6ó…egy más megközelítés@ 2024, Július
Anonim
Más megközelítés a Nextion segítségével
Más megközelítés a Nextion segítségével

Az első projektemben, amikor Arduino Nano csatlakozott a Nextion érintőképernyőhöz, parancsok hosszú sorozatát írtam le, amelyeket a soros porton keresztül kell közölni a Nextion -nal, és ez elkerülhetetlen, ha teljesen független parancsokat kell küldenünk véletlenszerű pillanatokban.

Azt is el kell ismernem, hogy több időt töltöttem a könyvtárakkal való „harcban”, mint bármi más. Így fokozatosan teljes munkába álltam a nehéz ITEAD könyvtárak nélkül.

Hamar rájöttem, hogy nem sürgős, hogy közöljem a Nextiongel a vizuális objektumok tulajdonságainak változásait, de inkább várok, amíg összegyűjtöm őket, és elküldöm őket a Nextion egészére, amikor egy teljes csoportot kaptam.

Megpróbálom jobban elmagyarázni magam.

Amikor a 16 szöveges jelzésből álló projektemben be- vagy kikapcsolni akarok néhányat, akkor ezt úgy teszem, hogy kihasználom a „bco” attribútumot, amely a bekapcsoláskor (például) sötétszürkeről fehérre változik (ha fekete téglalap), és fordítva a kikapcsoláshoz.

Alkalmazásomban haszontalannak találtam 16 parancs küldését a soros portra 16 különböző pillanatban, egyet a 16 jel minden „bco” -jához.

Inkább azt szeretném, ha az Arduino összegyűjtené, hogy mely jeleknek „be” (HIGH) és melyeknek „off” (LOW) jelzéseknek kell lenniük egy 16 bites regiszterben, ahol minden bit megfelel a Nextion 16 jelzésének egyikének.

A regiszter minden egyes bitjének frissítése után az értékét továbbítom a Nextion -nek, egyetlen üzenet, amely 16 elemre vonatkozó gyűjtő információt tartalmaz.

Ily módon az Arduino és a Nextion kommunikációja jelentősen lecsökken, mert abban az egyetlen üzenetben, amelyet a sorozaton keresztül továbbítottak a Nextionnek, olyan információkat gyűjtünk, amelyek egyébként 16 üzenet továbbítását igényelték volna.

Igaz, nem mindig szükséges frissíteni az összes jelentést, de biztos vagyok benne, hogy másképp több időt veszítene.

Természetesen az Arduino által kapott egész számban lévő biteknek a Nextion kijelzőnek hozzá kell rendelnie a kívánt attribútumhoz.

Ez azt jelenti, hogy a kódot be kell írni a Nextion kijelzőjére, de nem kell megijedni: ha sikerült…

Ekkor kettős előnye van: az Arduino könnyebb kóddal rendelkezik, és kevésbé fog részt venni a Nextion -nal folytatott soros kommunikációban.

A Nextion az adatok egyetlen üzenetben történő fogadása után sokkal gyorsabban használja fel őket, mintha 16 üzenetre várna. A 16 jel be- és kikapcsolása tehát szinte egyidejű lesz a legáltalánosabb módhoz képest, amelyben ismeretlen számú üzenet ideje eltelik az első jelzés végrehajtása és az utolsó jelzés parancs között.

A Nextion kijelzőn ezt a rendszert klasszikus módon hoztam létre, vagyis a „maszk” regiszter minden egyes forgatásával lehetővé válik a 16 bit mindegyikének vizsgálata. Ha a vizsgált bit HIGH, a bithez tartozó jel világít a kijelzőn, és kikapcsol, ha a bit alacsony.

Ennek a rendszernek a „negatív” aspektusa az, hogy a Nextion kijelzőre írt kódot kevésbé kényelmes dokumentálni, mint az Arduino kódot. Ezenkívül a Nextion kód azt kockáztatja, hogy különböző objektumokon szóródik. Ügyelni kell arra, hogy azonnal dokumentálja, amit tesz.

A Jegyzettömb ++ használatával írom be a kódot, amelyet ezután bemásolok a Nextion objektumba, amely szinte kizárólag a 0. oldal tm0 -jában található.

A nextion nyelv szintaxisának számos korláta van, de sikerül leküzdenie őket, vagy minimális erőfeszítéssel megkerülnie őket, és megpróbálni a problémákat a szokatlan szempontokból is látni.

Példaként beszámolok arról, ahogy Arduino írja a továbbítandó nyilvántartást, amelyet a lehető legelemibb módon írtam.

1. lépés: A nyilvántartás továbbítása

Az ArduinoCode. PDF fájlban minden vázlatomat megmutatom. (A kódot itt leolvasva nem olyan egyértelmű)

Itt csak azt szeretném megmutatni, hogy az Arduino milyen módon küldi el a 16 bites regisztert a Nextionnek, a könyvtárak segítsége nélkül, de tiszteletben kell tartania az ITEAD által leírt szintaxist.

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

void NexUpd ()

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

{

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

SRSerial.print (InpReg); // továbbítja a 16 összegyűjtött bitet a Nextion kijelzőre

SRSerial.print (InpReg); // továbbítja a 16 összegyűjtött bitet a Nextion kijelzőre

SRSerial.write (terminál); 255

SRSerial.write (terminál); 255

SRSerial.write (terminál); 255

}

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

2. lépés:.. De előtte…

.. De előtte …
.. De előtte …

Természetesen a kód minden deklarációval és beállítással kezdődik ().

A bemenetek INPUT_PULLUP, ezért a bemeneti kapcsolók általában nyitva vannak, és amikor zárva vannak, a GND -t alkalmazzák a megfelelő bemenetre.

(Ez az első Instructable, és sajnálom, hogy ilyen rosszul mutatom meg a kódomat. Kérjük, töltse le az ArduinoCode. PDF fájlt, hogy ez nagyon világos.

Hadd beszéljek róla bővebben

Kidolgoztam a saját módszeremet, hogy „megmondjam” a Nextion kijelzőjének, hogy mit kell tennie. Általában az MCU (esetemben Arduino) üzenetet küld minden egyes variációra vonatkozóan, amely bármely objektum attribútumára vonatkozik. Ez a metódus sok időt veszteget, hogy olyan dolgokat tegyen, amelyek nem mindig olyan sürgősek a soros vonal folyamatos betöltéséhez. Kényelmesebbnek találtam, ha az Arduino 16 bites regiszterekbe gyűjti a Nextionon változó attribútumokra vonatkozó információkat. Körülbelül minden 500 mS -on az Arduino -m küld egy üzenetet a Nextionnek, amely tartalmazza az egyes regiszterekben található 16 bitet. Nyilvánvaló, hogy a Nextionben szükségünk van arra a kódra, amely kezeli a végrehajtandó feladatokat. A feladatnak (és a kódnak) ez az elosztása sok más előnnyel jár. Például gondoljon arra, hogyan lehet villogni! Az én megközelítésem szerint ez egyszerű: állítson be egy kicsit az Arduino regiszterbe, és küldje el a Nextionnek. A Nextion ikerregisztereket nagyon ritkán lehetett frissíteni az Arduino -ból, mivel a villogási frekvencia független a kommunikációtól; a pislogás gyakorisága egy időzítő objektumtól a Nextionig változik, és a minimális időtartammal közel 50 mS -ig futhat. Tehát az én módszeremmel viszonylag magas frekvencián (tegyük fel, 2 Hz) villoghatunk a Nextionban, még akkor is, ha az Arduino -m 10 másodpercenként küld üzeneteket, csak egy extrém példa kedvéért. Ez az ellenkező problémára utalhat: hogyan kell eljárni, ha a kommunikáció sikertelen? Nem ez a tárgya ennek a vitának, de már megoldottam ezt a problémát egyfajta Watch Dog segítségével: az egyik az Arduino kódon belül, a másik a Nextion kódon belül.

A villogást a Nextion kód szabályozza, ahol minden lámpa a saját szabályait követi: BE/KI vagy ZÖLD/PIROS, vagy megváltoztatja a belsejét (vagy más). Mondhatnék még néhány dolgot a projektemről, de inkább várok a kérdéseivel, mielőtt túl sok szót fűznék hozzá, nem olyan könnyű lefordítani, mint szeretném.

3. lépés: A Nextion objektumok szerkesztése

A Nextion objektumok szerkesztése
A Nextion objektumok szerkesztése

Itt található a kód egy része, amelyet a Nextion Editor segítségével írtam a tm0 objektumra.

Nem kerülhetjük el figyelmünket, hogy az Arduinótól kapott 16 bit segítségével a Nextion kijelző nem csak be- és kikapcsolja a jeleket. Egyelőre kihagyom a magyarázatokat, hogy ne bonyolítsam a megértést.

Kezdő vagyok, és ezért jobb letölteni a Nextion code. PDF oldalt, hogy itt leolvassák a zavaros kódot. (Sajnálom, hogy ez az első tanításom)

Ha szeretné, letöltheti a teljes "HMI" kódot ehhez az alkalmazáshoz. Ennek a kódnak a fájlneve POW1225. HMI. Befuthat a Nextion NX4024T032 kijelzőjére, de ennek megértéséhez be kell úsznia sok objektumot, és meg kell néznie a kódot a szerkesztő kis ablakában. Tehát azt hiszem, hogy könnyebb lesz megnézni a Nextion code. PDF fájlba írt fő kódot

// Project POW1225. HMI, 2019. május 15

// vACC (va0) Akkumulátor

// vINP (va1) Beviteli regiszter xxxx xxxx xxxx xxxx

tm0.en = 1 // tm0 Kezdés

tm0.tim = 50 // tm0 Időalap 50 mS

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

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

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

{

tRDY.pco = KÉK // PIROS

}más

{

tRDY.pco = SZÜRKE // sötét SZÜRKE

}

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

vACC.val = vINP.val & 0x0002

if (vACC.val! = 0) // PWR tesztelése

{

tPWR.pco = ZÖLD // világos ZÖLD

tPON.txt = "BE" // BE

tPON.pco = ZÖLD // világos ZÖLD

}más

{

tPWR.pco = SZÜRKE // sötét SZÜRKE 33808

tPON.txt = "KI" // KI

tPON.pco = SZÜRKE // sötét SZÜRKE 33808

}

// SZÁRAZ ***************

vACC.val = vINP.val & 0x0004

if (vACC.val! = 0) // A SZÁRÍTÁS tesztelése

{

tDRV.pco = KÉK // KÉK

tDRY.pco = KÉK // KÉK

}más

{

tDRV.pco = SZÜRKE // sötét SZÜRKE 33808

tDRY.pco = SZÜRKE // sötét SZÜRKE 33808

}

// FUSS ***************

vACC.val = vINP.val & 0x0018

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

{

tRUN.bco = PIROS // MARCIA RED (be)

tRUN.pco = BLACK // a BLACK -en

tDIR.bco = PIROS // DIR RED

tDIR.pco = BLACK // a BLACK -en

}más

{

tRUN.bco = 32768 // MARCIA GREY (ki)

tRUN.pco = SZÜRKE // a SZÜRKE -n

tDIR.bco = 32768 // DIR sötét ZÖLD 1024

tDIR.pco = SZÜRKE // DIR SZÜRKE

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

}

// BAL **************

vACC.val = vINP.val & 0x0008

if (vACC.val! = 0) // Tesztfuttatás jobbra

{

tDIR.txt = "<<<" // DIR BAL

}

// JOBB *************

vACC.val = vINP.val & 0x0010

if (vACC.val! = 0) // Teszt RUN Balra

{

tDIR.txt = ">>>" // DIR RIGHT

}

// MINDKÉT **************

vACC.val = vINP.val & 0x0018

if (vACC.val == 24) // Teszt RUN mindkettő

{

tDIR.txt = ">>! <<" // Mindkettő

}

// TESZT **************

vACC.val = vINP.val & 0x0020

if (vACC.val! = 0) // TESZT teszt

{

tTEST.pco = FEHÉR // FEHÉR

tsw tTEST, 1 // Érintéses események engedélyezése

}más

{

tTEST.pco = SZÜRKE // sötét SZÜRKE 33808

tsw tTEST, 0 // Az érintéses események letiltása

}

// HIBA *************

vACC.val = vINP.val & 0x0040

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

{

tFLT.pco = SZÜRKE // HIBA hiányzik

}

ha (vACC.val! = 0)

{

tFLT.pco = SÁRGA // HIBA van jelen

}

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

vACC.val = vINP.val & 0x0080

if (vACC.val == 0) // EME tesztelése

{

tEME.pco = SZÜRKE // EME hiányzik

}

ha (vACC.val! = 0)

{

tEME.pco = PIROS // EME jelen van

}

}

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

vACC.val = vINP.val & 0x0100

if (vACC.val! = 0) // FERMO tesztelése

{

tFER.pco = FEKETE // FEKETE

tFER.bco = ZÖLD // ZÖLD

}más

{

tFER.pco = SZÜRKE // SZÜRKE

tFER.bco = 672 // sötét ZÖLD

}

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

Elismerés

Köszönetemet szeretném kifejezni Gideon Rossouwvnak, mert az utasításokat olvasva gyorsan elértem céljaim egy részét. Köszönöm mr. Gideon Rossouwv

Ajánlott: