Obsah:
Video: Iný prístup s odmietnutím: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:58
V mojom prvom projekte s Arduino Nano pripojeným k dotykovému displeju Nextion som napísal dlhý rad príkazov, ktoré sa majú Nextion komunikovať prostredníctvom sériového portu, a to je nevyhnutné, ak potrebujeme v náhodných okamihoch odosielať úplne nezávislé príkazy.
Tiež musím priznať, že som „bojom“s knižnicami strávil viac času ako čokoľvek iné. Postupne som teda začal pracovať úplne bez ťažkých knižníc ITEAD.
Čoskoro som zistil, že nemám žiadnu naliehavú potrebu komunikovať so spoločnosťou Nextion o zmenách atribútov vizuálnych objektov, ale radšej počkám, kým ich zhromaždím a pošlem do Nextionu ako celku, keď dostanem kompletnú skupinu.
Skúsim sa lepšie vysvetliť.
Keď v mojom projekte pozostávajúcom zo 16 textových označení chcem niektoré z nich zapnúť alebo vypnúť, urobím to pomocou atribútu „bco“, ktorý pri zapnutí prechádza (napríklad) z tmavošedej do bielej (ak je čierny obdĺžnik) a naopak, aby ste ho vypli.
V mojej aplikácii som zistil, že je zbytočné posielať 16 príkazov na sériový port v 16 rôznych okamihoch, jeden pre každé „bco“zo 16 signálov.
Preferujem, aby Arduino zbieralo, ktoré signály musia byť „zapnuté“(HIGH) a ktoré musia byť „vypnuté“(LOW) v 16-bitovom registri, kde každý bit zodpovedá jednej zo 16 signalizácií Nextion.
Po aktualizácii každého bitu registra prenášam jeho hodnotu do Nextion, jedinej správy, ktorá obsahuje súhrnné informácie o 16 prvkoch.
Týmto spôsobom sa výrazne zníži komunikácia z Arduina a Nextion, pretože v tejto jedinej správe prenášanej po sériovom zariadení do Nextion sa zbierajú informácie, ktoré by inak vyžadovali prenos 16 správ.
Je pravda, že nie je vždy potrebné aktualizovať všetky správy, ale som si istý, že inak by sa stratilo viac času.
Prirodzene, každý bit obsiahnutý v celom čísle prijatom Arduinom, displej Nextion ho bude musieť priradiť k požadovanému atribútu.
To znamená, že kód musí byť napísaný na displeji Nextion, ale nie je dôvod ho vystrašiť: ak sa mi to podarí …
Potom je tu dvojitá výhoda: Arduino bude mať ľahší kód a bude sa menej zaoberať sériovou komunikáciou s Nextion.
Nextion po prijatí údajov v jednej správe ich použije oveľa rýchlejšie, ako keby čakalo 16 správ. Zapnutie alebo vypnutie 16 signálov bude teda takmer súčasné vzhľadom na najbežnejší režim, v ktorom medzi vykonaním príkazu pre prvú signalizáciu a príkazom pre poslednú signalizáciu uplynie čas pre neznámy počet správ.
Na displeji Nextion som tento systém vytvoril klasickým spôsobom, to znamená, že zakaždým, keď otočíte register „masky“, umožní vám preskúmať každý zo 16 bitov. Keď je skúmaný bit HIGH, signál spojený s týmto bitom sa rozsvieti na displeji a vypne sa, keď je bit LOW.
„Negatívnym“aspektom tohto systému je, že kód zapísaný na displeji Nextion sa dokumentuje menej pohodlne ako kód Arduino. Okrem toho hrozí, že kód Nextion bude rozptýlený po rôznych objektoch. Je potrebné dbať na to, aby ste ihneď zdokumentovali, čo robíte.
Pomocou programu Poznámkový blok ++ napíšem kód, ktorý potom skopírujem do objektu Nextion, ktorý je takmer výlučne na stránke tm0 na strane 0.
Syntax jazyka Nextion má mnoho obmedzení, ale dokáže ich prekonať alebo ich obísť s minimálnym úsilím a pokúsiť sa vidieť problémy z neobvyklých uhlov pohľadu.
Ako príklad uvádzam spôsob, akým Arduino zapisuje register, ktorý sa má prenášať, ktorý som napísal najzákladnejším možným spôsobom.
Krok 1: Ako sa prenáša register
V súbore ArduinoCode. PDF ukazujem celú svoju skicu. (Čítanie kódu tu dole nie je také jednoznačné.)
Tu dole chcem len ukázať, akým spôsobom Arduino odosiela 16 -bitový register do Nextion bez pomoci knižníc, ale rešpektuje syntax opísanú v programe ITEAD.
//***************************************************************************************
zrušiť NexUpd ()
//***************************************************************************************
{
SRSerial.print ("vINP.val =");
SRSerial.print (InpReg); // prenos 16 zozbieraných bitov na displej Nextion
SRSerial.print (InpReg); // prenos 16 zozbieraných bitov na displej Nextion
SRSerial.write (koniec); // 255
SRSerial.write (koniec); // 255
SRSerial.write (koniec); // 255
}
//***************************************************************************************
Krok 2:.. Ale pred …
Kód samozrejme začína všetkými deklaráciami a nastavením ().
Vstupy sú INPUT_PULLUP, takže vstupné prepínače sú normálne otvorené a keď sú zatvorené, aplikujú na zodpovedajúci vstup GND.
(Toto je môj prvý Instructable a je mi ľúto, že vám môj kód ukážem týmto zlým spôsobom. Stiahnite si súbor ArduinoCode. PDF, že je to veľmi jasné.
Nechaj ma o tom hovoriť viac
Vyvinul som svoj vlastný spôsob, ako „povedať“displeju Nextion, čo musí robiť. MCU (v mojom prípade Arduino) zvyčajne odosiela správu pre každú variáciu, ktorá sa má použiť na atribút akéhokoľvek jednotlivého objektu. Táto metóda stráca veľa času na to, aby sa veci, ktoré nie sú vždy také naliehavé, načítavali nepretržite sériová linka. Zdá sa mi pohodlnejšie, že Arduino zhromažďuje do 16 bitových registrov informácie o atribútoch, ktoré sa majú líšiť v prípade Nextion. Asi každých 500 mS moje Arduino odoslalo do Nextion jednu správu obsahujúcu 16 bitov obsiahnutých v každom registri súčasne. V Nextion samozrejme potrebujeme kód, ktorý zvládne to, čo musí byť spustené. Táto distribúcia úlohy (a kódu) priniesla mnoho ďalších výhod. Zamyslite sa napríklad nad tým, ako prinútiť žmurknutie! S mojím prístupom je to jednoduché: trocha sa vložte do registra Arduino a odošlite ho do Nextion. Dvojité registre Nextion bolo možné aktualizovať z Arduina veľmi zriedka, pretože frekvencia blikania je nezávislá na komunikácii; frekvencia blikania závisí od objektu s časovačom do Nextion a môže bežať s minimálnou časovou základňou blízko 50 mS. Takže mojou metódou môžeme v Nextionu mrknúť svetlom na relatívne vysokej frekvencii (predpokladajme, že 2 Hz), aj keď moje Arduino odosiela správy každých 10 sekúnd, len pre extrémny príklad. To môže naznačovať opačný problém: ako postupovať, ak komunikácia zlyhá? Toto nie je predmetom tejto diskusie, ale tento problém som už vyriešil pomocou istého strážneho psa: jedného vo vnútri kódu Arduino, druhého do kódu Nextion.
Blikanie je regulované kódom Nextion, kde každé svetlo dodržiava svoje správne pravidlá: ZAPNUTÉ/VYPNUTÉ alebo ZELENÉ/ČERVENÉ alebo tiež zmena napísaného textu (alebo iného). O svojom projekte by som mohol povedať niekoľko ďalších vecí, ale radšej počkám na vaše otázky a potom pridám príliš veľa slov, ktoré nie je také ľahké preložiť tak dobre, ako by som urobil.
Krok 3: Úprava objektov Nextion
Tu je časť kódu, ktorý som napísal s Nextion Editorom na objekt tm0.
Neunikne nášmu upozorneniu, že so 16 bitmi prijatými od Arduina displej Nextion nielenže zapína a vypína signály. V tejto chvíli vynechávam vysvetlenia, aby som nekomplikoval porozumenie.
Som začiatočník, a preto je lepšie stiahnuť si stránku Nextion code. PDF a prečítať si zmätený kód nižšie. (Ospravedlňujem sa, toto je môj prvý pokyn)
Ak si želáte, môžete si stiahnuť kompletný kód „HMI“pre túto moju aplikáciu. Názov súboru tohto kódu je POW1225. HMI. Môže sa dostať do vášho displeja Nextion NX4024T032, ale aby ste to pochopili, musíte vplávať do mnohých objektov a pozrieť sa na kód v malom okne editora. Preto si myslím, že ľahšie bude vyzerať hlavný kód napísaný v súbore Nextion code. PDF
// Projekt POW1225. HMI 15. mája 2019
// vACC (va0) Akumulátor
// vINP (va1) Vstupný register xxxx xxxx xxxx xxxx
tm0.en = 1 // tm0 Začnite
tm0.tim = 50 // tm0 Časová základňa 50 mS
// RDY ****************
vACC.val = vINP.val & 0x0001 // Maska
if (vACC.val! = 0) // Test RDY
{
tRDY.pco = MODRÁ // ČERVENÁ
} inak
{
tRDY.pco = SIVÁ // tmavá SIVÁ
}
// PWR ***************
vACC.val = vINP.val & 0x0002
if (vACC.val! = 0) // Test PWR
{
tPWR.pco = ZELENÁ // svetlo ZELENÁ
tPON.txt = "ON" // ON
tPON.pco = ZELENÁ // svetlo ZELENÁ
} inak
{
tPWR.pco = SIVÁ // tmavá SIVÁ 33808
tPON.txt = "VYPNUTÉ" // VYPNUTÉ
tPON.pco = SIVÁ // tmavá ŠEDÁ 33808
}
// SUCHÉ ****************
vACC.val = vINP.val & 0x0004
if (vACC.val! = 0) // Test DRY
{
tDRV.pco = MODRÁ // MODRÁ
tDRY.pco = MODRÁ // MODRÁ
} inak
{
tDRV.pco = SIVÁ // tmavá SIVÁ 33808
tDRY.pco = SIVÁ // tmavá ŠEDÁ 33808
}
// SPUŠŤ ****************
vACC.val = vINP.val & 0x0018
if (vACC.val! = 0) // Test RUN
{
tRUN.bco = ČERVENÁ // MARCIA ČERVENÁ (zapnuté)
tRUN.pco = ČERNÝ // na ČIERNOM
tDIR.bco = ČERVENÁ // DIR ČERVENÁ
tDIR.pco = ČERNÝ // na ČIERNOM
} inak
{
tRUN.bco = 32768 // MARCIA GREY (vypnuté)
tRUN.pco = SIVÁ // na SIVEJ
tDIR.bco = 32768 // DIR dark GREEN 1024
tDIR.pco = SIVÁ // SIVÁ SIVÁ
tDIR.txt = "---" // STOP
}
// VLEVO ***************
vACC.val = vINP.val & 0x0008
if (vACC.val! = 0) // Test RUN v poriadku
{
tDIR.txt = "<<<" // DIR LEFT
}
// SPRÁVNY *************
vACC.val = vINP.val & 0x0010
if (vACC.val! = 0) // Test RUN vľavo
{
tDIR.txt = ">>>" // SPRÁVNE
}
// OBA ***************
vACC.val = vINP.val & 0x0018
if (vACC.val == 24) // Test SPUSTI oba
{
tDIR.txt = ">>! <<" // SPOLU OBA
}
// TEST ***************
vACC.val = vINP.val & 0x0020
if (vACC.val! = 0) // Test TEST
{
tTEST.pco = BIELY // BIELY
tsw tTEST, 1 // Povoliť dotykové udalosti
} inak
{
tTEST.pco = SIVÁ // tmavošedá 33808
tsw tTEST, 0 // Zakáže dotykové udalosti
}
// FAULT *************
vACC.val = vINP.val & 0x0040
if (vACC.val == 0) // Test FAULT
{
tFLT.pco = SIVÝ // PORUCHA chýba
}
ak (vACC.val! = 0)
{
tFLT.pco = ŽLTÉ // PORUCHA prítomná
}
// EME ****************
vACC.val = vINP.val & 0x0080
if (vACC.val == 0) // Test EME
{
tEME.pco = SIVÝ // EME chýba
}
ak (vACC.val! = 0)
{
tEME.pco = ČERVENÁ // EME prítomná
}
}
// FERMO *************
vACC.val = vINP.val & 0x0100
if (vACC.val! = 0) // Test FERMO
{
tFER.pco = ČIERNA // ČIERNA
tFER.bco = ZELENÁ // ZELENÁ
} inak
{
tFER.pco = SIVÁ // SIVÁ
tFER.bco = 672 // tmavozelená
}
// *******************
Potvrdenie
Chcem sa poďakovať Gideonovi Rossouwvovi, pretože čítaním jeho pokynov som rýchlo získal časť svojich cieľov. Dakujem pan Gideon Rossouwv
Odporúča:
Rotačný kodér - porozumenie a používanie (Arduino/iný Μkontrolér): 3 kroky
Rotačný kodér - porozumenie a používanie (Arduino/iný Μkontrolér): Rotačný kodér je elektromechanické zariadenie, ktoré prevádza rotačný pohyb na digitálne alebo analógové informácie. Môže sa otáčať v smere alebo proti smeru hodinových ručičiek. Existujú dva typy rotačných enkodérov: absolútne a relatívne (inkrementálne). Kodéry
Ako pridať drôt EL na kabát alebo iný odev: 10 krokov (s obrázkami)
Ako pridať drôt EL do kabátu alebo iného odevu: Ako osvetlený kostýmový výtvarník dostávam veľa otázok od ľudí, ktorí chcú vedieť, ako si vyrobiť vlastné kostýmy z drôtu EL. Nemám čas pomáhať každému individuálne, a tak som si povedal, že svoje rady zlúčim do jedného pokynu. Dúfajme, že
MIDI 5V LED Strip Light Controller pre Spielatron alebo iný MIDI syntetizátor: 7 krokov (s obrázkami)
MIDI 5V LED páskový svetelný ovládač pre Spielatron alebo iný MIDI syntetizátor: Tento ovládač bliká trojfarebnými LED pásikovými svetlami po dobu 50 mS na notu. Modrá pre G5 až D#6, červená pre E6 až B6 a zelená pre C7 až G7. Ovládač je zariadenie ALSA MIDI, takže softvér MIDI môže na LED diódy vystupovať súčasne so zariadením MIDI syntetizátora
Premeňte (len o) ľubovoľný mediálny súbor na (len o) akýkoľvek iný mediálny súbor zadarmo !: 4 kroky
Bezplatne prevádzajte (iba o) ľubovoľný mediálny súbor na (len o) akýkoľvek iný mediálny súbor !: Môj prvý pokyn, na zdravie! V každom prípade som bol na serveri Google a hľadal som bezplatný program, ktorý by konvertoval moje súbory Youtube.flv do formátu, ktorý je univerzálnejší, napríklad.wmv alebo.mov. Prehľadal som nespočetné množstvo fór a webových stránok a potom som našiel program s názvom
Pripojte iPod alebo iný prehrávač MP3 k bežným domácim reproduktorom bez drahého a objemného zosilňovača!: 4 kroky
Pripojte prehrávač iPod alebo iný prehrávač MP3 k bežným domácim reproduktorom bez drahého a objemného zosilňovača! Máte veľa ďalších stereofónnych reproduktorov, ktoré sa dodávajú s prerušovanými stereofónnymi zvukmi, alebo ich máte bez zjavného dôvodu? V tomto návode vám ukážem, ako ich môžete pripojiť k akémukoľvek prehrávaču MP3 alebo akémukoľvek zariadeniu so zvukovým portom