Obsah:
Video: Jiný přístup s nexcí: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
V mém prvním projektu s Arduino Nano připojeným k dotykovému displeji Nextion jsem napsal dlouhou řadu příkazů, které mají být sděleny Nextion přes sériový port, a to je nevyhnutelné, pokud potřebujeme v náhodných okamžicích posílat zcela nezávislé příkazy.
Musím také přiznat, že jsem „bojem“s knihovnami strávil více času než cokoli jiného. Postupně jsem tedy začal pracovat zcela bez těžkých knihoven ITEAD.
Brzy jsem si uvědomil, že nemám naléhavost sdělovat Nextionu změny atributů vizuálních objektů, ale raději počkám, až je shromáždím a pošlu Nextionu jako celku, až dostanu kompletní skupinu.
Pokusím se lépe vysvětlit.
Když v mém projektu složeném ze 16 textových označení chci některé z nich zapnout nebo vypnout, využiji toho atributu „bco“, který při zapnutí přechází (například) z tmavě šedé do bílé (pokud je černý obdélník) a naopak k vypnutí.
V mé aplikaci mi přišlo zbytečné posílat 16 příkazů na sériový port v 16 různých okamžicích, jeden pro každé 'bco' ze 16 signálů.
Dávám přednost tomu, aby Arduino shromažďovalo, které signály musí být 'zapnuto' (HIGH) a které musí být 'vypnuto' (LOW) v 16bitovém registru, kde každý bit odpovídá jedné ze 16 signalizací Nextion.
Po aktualizaci každého bitu registru předám jeho hodnotu Nextionu, jediné zprávě, která obsahuje souhrnné informace týkající se 16 prvků.
Tímto způsobem je komunikace z Arduina a Nextion značně omezena, protože v této jediné zprávě přenášené na sériovou linku do Nextion jsou shromažďovány informace, které by jinak vyžadovaly přenos 16 zpráv.
Je pravda, že není vždy nutné aktualizovat všechny zprávy, ale jsem si jist, že jinak by to ztrácelo více času.
Přirozeně každý bit obsažený v celém čísle přijatém Arduinem, displej Nextion ho bude muset přiřadit k požadovanému atributu.
To znamená, že kód musí být napsán na displeji Nextion, ale není třeba se ho děsit: pokud se mi to podaří…
Pak je tu dvojí výhoda: Arduino bude mít lehčí kód a bude se méně zabývat sériovou komunikací s Nextion.
Nextion po obdržení dat v jedné zprávě je použije mnohem rychleji, než kdyby čekalo na 16 zpráv. Zapnutí nebo vypnutí 16 signálů bude tedy téměř souběžné s ohledem na nejběžnější režim, ve kterém mezi vykonáním příkazu pro první signalizaci a příkazem pro poslední signalizaci uplyne čas pro neznámý počet zpráv.
Na displeji Nextion jsem vytvořil tento systém klasickým způsobem, to znamená, že pokaždé otáčení registru „masky“vám umožní prozkoumat každý ze 16 bitů. Když je zkoumaný bit HIGH, signál spojený s tímto bitem se rozsvítí na displeji a vypne se, když je bit LOW.
'Negativním' aspektem tohoto systému je, že kód zapsaný na displeji Nextion je méně vhodné pro dokumentaci než kód Arduino. Kromě toho hrozí, že bude kód Nextion rozptýlen po různých objektech. Je třeba dbát na to, abyste hned zdokumentovali, co děláte.
Pomocí programu Poznámkový blok ++ napíšu kód, který poté zkopíruji do objektu Nextion, který je téměř výhradně v tm0 na stránce 0.
Syntaxe jazyka Nextion má mnoho omezení, ale dokáže je překonat nebo je obejít s minimálním úsilím a pokusit se vidět problémy z neobvyklých úhlů pohledu.
Jako příklad uvádím způsob, jakým Arduino zapisuje registr, který má být vyslán, zapsaný mnou nejjednodušším možným způsobem.
Krok 1: Jak se registr přenáší
V souboru ArduinoCode. PDF ukazuji celý svůj náčrt. (Číst kód zde dole není tak jasné)
Zde dolů chci pouze ukázat, jakým způsobem Arduino posílá 16bitový registr do Nextion, bez pomoci knihoven, ale respektuje syntaxi popsanou ITEAD.
//***************************************************************************************
neplatné NexUpd ()
//***************************************************************************************
{
SRSerial.print ("vINP.val =");
SRSerial.print (InpReg); // přenos 16 nasbíraných bitů na displej Nextion
SRSerial.print (InpReg); // přenos 16 nasbíraných bitů na displej Nextion
SRSerial.write (konec); // 255
SRSerial.write (konec); // 255
SRSerial.write (konec); // 255
}
//***************************************************************************************
Krok 2:.. Ale před …
Kód samozřejmě začíná všemi deklaracemi a nastavením ().
Vstupy jsou INPUT_PULLUP, takže vstupní spínače jsou normálně otevřené a když jsou zavřené, aplikují GND na odpovídající vstup.
(Toto je můj první Instructable a je mi líto, že vám mohu ukázat svůj kód tímto špatným způsobem. Stáhněte si prosím soubor ArduinoCode. PDF, že je to velmi jasné.
Dovolte mi, abych o tom mluvil více
Vyvinul jsem svůj vlastní způsob, jak „říci“displeji Nextion, co musí dělat. Obvykle MCU (v mém případě Arduino) posílá zprávu pro každou variaci, která se má vztahovat na atribut jakéhokoli jednotlivého objektu. Tato metoda ztrácí mnoho času na věci, které nejsou vždy tak naléhavé, aby bylo možné nepřetržitě načítat sériovou linku. Zjistil jsem pohodlnější, že Arduino shromažďuje do 16 bitových registrů informace o atributech, které se mají na Nextion lišit. Asi každých 500 ms moje Arduino posílá Nextionu jednu zprávu obsahující 16 bitů obsažených v každém registru najednou. Zjevně v Nextion potřebujeme kód, který zvládne to, co musí být provedeno. Tato distribuce úkolu (a kódu) umožňuje získat mnoho dalších výhod. Například přemýšlejte, jak přimět mrknutí světla! S mým přístupem je to snadné: vložte trochu do registru Arduino a odešlete jej do Nextion. Dvojité registry Nextion lze z Arduina aktualizovat velmi zřídka, protože frekvence blikání je nezávislá na komunikaci; frekvence blikání závisí na objektu Timer v Nextion a může běžet s minimální časovou základnou téměř 50 mS. Takže s mojí metodou můžeme v Nextionu blikat světlem na relativně vysoké frekvenci (předpokládejme 2 Hz), i když můj Arduino odesílá zprávy každých 10 sekund, jen pro extrémní příklad. To může naznačovat opačný problém: jak postupovat, pokud komunikace selže? Toto není předmětem této diskuse, ale tento problém jsem již vyřešil jakýmsi Watch Dogem: jedním uvnitř Arduino Code, druhým do Nextion kódu.
Blikání je regulováno kódem Nextion, kde každé světlo dodržuje jeho správná pravidla: ZAPNUTO/VYPNUTO nebo ZELENÉ/ČERVENÉ nebo také změna psaného textu (nebo jiného). Mohl bych o svém projektu říci několik dalších věcí, ale raději si počkám na vaše otázky, než přidám příliš mnoho slov, která se mi tak snadno nepřeloží, jako já.
Krok 3: Úpravy objektů Nextion
Zde je část kódu, který jsem napsal pomocí Nextion Editoru na objekt tm0.
Neunikne našemu upozornění, že díky 16 bitům přijatým od Arduina displej Nextion signály nejen zapíná a vypíná. Prozatím vynechávám vysvětlení, abych nekomplikoval porozumění.
Jsem začátečník, a proto je lepší si místo toho stáhnout stránku Nextion code. PDF a přečíst si zde zmatený kód. (Omlouvám se, toto je můj první pokyn)
Pokud si přejete, můžete si stáhnout kompletní kód „HMI“pro tuto moji aplikaci. Název tohoto kódu je POW1225. HMI. Může běžet na váš displej Nextion NX4024T032, ale abyste to pochopili, musíte vplout do mnoha objektů a podívat se na kód uvnitř malého okna editoru. Takže si myslím, že bude snazší podívat se na hlavní kód, zapsaný v souboru Nextion code. PDF
// Projekt POW1225. HMI 15. května 2019
// Akumulátor vACC (va0)
// vINP (va1) Vstupní registr xxxx xxxx xxxx xxxx
tm0.en = 1 // tm0 Start
tm0.tim = 50 // tm0 Časová základna 50 mS
// RDY ****************
vACC.val = vINP.val & 0x0001 // Maska
if (vACC.val! = 0) // Test RDY
{
tRDY.pco = MODRÁ // ČERVENÁ
}jiný
{
tRDY.pco = ŠEDÁ // tmavě ŠEDÁ
}
// PWR ****************
vACC.val = vINP.val & 0x0002
if (vACC.val! = 0) // Test PWR
{
tPWR.pco = ZELENÁ // světle ZELENÁ
tPON.txt = "ON" // ON
tPON.pco = ZELENÁ // světle ZELENÁ
}jiný
{
tPWR.pco = ŠEDÁ // tmavě ŠEDÁ 33808
tPON.txt = "OFF" // OFF
tPON.pco = ŠEDÁ // tmavě ŠEDÁ 33808
}
// SUCHÝ ****************
vACC.val = vINP.val & 0x0004
if (vACC.val! = 0) // Test DRY
{
tDRV.pco = MODRÁ // MODRÁ
tDRY.pco = MODRÁ // MODRÁ
}jiný
{
tDRV.pco = ŠEDÁ // tmavě ŠEDÁ 33808
tDRY.pco = ŠEDÁ // tmavě ŠEDÁ 33808
}
// BĚH ****************
vACC.val = vINP.val & 0x0018
if (vACC.val! = 0) // Test RUN
{
tRUN.bco = ČERVENÁ // MARCIA ČERVENÁ (zapnuto)
tRUN.pco = ČERNÁ // na ČERNÉ
tDIR.bco = ČERVENÁ // DIR ČERVENÁ
tDIR.pco = ČERNÁ // na ČERNÉ
}jiný
{
tRUN.bco = 32768 // MARCIA GREY (vypnuto)
tRUN.pco = ŠEDÝ // na ŠEDÉ
tDIR.bco = 32768 // DIR dark GREEN 1024
tDIR.pco = ŠEDÁ // ŠEDÁ ŠEDÁ
tDIR.txt = "---" // STOP
}
// VLEVO, ODJET **************
vACC.val = vINP.val & 0x0008
if (vACC.val! = 0) // Test RUN vpravo
{
tDIR.txt = "<<<" // DIR LEFT
}
// ŽE JO *************
vACC.val = vINP.val & 0x0010
if (vACC.val! = 0) // Test RUN vlevo
{
tDIR.txt = ">>>" // SPRÁVNĚ PRÁVO
}
// OBA **************
vACC.val = vINP.val & 0x0018
if (vACC.val == 24) // Test RUN oba
{
tDIR.txt = ">>! <<" // DIR OBA
}
// TEST **************
vACC.val = vINP.val & 0x0020
if (vACC.val! = 0) // Test TEST
{
tTEST.pco = BÍLÁ // BÍLÁ
tsw tTEST, 1 // Povolení dotykových událostí
}jiný
{
tTEST.pco = ŠEDÁ // tmavě ŠEDÁ 33808
tsw tTEST, 0 // Zakáže dotykové události
}
// FAULT *************
vACC.val = vINP.val & 0x0040
if (vACC.val == 0) // Test FAULT
{
tFLT.pco = ŠEDÝ // CHYBA chybí
}
if (vACC.val! = 0)
{
tFLT.pco = ŽLUTÁ // PORUCHA přítomna
}
// EME ****************
vACC.val = vINP.val & 0x0080
if (vACC.val == 0) // Test EME
{
tEME.pco = ŠEDÝ // EME chybí
}
if (vACC.val! = 0)
{
tEME.pco = ČERVENÁ // EME přítomen
}
}
// FERMO *************
vACC.val = vINP.val & 0x0100
if (vACC.val! = 0) // Test FERMO
{
tFER.pco = ČERNÁ // ČERNÁ
tFER.bco = ZELENÁ // ZELENÁ
}jiný
{
tFER.pco = ŠEDÁ // ŠEDÁ
tFER.bco = 672 // tmavě ZELENÁ
}
// *******************
Potvrzení
Chtěl bych poděkovat Gideonovi Rossouwvovi, protože díky čtení jeho instrukcí jsem rychle získal část svých cílů. Děkuji pane Gideon Rossouwv
Doporučuje:
Diy makro objektiv s AF (jiný než všechny ostatní DIY makro objektivy): 4 kroky (s obrázky)
Diy makro objektiv s AF (jiný než všechny ostatní DIY makro objektivy): Viděl jsem mnoho lidí, kteří vyráběli makro objektivy se standardním kitovým objektivem (obvykle 18-55 mm). Většinu z nich tvoří objektiv, který se jednoduše nalepí na fotoaparát dozadu nebo se odstraní přední prvek. U obou těchto možností existují stinné stránky. Pro montáž objektivu
Rotační kodér - pochopte a používejte (Arduino/jiný ΜKontrolér): 3 kroky
Rotační kodér - pochopte a používejte (Arduino/jiný Μ ovladač): Rotační kodér je elektromechanické zařízení, které převádí rotační pohyb na digitální nebo analogové informace. Může se otáčet ve směru nebo proti směru hodinových ručiček. Existují dva typy rotačních kodérů: absolutní a relativní (inkrementální) kodéry
Jak emulovat televizní ovladač nebo jiný pomocí Arduino Irlib: 3 kroky (s obrázky)
Jak emulovat dálkový ovladač TV nebo jiný pomocí Arduino Irlib: Úvod Ahoj všichni a vítejte u mého prvního Instructable. Dnes se naučíme, jak název napovídá, emulovat dálkové ovládání e TV nebo něco podobného, co funguje s infračervenými signály pomocí Arduina (jakýkoli model) . Problém byl: Jak mohu přenášet kódy do
Převod (jen o) libovolného mediálního souboru na (jen o) jakýkoli jiný mediální soubor zdarma !: 4 kroky
Převést (jen o) jakýkoli mediální soubor na (jen o) jakýkoli jiný mediální soubor zdarma !: Můj první návod, na zdraví! Každopádně jsem byl na Googlu a hledal bezplatný program, který by převedl mé soubory Youtube.flv do formátu, který je univerzálnější, jako.wmv nebo.mov. Prohledal jsem nespočet fór a webových stránek a pak jsem našel program s názvem
Připojte iPod nebo jiný přehrávač MP3 k běžným domácím reproduktorům bez drahého a objemného zesilovače!: 4 kroky
Připojte přehrávač Ipod nebo jiný přehrávač MP3 k běžným domácím reproduktorům bez drahého a objemného zesilovače! Máte mnoho dalších stereofonních reproduktorů, které se dodaly s přerušovanými stereofonními reproduktory, nebo je prostě máte bez zjevného důvodu? V tomto Instructable vám ukážu, jak je můžete připojit k jakémukoli přehrávači MP3 nebo jakémukoli zařízení se zvukovým portem