Përmbajtje:

Një qasje e ndryshme me ardhjen: 3 hapa
Një qasje e ndryshme me ardhjen: 3 hapa

Video: Një qasje e ndryshme me ardhjen: 3 hapa

Video: Një qasje e ndryshme me ardhjen: 3 hapa
Video: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, Korrik
Anonim
Një Qasje Ndryshe Me Nextion
Një Qasje Ndryshe Me Nextion

Në projektin tim të parë me Arduino Nano të lidhur me ekranin me prekje Nextion, unë kisha shkruar një seri të gjatë komandash që do të komunikoheshin tek Nextion përmes portit serik dhe kjo është e pashmangshme nëse duhet të dërgojmë komanda plotësisht të pavarura, në momente të rastësishme.

Gjithashtu më duhet të pranoj se kam kaluar më shumë kohë në 'luftime' me Bibliotekat se çdo gjë tjetër. Kështu që gradualisht fillova të punoj plotësisht pa bibliotekat e rënda të ITEAD.

Shpejt kuptova se nuk kisha asnjë urgjencë për t'i komunikuar Nextion ndryshimet në atributet e objekteve vizuale, por preferoj të pres derisa t'i mbledh dhe t'i dërgoj në Nextion në tërësi, kur kam marrë një grup të plotë.

Do të përpiqem ta shpjegoj veten më mirë.

Kur në projektin tim të përbërë nga 16 indikacione tekstuale dua të ndez ose çaktivizoj disa prej tyre, e bëj duke përfituar nga atributi 'bco' që për ndezjen, kalon (për shembull) nga gri e errët në të bardhë (nëse është një drejtkëndësh i zi), dhe anasjelltas për ta fikur.

Në aplikacionin tim e kam gjetur të padobishme dërgimin e 16 komandave në portin serik në 16 momente të ndryshme, një për secilën 'bco' të 16 sinjaleve.

Në vend të kësaj, preferoj që Arduino të mbledhë cilat sinjale duhet të jenë "aktiv" (LART HIGH) dhe cilat duhet të jenë "fikur" (LOW) në një regjistër 16-bit, ku secili bit i përgjigjet njërit prej sinjalizimit 16 të Nextion.

Pas azhurnimit të secilës bit të regjistrit, unë i transmetoj vlerën e tij Nextion, një mesazh i vetëm që përmban një informacion kolektiv në lidhje me 16 elementë.

Në këtë mënyrë komunikimi nga Arduino dhe Nextion zvogëlohet ndjeshëm sepse në atë mesazh të vetëm të transmetuar në serial tek Nextion, mblidhet informacioni që përndryshe do të kishte kërkuar transmetimin e 16 mesazheve.

Vërtetë, nuk është gjithmonë e nevojshme të azhurnoni të gjitha raportet, por jam i sigurt se përndryshe do të humbte më shumë kohë.

Natyrisht çdo bit i përmbajtur në numrin e plotë të marrë nga Arduino, ekrani Nextion do të duhet ta shoqërojë atë me atributin e dëshiruar.

Kjo do të thotë që kodi duhet të shkruhet në ekranin Nextion, por nuk duhet të trembet: nëse kam pasur sukses…

Pastaj ka një avantazh të dyfishtë: Arduino do të ketë një kod më të lehtë dhe do të jetë më pak i angazhuar në komunikimin serik me Nextion.

Pas marrjes së të dhënave në një mesazh të vetëm, do t'i përdorni ato shumë më shpejt sesa nëse do të prisnin 16 mesazhe. Ndezja ose fikja e 16 sinjaleve do të jetë prandaj njëkohësisht në lidhje me mënyrën më të zakonshme, në të cilën koha për një numër të panjohur mesazhesh kalon midis ekzekutimit të komandës për sinjalizimin e parë dhe komandës për sinjalizimin e fundit.

Në ekranin Nextion e krijova këtë sistem në mënyrë klasike, domethënë, kthimi i një regjistri 'maskë' çdo herë ju lejon të ekzaminoni secilën nga 16 bitët. Kur biti i ekzaminuar është i LART, sinjali i lidhur me atë bit ndizet në ekran dhe fiket kur një bit është I ULT.

Aspekti 'negativ' i këtij sistemi është se kodi i shkruar në ekranin Nextion është më pak i përshtatshëm për t'u dokumentuar sesa kodi Arduino. Për më tepër, kodi Nextion rrezikon të shpërndahet në objekte të ndryshme. Duhet pasur kujdes për të dokumentuar atë që bëni menjëherë.

Unë përdor Notepad ++ për të shkruar kodin të cilin më pas e kopjoj në objektin Nextion i cili është pothuajse ekskluzivisht në tm0 të faqes 0.

Sintaksa e gjuhës Nextion ka kufizime të shumta, por arrin t'i kapërcejë ato ose t'i kapërcejë ato me një minimum përpjekjeje dhe të përpiqet t'i shohë problemet nga pikëpamjet që janë gjithashtu të pazakonta.

Si shembull, unë raportoj mënyrën në të cilën Arduino shkruan regjistrin që do të transmetohet, shkruar nga unë në mënyrën më elementare të mundshme.

Hapi 1: Si transmetohet regjistri

Në skedarin ArduinoCode. PDF unë tregoj të gjithë skicën time. (Leximi i kodit këtu poshtë nuk është aq i qartë)

Këtu poshtë, unë dua të tregoj vetëm se në cilën mënyrë Arduino e dërgon Regjistrin 16 bit në Nextion, pa ndihmën e bibliotekave, por duke respektuar sintaksën e përshkruar nga ITEAD.

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

i pavlefshëm NexUpd ()

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

{

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

SRSerial.print (InpReg); // transmetoni 16 bitët e mbledhur në Displayion Nextion

SRSerial.print (InpReg); // transmetoni 16 bitët e mbledhur në Nextion Display

SRSerial.shkruaj (termin); // 255

SRSerial.shkruaj (termin); // 255

SRSerial.shkruaj (termin); // 255

}

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

Hapi 2:.. Por para…

.. Por më parë…
.. Por më parë…

Sigurisht që kodi fillon me të gjitha deklaratat dhe konfigurimin ().

Hyrjet janë INPUT_PULLUP, kështu që çelsat e hyrjes janë normalisht të hapura dhe kur mbyllen, ata aplikojnë GND në hyrjen korresponduese.

(Ky është udhëzuesi im i parë dhe më vjen keq që ju tregoj kodin tim në këtë mënyrë të keqe. Ju lutemi shkarkoni skedarin ArduinoCode. PDF që është shumë i qartë.

Më lejoni të flas për të më shumë

Unë kam zhvilluar mënyrën time për t'i 'treguar' ekranit Nextion se çfarë duhet të bëjë. Zakonisht MCU (Arduino në rastin tim) dërgon një mesazh për çdo ndryshim të vetëm që të zbatohet për atributin e çdo objekti të vetëm. Kjo metodë humb shumë kohë për të bërë gjëra jo gjithmonë aq urgjente për të ngarkuar vazhdimisht Linjën Seriale. Kam gjetur më të përshtatshëm që Arduino të mbledhë në regjistrat 16 bit informacionin në lidhje me atributet që ndryshojnë në Nextion. Rreth çdo 500 mS, Arduino im i dërgon Nextion një mesazh që përmban 16 bitët që gjenden në secilin regjistër në atë kohë. Padyshim që në Nextion ne kemi nevojë për kodin që trajton atë që duhet të ekzekutohet. Kjo shpërndarje e detyrës (dhe kodit) le të marrë shumë përparësi të tjera. Për shembull, mendoni se si ta bëni dritën e dritës! Me qasjen time është e lehtë: futeni pak në regjistrin Arduino dhe dërgojeni tek Nextion. Regjistrat binjakë Nextion mund të përditësohen nga Arduino shumë rrallë, sepse frekuenca e ndezjes është e pavarur nga komunikimi; frekuenca e pulsimit varet nga një objekt Timer në Nextion dhe mund të funksionojë me bazën minimale kohore afër 50 mS. Pra, me metodën time ne mund të ndezim një dritë në Nextion me frekuencë relativisht të lartë (supozojmë 2 Hz), edhe nëse Arduino im dërgon mesazhe çdo 10 sekonda, vetëm për një shembull ekstrem. Kjo mund të sugjerojë problemin e kundërt: si të veprojmë nëse komunikimi dështon? Ky nuk është objekti i këtij diskutimi, por unë tashmë e kam zgjidhur këtë problem me një lloj Watch Dog: një brenda Kodit Arduino, një tjetër në kodin Nextion.

Pulsimi rregullohet me kodin Nextion, ku çdo dritë ndjek rregullat e tij të duhura: ON/OFF ose GREEN/KUQ ose gjithashtu ndryshimi i brendësisë së shkruar (ose më shumë të tjera). Mund të them disa gjëra të tjera në lidhje me projektin tim, por preferoj të pres pyetjet tuaja, para se të shtoj shumë fjalë jo aq të lehta për mua që të përkthehen mirë siç do të bëja.

Hapi 3: Redaktimi i objekteve Nextion

Redaktimi i objekteve Nextion
Redaktimi i objekteve Nextion

Këtu është një pjesë e kodit që kam shkruar me Nextion Editor në objektin tm0.

Nuk na ikën vërejtja se me 16 bitët e marrë nga Arduino, ekrani Nextion nuk ndez dhe fik sinjalet. Për momentin unë heq shpjegimet në mënyrë që të mos komplikoj të kuptuarit.

Unë jam një fillestar dhe kështu është më mirë të shkarkoni kodin Nextion. Në vend të kësaj faqe PDF për të lexuar kodin e hutuar këtu poshtë. (Më vjen keq që ky është udhëzimi im i parë)

Nëse dëshironi, mund të shkarkoni kodin e plotë "HMI" për këtë aplikacionin tim. Emri i skedarit të këtij kodi është POW1225. HMI. Mund të futet në ekranin tuaj Nextion NX4024T032, por për ta kuptuar atë duhet të notoni në shumë objekte dhe të shikoni kodin brenda dritares së vogël të redaktuesit. Kështu që unë mendoj se do të jetë më e lehtë të shikosh kodin kryesor, të shkruar në skedarin Nextion code. PDF

// Projekti POW1225. HMI 15 maj 2019

// vACC (va0) Akumulatori

// vINP (va1) Regjistri i hyrjes xxxx xxxx xxxx xxxx

tm0.en = 1 // tm0 Fillimi

tm0.tim = 50 // tm0 Baza kohore 50 mS

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

vACC.val = vINP.val & 0x0001 // Maskë

nëse (vACC.val! = 0) // Test RDY

{

tRDY.pco = BLUE // KUQ

} tjetër

{

tRDY.pco = GRI // GRI e errët

}

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

vACC.val = vINP.val & 0x0002

nëse (vACC.val! = 0) // Test PWR

{

tPWR.pco = GREEN // dritë GREEN

tPON.txt = "ON" // ON

tPON.pco = GREEN // dritë GREEN

} tjetër

{

tPWR.pco = GRI // GRI e errët 33808

tPON.txt = "OFF" // OFF

tPON.pco = GRI // GRI e errët 33808

}

// TE THASH ***************

vACC.val = vINP.val & 0x0004

nëse (vACC.val! = 0) // Testoni THAREN

{

tDRV.pco = BLUE // BLUE

tDRY.pco = BLUE // BLUE

} tjetër

{

tDRV.pco = GRI // GRI e errët 33808

tDRY.pco = GRI // GRI e errët 33808

}

// RUN ***************

vACC.val = vINP.val & 0x0018

nëse (vACC.val! = 0) // Test RUN

{

tRUN.bco = KUQ // MARCIA KUQ (ndezur)

tRUN.pco = ZI // në ZI

tDIR.bco = KUQ // DIR KUQ

tDIR.pco = ZI // në ZI

} tjetër

{

tRUN.bco = 32768 // MARCIA GRI (joaktive)

tRUN.pco = GRI // në GRI

tDIR.bco = 32768 // DIR GREEN e errët 1024

tDIR.pco = GRI // DIR GRI

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

}

// Majtas **************

vACC.val = vINP.val & 0x0008

nëse (vACC.val! = 0) // Test RUN Right

{

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

}

// E DREJTA *************

vACC.val = vINP.val & 0x0010

nëse (vACC.val! = 0) // Test RUN Majtas

{

tDIR.txt = ">>>" // E DREJTA DIR

}

// TE DYJA **************

vACC.val = vINP.val & 0x0018

nëse (vACC.val == 24) // Test RUN të dyja

{

tDIR.txt = ">>! <<" // Të dyja të DIRA

}

// TEST **************

vACC.val = vINP.val & 0x0020

nëse (vACC.val! = 0) // Test TEST

{

tTEST.pco = E BARDH // // E BARDH

tsw tTEST, 1 // Aktivizo ngjarjet me prekje

} tjetër

{

tTEST.pco = GRI // GRI e errët 33808

tsw tTEST, 0 // Çaktivizo ngjarjet e Prekjes

}

// FAULT *************

vACC.val = vINP.val & 0x0040

nëse (vACC.val == 0) // Test FAULT

{

tFLT.pco = GRI // FAULT mungon

}

nëse (vACC.val! = 0)

{

tFLT.pco = E Verdhë // FAKT i pranishëm

}

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

vACC.val = vINP.val & 0x0080

nëse (vACC.val == 0) // Test EME

{

tEME.pco = GRI // EME mungon

}

nëse (vACC.val! = 0)

{

tEME.pco = KUQ // EME e pranishme

}

}

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

vACC.val = vINP.val & 0x0100

nëse (vACC.val! = 0) // Test FERMO

{

tFER.pco = ZI // ZI

tFER.bco = E GJELLE // E GJELLE

} tjetër

{

tFER.pco = GRI // GRI

tFER.bco = 672 // E gjelbër e errët

}

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

Mirënjohje

Unë dua t'i jap mirënjohjet e mia Gideon Rossouwv sepse duke lexuar udhëzimet e tij kam fituar shpejt një pjesë të objektivave të mia. Faleminderit z. Gideon Rossouwv

Recommended: