Orodha ya maudhui:

Njia tofauti na Ufuatao: Hatua 3
Njia tofauti na Ufuatao: Hatua 3

Video: Njia tofauti na Ufuatao: Hatua 3

Video: Njia tofauti na Ufuatao: Hatua 3
Video: ONGEZA NGUVU ZA KIUME | masaa 3 Bila kuchoka | WANAUME TU HII 2024, Julai
Anonim
Njia tofauti na Ufuatao
Njia tofauti na Ufuatao

Katika mradi wangu wa kwanza na Arduino Nano iliyounganishwa na onyesho la Nextion kugusa, nilikuwa nimeandika safu ndefu ya maagizo kupelekwa kwa Nextion kupitia bandari ya serial na hii haiwezi kuepukika ikiwa tunahitaji kutuma amri huru kabisa, kwa wakati mfupi.

Lazima pia nikubali kwamba nilitumia wakati mwingi katika 'kupigana' na Maktaba kuliko kitu kingine chochote. Kwa hivyo pole pole nilikuja kufanya kazi bila maktaba nzito ya ITEAD.

Hivi karibuni niligundua kuwa sikuwa na uharaka wa kuwasiliana na Nextion mabadiliko ya sifa za vitu vya kuona, lakini napendelea kusubiri hadi nizikusanye na kuzituma kwa Nextion kwa ujumla, nilipopata kikundi kamili.

Nitajaribu kujielezea vizuri.

Wakati katika mradi wangu ulio na viashiria 16 vya maandishi nataka kuwasha au kuzima baadhi yao, ninafanya hivyo kwa kutumia sifa ya 'bco' ambayo kwa kuwasha, hupita (kwa mfano) kutoka kijivu nyeusi hadi nyeupe (ikiwa in mstatili mweusi), na kinyume chake kuzima.

Katika maombi yangu niliona haina maana kutuma amri 16 kwa bandari ya serial kwa muda 16 tofauti, moja kwa kila 'bco' ya ishara 16.

Ninapendelea badala yake kwamba Arduino ikusanye ni ishara zipi lazima ziwe "juu" (HIGH) na ni zipi lazima ziwe "off" (LOW) katika rejista ya 16-bit, ambapo kila kidogo inalingana na moja ya ishara 16 ya Nextion.

Baada ya kusasisha kila daftari, ninasambaza dhamana yake kwa Nextion, ujumbe mmoja ambao una habari ya pamoja kuhusu mambo 16.

Kwa njia hii mawasiliano kutoka Arduino na Nextion yamepunguzwa sana kwa sababu katika ujumbe huo mmoja uliosambazwa kwenye serial kwenda kwa Nextion, habari hukusanywa ambayo vinginevyo ingehitaji usambazaji wa ujumbe 16.

Ukweli, sio lazima kila wakati kusasisha ripoti zote, lakini nina hakika kuwa kufanya vinginevyo kutapoteza wakati zaidi.

Kwa kawaida kila kipande kilichomo kwenye nambari iliyopokelewa na Arduino, onyesho la Nextion italazimika kuihusisha na sifa inayotarajiwa.

Hii inamaanisha kuwa nambari lazima iandikwe kwenye onyesho la Nextion, lakini haifai kuogopa: ikiwa nimefaulu…

Halafu kuna faida maradufu: Arduino atakuwa na nambari nyepesi na atakuwa chini ya mawasiliano ya serial na Nextion.

Ujumbe baada ya kupokea data katika ujumbe mmoja, utazitumia haraka sana kuliko ikiwa ungengojea ujumbe 16. Kuzima au kuzima kwa ishara 16 kwa hivyo itakuwa karibu wakati huo huo kwa hali ya kawaida, ambayo wakati wa idadi isiyojulikana ya ujumbe hupita kati ya utekelezaji wa amri ya ishara ya kwanza na amri ya ishara ya mwisho.

Katika onyesho la Nextion niliunda mfumo huu kwa njia ya kawaida, ambayo ni kwamba, kugeuza rejista ya 'mask' kila wakati hukuruhusu kuchunguza kila moja ya 16 bits. Kidogo kinapochunguzwa ni JUU, ishara inayohusishwa na taa hiyo inaangaza kwenye onyesho na inazima wakati kidogo ni CHINI.

Kipengele cha 'hasi' cha mfumo huu ni kwamba nambari iliyoandikwa kwenye onyesho la Nextion haifai sana kuandikwa kuliko nambari ya Arduino. Kwa kuongezea, nambari ya Nextion ina hatari ya kutawanyika juu ya vitu anuwai. Uangalifu lazima uchukuliwe kuandika kile unachofanya mara moja.

Ninatumia Notepad ++ kuandika nambari ambayo mimi huinakili kwenye kitu cha Nextion ambacho kiko karibu katika tm0 ya ukurasa 0.

Sintaksia ya lugha ya Nextion ina mapungufu mengi, lakini inaweza kushinda au kuzunguka kwa bidii na kujaribu kuona shida kutoka kwa maoni ambayo pia sio ya kawaida.

Kama mfano, naripoti njia ambayo Arduino anaandika sajili ili kupitishwa, iliyoandikwa na mimi kwa njia ya msingi zaidi iwezekanavyo.

Hatua ya 1: Jinsi Daftari linavyosambazwa

Katika faili ArduinoCode. PDF ninaonyesha mchoro wangu wote. (Kusoma nambari hapa chini sio wazi sana)

Hapa chini, nataka tu kuonyesha ni kwa njia gani Arduino tuma Sajili 16 kidogo kwa Nextion, bila msaada wa maktaba, lakini jus akiheshimu sintaksia iliyoelezewa na ITEAD.

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

tupu NexUpd ()

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

{

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

SRSerial.print (InpReg); // kusambaza bits 16 zilizokusanywa kwenye Onyesho la Nextion

SRSerial.print (InpReg); // kusambaza bits 16 zilizokusanywa kwenye Onyesho la Nextion

Andika (termin); // 255

Andika (termin); // 255

Andika (termin); // 255

}

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

Hatua ya 2:.. Lakini Kabla ya…

.. Lakini Kabla ya…
.. Lakini Kabla ya…

Kwa kweli nambari huanza na matamko yote na usanidi ().

Pembejeo ni INPUT_PULLUP, kwa hivyo swichi za kuingiza kawaida hufunguliwa na zikifungwa, hutumia GND kwa pembejeo ya mwandishi.

(Hii ni ya kwanza kufundishwa na samahani kukuonyesha nambari yangu kwa njia hii mbaya. Tafadhali pakua faili ArduinoCode. PDF kwamba ni wazi sana.

Ngoja nizungumze juu yake zaidi

Nimebuni njia yangu mwenyewe ya 'kuwaambia' maonyesho ya Nextion ni nini inapaswa kufanya. Kawaida MCU (Arduino kwa upande wangu) hutuma ujumbe kwa kila tofauti ili kutumika kwa sifa ya kitu chochote kimoja. Methode hii hupoteza muda mwingi kufanya vitu sio haraka sana kupakia mfululizo wa Line Serial. Nimeona ni rahisi zaidi kwamba Arduino kukusanya katika rejista 16 kidogo habari juu ya sifa za kutofautiana kwenye Nextion. Karibu kila mS 500, Arduino yangu anatuma kwa Nextion ujumbe mmoja ulio na biti 16 zilizomo katika kila rejista kwa wakati. Kwa wazi katika Nextion tunahitaji nambari inayoshughulikia kile lazima kifanyike. Usambazaji huu wa kazi (na nambari) hebu pata faida zingine nyingi. Kwa mfano, fikiria jinsi ya kufanya blink taa! Kwa njia yangu ni rahisi: weka kidogo kwenye rejista ya Arduino na upeleke kwa Nextion. Sajili za mapacha ya Nextion zinaweza kusasishwa kutoka Arduino mara chache sana, kwa sababu mzunguko wa blink ni huru kutoka kwa mawasiliano; mzunguko wa blink unategemea kutoka kwa kitu cha Timer kwenda kwa Nextion na inaweza kukimbia na msingi wa muda wa chini karibu na 50 mS. Kwa hivyo kwa njia yangu tunaweza kupepesa taa katika Nextion kwa masafa ya juu (tuseme 2 Hz), hata kama Arduino yangu atatuma ujumbe kila sekunde 10, kwa mfano uliokithiri. Hii inaweza kupendekeza shida tofauti: jinsi ya kufanya ikiwa Mawasiliano hayatafaulu? Hili sio lengo la mjadala huu, lakini tayari nimetatua shida hii na aina ya Mbwa wa Kuangalia: moja ndani ya Nambari ya Arduino, na nyingine kwenye nambari ya Nextion.

Kupepesa kunasimamiwa na nambari ya Nextion, ambapo kila taa inafuata sheria zake sahihi: ZIMA / ZIMA au KIJANI / RED au pia kubadilisha yaliyoandikwa ndani (au mengine zaidi). Ningeweza kuambia mambo mengine juu ya mradi wangu lakini napendelea kusubiri maswali yako, kabla ya kuongeza maneno mengi sio rahisi kwangu kutafsiri vizuri kama vile ningefanya.

Hatua ya 3: Kuhariri Vitu vya Nextion

Kuhariri Vitu vya Nextion
Kuhariri Vitu vya Nextion

Hapa kuna sehemu ya nambari niliyoandika na Nextion Mhariri kwenye kitu cha tm0.

Haitoroki taarifa yetu kwamba na bits 16 zilizopokelewa kutoka Arduino, onyesho la Nextion haliwashi na kuzima tu ishara. Kwa sasa ninaacha maelezo ili nisije nikasumbua uelewa.

Mimi ni waanzilishi na kwa hivyo ni bora kupakua nambari ya Nextion. PDF badala yake kusoma nambari iliyochanganyikiwa hapa chini. (Samahani hii ndio mafunzo yangu ya kwanza)

Ikiwa unataka unaweza kupakua nambari kamili "HMI" kwa programu hii. Jina la faili la nambari hii ni POW1225. HMI. Inaweza kukimbia kwenye onyesho lako la Nextion NX4024T032 lakini ili kuielewa lazima uogelee kwenye vitu vingi na uangalie nambari ndani ya dirisha dogo la mhariri. Kwa hivyo nadhani hiyo itakuwa rahisi zaidi kutafuta nambari kuu, iliyoandikwa kwenye nambari ya Nextion ya faili

// Mradi POW1225. HMI 15 Mei 2019

// vACC (va0) Mkusanyiko

// vINP (va1) Daftari la Kuingiza xxxx xxxx xxxx xxxx

tm0.en = 1 // tm0 Anza

tm0.tim = 50 // tm0 Msingi wa saa 50 mS

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

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

ikiwa (vACC.val! = 0) // Jaribu RDY

{

tRDY.pco = BLUE // NYEKUNDU

} mwingine

{

tRDY.pco = KIJIVU // kijivu kijivu

}

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

vACC.val = vINP.val & 0x0002

ikiwa (vACC.val! = 0) // Jaribu PWR

{

tPWR.pco = KIJANI / KIJANI

tPON.txt = "ON" // ILIYO

tPON.pco = KIJANI // KIJIVU KIJANI

} mwingine

{

tPWR.pco = KIJIVU // kijivu kijivu 33808

tPON.txt = "ZIMA" // ZIMA

tPON.pco = KIJIVU // kijivu kijivu 33808

}

// KAKAVU ***************

vACC.val = vINP.val & 0x0004

ikiwa (vACC.val! = 0) // Jaribu DRY

{

tDRV.pco = BLUE // BLUE

tDRY.pco = BLUE // BLUE

} mwingine

{

tDRV.pco = KIJIVU // kijivu kijivu 33808

tDRY.pco = KIJIVU // kijivu kijivu 33808

}

// KIMBIA ***************

vACC.val = vINP.val & 0x0018

ikiwa (vACC.val! = 0) // Jaribu RUN

{

tRUN.bco = NYEKUNDU // MARCIA RED (on)

tRUN.pco = NYEUSI // kwa NYEUSI

tDIR.bco = NYEKUNDU // DIR NYEKUNDU

tDIR.pco = NYEUSI // kwa NYEUSI

} mwingine

{

tRUN.bco = 32768 // MARCIA GRAY (imezimwa)

tRUN.pco = KIJIVU // kwenye kijivu

tDIR.bco = 32768 // DIR giza KIJANI 1024

tDIR.pco = KIJIVU // KIJIVU KIJIVU

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

}

// KUSHOTO **************

vACC.val = vINP.val & 0x0008

ikiwa (vACC.val! = 0) // Jaribu RUN Haki

{

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

}

// HAKI *************

vACC.val = vINP.val & 0x0010

ikiwa (vACC.val! = 0) // Jaribu RUN Kushoto

{

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

}

// WOTE **************

vACC.val = vINP.val & 0x0018

ikiwa (vACC.val == 24) // Jaribu RUN zote mbili

{

tDIR.txt = ">>! <<" // DIR BOTH

}

// Jaribio **************

vACC.val = vINP.val & 0x0020

ikiwa (vACC.val! = 0) // Jaribio la Mtihani

{

MTIHANI.pco = NYEUPE // NYEUPE

Jaribio la tsw, 1 // Wezesha hafla za Kugusa

} mwingine

{

MTIHANI.pco = KIJIVU // kijivu kijivu 33808

Jaribio la tsw, 0 // Lemaza hafla za Kugusa

}

// KOSA *************

vACC.val = vINP.val & 0x0040

ikiwa (vACC.val == 0) // Jaribio LA KOSA

{

tFLT.pco = KIJIVU // KOSA haipo

}

ikiwa (vACC.val! = 0)

{

tFLT.pco = MANJANO // KOSA iko

}

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

vACC.val = vINP.val & 0x0080

ikiwa (vACC.val == 0) // Jaribu EME

{

tEME.pco = KIJIVU // EME haipo

}

ikiwa (vACC.val! = 0)

{

tEME.pco = NYEKUNDU // EME sasa

}

}

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

vACC.val = vINP.val & 0x0100

ikiwa (vACC.val! = 0) // Jaribu FERMO

{

tFER.pco = NYEUSI // NYEUSI

tFER.bco = KIJANI / KIJANI

} mwingine

{

tFER.pco = KIJIVU // KIJIVU

tFER.bco = 672 // giza KIJANI

}

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

Shukrani

Ninataka kutoa shukurani zangu kwa Gideon Rossouwv kwa sababu kusoma Maagizo yake nimepata haraka sehemu ya malengo yangu. Asante mr. Gideon Rossouwv

Ilipendekeza: