Բովանդակություն:

Հաջորդությամբ այլ մոտեցում. 3 քայլ
Հաջորդությամբ այլ մոտեցում. 3 քայլ

Video: Հաջորդությամբ այլ մոտեցում. 3 քայլ

Video: Հաջորդությամբ այլ մոտեցում. 3 քայլ
Video: Upclose Ep.3: Saif-ur-Rahman (Multi-Subs Available) 2024, Հուլիսի
Anonim
Հաջորդի հետ տարբերվող մոտեցում
Հաջորդի հետ տարբերվող մոտեցում

Հաջորդ սենսորային էկրանին Arduino Nano- ի հետ իմ առաջին նախագծում ես գրել էի մի շարք հրամաններ, որոնք պետք է հաջորդականությամբ հաջորդականությամբ փոխանցվեին Nextion- ին, և դա անխուսափելի է, եթե պատահական պահերին անհրաժեշտ լինի ուղարկել բոլորովին անկախ հրամաններ:

Նաև պետք է խոստովանեմ, որ ավելի շատ ժամանակ եմ անցկացրել «կռվելու» գրադարանների հետ, քան որևէ այլ բան: Այսպիսով, ես աստիճանաբար գործի անցա ամբողջովին առանց ծանր ITEAD գրադարանների:

Շուտով հասկացա, որ ես շտապություն չունեմ Nextion- ին հաղորդելու տեսողական առարկաների հատկությունների փոփոխությունները, բայց նախընտրում եմ սպասել, մինչև դրանք հավաքեմ և ուղարկեմ Nextion- ին ամբողջությամբ, երբ ստանամ ամբողջական խումբ:

Ես կփորձեմ ավելի լավ բացատրել ինձ:

Երբ 16 տեքստային ցուցումներից բաղկացած իմ նախագծում ուզում եմ մի քանիսը միացնել կամ անջատել, դա անում եմ ՝ օգտվելով «bco» հատկանիշից, որը միացնելու համար (օրինակ) մուգ մոխրագույնից անցնում է սպիտակի (եթե սև ուղղանկյուն) և հակառակը ՝ անջատելու համար:

Իմ դիմումի մեջ ես անիմաստ գտա 16 հրահանգ սերիական նավահանգիստ ուղարկել 16 տարբեր պահերին, մեկը ՝ 16 ազդանշանի յուրաքանչյուր «bco» - ի համար:

Փոխարենը, ես նախընտրում եմ, որ Arduino- ն հավաքի, թե որ ազդանշանները պետք է լինեն «միացված» (HIGH), և որոնք պետք է լինեն «անջատված» (LOW) 16-բիթանոց գրանցամատյանում, որտեղ յուրաքանչյուր բիթ համապատասխանում է Nextion- ի 16 ազդանշաններից մեկին:

Գրանցիչի յուրաքանչյուր բիթը թարմացնելուց հետո ես փոխանցում եմ դրա արժեքը Nextion- ին, մեկ հաղորդագրություն, որը պարունակում է 16 տարրերի վերաբերյալ հավաքական տեղեկատվություն:

Այս կերպ Arduino- ից և Nextion- ից հաղորդակցությունը զգալիորեն կրճատվում է, քանի որ սերիալում Nextion- ին փոխանցվող այդ մեկ հաղորդագրության մեջ հավաքվում է տեղեկատվություն, որն այլապես կպահանջեր 16 հաղորդագրության փոխանցում:

Trueիշտ է, միշտ չէ, որ անհրաժեշտ է թարմացնել բոլոր հաշվետվությունները, բայց ես վստահ եմ, որ հակառակ դեպքում ավելի շատ ժամանակ կկորցնեի:

Բնականաբար, Arduino- ի ստացած ամբողջ թվաքանակում պարունակվող յուրաքանչյուր բիթ, Nextion ցուցադրումը պետք է այն կապի ցանկալի հատկանիշի հետ:

Սա նշանակում է, որ կոդը պետք է գրվի Nextion- ի ցուցադրման մեջ, բայց այն չպետք է վախենա. Եթե ինձ հաջողվի…

Հետո կա կրկնակի առավելություն. Arduino- ն կունենա ավելի թեթև կոդ և ավելի քիչ կզբաղվի Nextion- ի հետ սերիական հաղորդակցմամբ:

Հաջորդը տվյալները մեկ հաղորդագրության մեջ ստանալուց հետո դրանք շատ ավելի արագ կօգտագործի, քան եթե սպասեր 16 հաղորդագրության: Հետևաբար, 16 ազդանշանների միացումը կամ անջատումը կլինի գրեթե միաժամանակ ամենասովորական ռեժիմի դեպքում, որի դեպքում անհայտ թվով հաղորդագրությունների ժամանակը անցնում է առաջին ազդանշանի և վերջին ազդանշանի հրամանի կատարման միջև:

Nextion ցուցադրման ժամանակ ես ստեղծեցի այս համակարգը դասական եղանակով, այսինքն ՝ ամեն անգամ «դիմակ» գրանցամատյան շրջելը թույլ է տալիս ուսումնասիրել 16 բիթերից յուրաքանչյուրը: Երբ հետազոտված բիթը ԲԱՐՁՐ է, այդ բիթի հետ կապված ազդանշանը լուսավորվում է էկրանին և անջատվում է, երբ բիթը ցածր է:

Այս համակարգի «բացասական» կողմն այն է, որ Nextion էկրանին գրված ծածկագիրը փաստաթղթավորման համար ավելի հարմար չէ, քան Arduino ծածկագիրը: Ավելին, Nextion ծածկագիրը վտանգում է ցրվել տարբեր օբյեկտների վրա: Պետք է զգույշ լինել ՝ փաստաթղթավորելու, թե ինչ եք անում անմիջապես:

Ես օգտագործում եմ Notepad ++ ՝ ծածկագիրը գրելու համար, որն այնուհետ պատճենում եմ Nextion օբյեկտում, որը գրեթե բացառապես գտնվում է 0 -րդ էջի tm0- ում:

Nextion լեզվի շարահյուսությունն ունի բազմաթիվ սահմանափակումներ, սակայն նրան հաջողվում է հաղթահարել դրանք կամ շրջանցել դրանք նվազագույն ջանքերով և փորձել խնդիրները դիտել նաև անսովոր տեսանկյուններից:

Որպես օրինակ ՝ ես հայտնում եմ այն եղանակը, որով Արդուինոն գրում է փոխանցվող գրանցամատյանը ՝ գրված իմ կողմից հնարավորինս ամենատարրական ձևով:

Քայլ 1. Ինչպես է փոխանցվում գրանցամատյանը

ArduinoCode. PDF ֆայլում ես ցույց եմ տալիս իմ ամբողջ ուրվագիծը: (Կոդն այստեղ կարդալը այնքան էլ պարզ չէ)

Ահա ներքևում, ես ուզում եմ միայն ցույց տալ, թե ինչ կերպ է Arduino- ն ուղարկում 16 բիթանոց Register- ը Nextion- ին ՝ առանց գրադարանների օգնության, բայց հարգելով ITEAD- ի նկարագրած շարահյուսությունը:

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

դատարկ NexUpd ()

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

{

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

SRSerial.print (InpReg); // փոխանցված 16 բիթերը փոխանցեք Nextion Display- ին

SRSerial.print (InpReg); // հավաքված 16 բիթերը փոխանցեք Nextion Display- ին

SRSerial.write (տերմինալ); // 255

SRSerial.write (տերմինալ); // 255

SRSerial.write (տերմինալ); // 255

}

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

Քայլ 2:.. Բայց մինչ…

.. Բայց առաջ…
.. Բայց առաջ…

Իհարկե, կոդը սկսվում է բոլոր հայտարարագրերից և տեղադրումից ():

Մուտքերը INPUT_PULLUP են, այնպես որ մուտքային անջատիչները սովորաբար բաց են, և երբ փակվում են, GND- ը կիրառում են համապատասխան մուտքի վրա:

(Սա իմ առաջին հրահանգն է և ցավում եմ, որ այս ծածկագիրը ձեզ ցույց եմ տալիս այս վատ եղանակով: Խնդրում ենք ներբեռնել ֆայլը ArduinoCode. PDF, որ այն շատ պարզ է:

Թույլ տվեք ավելի շատ խոսել դրա մասին

Ես մշակել եմ Nextion ցուցադրմանը «ասելու» իմ ուղին, թե ինչ պետք է անի: Սովորաբար MCU- ն (իմ դեպքում Arduino- ն) հաղորդագրություն է ուղարկում յուրաքանչյուր տատանումների համար `կիրառելու որևէ առանձին օբյեկտի հատկանիշը: Այս մեթոդը շատ ժամանակ է վատնում` անընդհատ սերիական գիծը անընդհատ բեռնելու համար անելու համար: Ես ավելի հարմար գտա, որ Arduino- ն հավաքեց 16 բիթանոց գրանցամատյաններ Nextion- ում տարբերվող հատկանիշների մասին տեղեկությունները: Մոտ 500 mS- ով, իմ Arduino- ն Nextion- ին ուղարկեց մեկ հաղորդագրություն, որը պարունակում էր յուրաքանչյուր գրանցամատյանում պարունակվող 16 բիթը ժամանակին: Ակնհայտ է, որ Nextion- ում մեզ անհրաժեշտ է այն կոդը, որը կարգավորում է այն, ինչ պետք է կատարվի: Առաջադրանքի (և ծածկագրի) այս բաշխումը թույլ է տալիս ստանալ բազմաթիվ այլ առավելություններ: Օրինակ ՝ մտածեք, թե ինչպես ստիպել թարթել լույսը: Իմ մոտեցմամբ դա հեշտ է. Մի փոքր մտեք Arduino գրանցամատյան և ուղարկեք այն Nextion- ին: Nextion զույգ գրանցամատյանները շատ հազվադեպ կարող են թարմացվել Arduino- ից, քանի որ թարթելու հաճախականությունը դա անկախ է հաղորդակցությունից. թարթման հաճախականությունը կախված է erամաչափի օբյեկտից դեպի Nextion և կարող է աշխատել նվազագույն ժամանակային բազայի հետ մոտ 50 մՍ: Այսպիսով, իմ մեթոդով մենք կարող ենք Nextion- ի լույսը թարթել համեմատաբար բարձր հաճախականությամբ (ենթադրենք 2 Հց), նույնիսկ եթե իմ Arduino- ն հաղորդագրություններ է ուղարկում յուրաքանչյուր 10 վայրկյանը մեկ, միայն ծայրահեղ օրինակի համար: Սա կարող է հուշել հակառակ խնդիրը. Ինչպե՞ս վարվել, եթե հաղորդակցությունը ձախողվի: Սա այս քննարկման առարկան չէ, բայց ես արդեն լուծել եմ այս խնդիրը մի տեսակ Watch Dog- ով. Մեկը Arduino կոդի ներսում, մյուսը Nextion կոդի մեջ:

Թարթելը կարգավորվում է Nextion ծածկագրով, որտեղ յուրաքանչյուր լույս հետևում է իր համապատասխան կանոններին ՝ ON/OFF կամ GREEN/RED կամ նաև ներսում գրվածի փոփոխություն (կամ այլ ավելին): Ես կարող էի այլ բաներ պատմել իմ նախագծի մասին, բայց նախընտրում եմ սպասել ձեր հարցերին, նախքան ավելացնելու շատ բառեր, որոնք ինձ համար այնքան էլ հեշտ չեն թարգմանել, ինչպես ես:

Քայլ 3. Հաջորդի օբյեկտների խմբագրում

Nextion օբյեկտների խմբագրում
Nextion օբյեկտների խմբագրում

Ահա կոդի մի հատված, որը ես գրել եմ Nextion Editor- ի հետ tm0 օբյեկտի վրա:

Մեր ուշադրությունից չենք վրիպում, որ Arduino- ից ստացված 16 բիթերի դեպքում Nextion- ի էկրանը պարզապես չի միացնում և անջատում ազդանշանները: Այս պահին բաց եմ թողնում բացատրությունները, որպեսզի չբարդացնեմ հասկացողությունը:

Ես սկսնակ եմ, ուստի ավելի լավ է ներբեռնել Nextion ծածկագիրը: Փոխարենը ՝ PDF էջը ներքևում կարդալու համար շփոթված ծածկագիրը: (Sorryավում եմ, որ սա իմ առաջին հրահանգն է)

Եթե ցանկանում եք, կարող եք ներբեռնել «HMI» ամբողջական ծածկագիրը այս իմ դիմումի համար: Այս ծածկագրի ֆայլի անունն է POW1225. HMI: Այն կարող է բախվել ձեր Nextion էկրանին NX4024T032, բայց դա հասկանալու համար պետք է լողալ բազմաթիվ առարկաների մեջ և ծածկագրին նայել խմբագրի փոքր պատուհանի ներսում: Այսպիսով, ես կարծում եմ, որ ավելի հեշտ կլինի նայել հիմնական կոդը, որը գրված է Nextion code. PDF ֆայլում

// Pրագիր POW1225. HMI 15 մայիսի 2019 թ

// vACC (va0) Կուտակիչ

// vINP (va1) Մուտքի գրանցում xxxx xxxx xxxx xxxx

tm0.en = 1 // tm0 Սկիզբ

tm0.tim = 50 // tm0 Timeամկետային բազա 50 mS

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

vACC.val = vINP.val & 0x0001 // Դիմակ

եթե (vACC.val! = 0) // Փորձեք RDY

{

tRDY.pco = ԿԱՊՈՎ // ԿԱՐՄԻՐ

} այլ

{

tRDY.pco = Մոխրագույն // մուգ Մոխրագույն

}

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

vACC.val = vINP.val & 0x0002

if (vACC.val! = 0) // Փորձարկել PWR- ը

{

tPWR.pco = Կանաչ // բաց Կանաչ

tPON.txt = "ON" // ON

tPON.pco = Կանաչ // բաց Կանաչ

} այլ

{

tPWR.pco = Մոխրագույն // մուգ Մոխրագույն 33808

tPON.txt = "OFF" // OFF

tPON.pco = Մոխրագույն // մուգ Մոխրագույն 33808

}

// ՉՈՐ ***************

vACC.val = vINP.val & 0x0004

եթե (vACC.val! = 0) // Test DRY

{

tDRV.pco = ԿԱՊՈ //Շ // Կապույտ

tDRY.pco = ԿԱՊՈ //Շ // Կապույտ

} այլ

{

tDRV.pco = Մոխրագույն // մուգ Մոխրագույն 33808

tDRY.pco = Մոխրագույն // մուգ Մոխրագույն 33808

}

// ՎԱՌԵԼ ***************

vACC.val = vINP.val & 0x0018

եթե (vACC.val! = 0) // Test RUN

{

tRUN.bco = ԿԱՐՄԻՐ // MARCIA RED (միացված)

tRUN.pco = ՍԵՎ // ՍԵՎ

tDIR.bco = ԿԱՐՄԻՐ // ԿՈ RՐ ԿԱՐՄԻՐ

tDIR.pco = ՍԵՎ // ՍԵՎ

} այլ

{

tRUN.bco = 32768 // MARCIA GRAY (անջատված)

tRUN.pco = Մոխրագույն // Մոխրագույնի վրա

tDIR.bco = 32768 // DIR մուգ Կանաչ 1024

tDIR.pco = Մոխրագույն // ԳՈ GRՅՆ Մոխրագույն

tDIR.txt = "---" // ԿԱՆԳՆԵԼ

}

// ՁԱԽ **************

vACC.val = vINP.val & 0x0008

if (vACC.val! = 0) // Test RUN Right

{

tDIR.txt = "<<<" // ԱՌԱ ՁԱՅՆ

}

// ՃԻՇՏ *************

vACC.val = vINP.val & 0x0010

if (vACC.val! = 0) // Test RUN Left

{

tDIR.txt = ">>>" // DIR IGHԻՇՏ

}

// Երկուսն էլ **************

vACC.val = vINP.val & 0x0018

if (vACC.val == 24) // Test RUN երկուսն էլ

{

tDIR.txt = ">>! <<" // ԱՌԱ ԵՐԿՈՐԴ

}

// ՓՈՐՁԱՐԿՈՒՄ **************

vACC.val = vINP.val & 0x0020

եթե (vACC.val! = 0) // Փորձարկել ԹԵՍՏ

{

tTEST.pco = Սպիտակ // ՍՊԻՏԱԿ

tsw tTEST, 1 // Միացնել Touch- ի իրադարձությունները

} այլ

{

tTEST.pco = Մոխրագույն // մուգ Մոխրագույն 33808

tsw tTEST, 0 // Անջատել Touch- ի իրադարձությունները

}

// ՄԵULՈԹՅՈՆ *************

vACC.val = vINP.val & 0x0040

եթե (vACC.val == 0) // Փորձարկել ՍՊԱՍԸ

{

tFLT.pco = Մոխրագույն // ՄԵUL բացակայում է

}

եթե (vACC.val! = 0)

{

tFLT.pco = ԴԵELLԻՆ // ՄԵULԸ ներկա է

}

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

vACC.val = vINP.val & 0x0080

եթե (vACC.val == 0) // Փորձարկել EME- ն

{

tEME.pco = Մոխրագույն // EME բացակայում է

}

եթե (vACC.val! = 0)

{

tEME.pco = RED // EME ներկա

}

}

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

vACC.val = vINP.val & 0x0100

եթե (vACC.val! = 0) // Փորձարկել FERMO- ն

{

tFER.pco = ՍԵՎ // ՍԵՎ

tFER.bco = Կանաչ // Կանաչ

} այլ

{

tFER.pco = Մոխրագույն // Մոխրագույն

tFER.bco = 672 // մուգ Կանաչ

}

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

Cknowանաչում

Ես ուզում եմ իմ շնորհակալությունը հայտնել Գեդեոն Ռոսսուվին, քանի որ կարդալով նրա Հրահանգները, ես արագորեն ձեռք եմ բերել իմ նպատակների մի մասը: Շնորհակալություն պարոն Գեդեոն Ռոսսուվվ

Խորհուրդ ենք տալիս: