Բովանդակություն:
Video: Հաջորդությամբ այլ մոտեցում. 3 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Հաջորդ սենսորային էկրանին 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 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անաչում
Ես ուզում եմ իմ շնորհակալությունը հայտնել Գեդեոն Ռոսսուվին, քանի որ կարդալով նրա Հրահանգները, ես արագորեն ձեռք եմ բերել իմ նպատակների մի մասը: Շնորհակալություն պարոն Գեդեոն Ռոսսուվվ
Խորհուրդ ենք տալիս:
Մեկ այլ հիմնականում 3D տպագրությամբ պտտվող անջատիչ ՝ 7 քայլ (նկարներով)
Մեկ այլ հիմնականում 3D տպագրությամբ պտտվող անջատիչ. Որոշ ժամանակ առաջ ես ստեղծեցի հիմնականում 3D տպագրությամբ պտտվող անջատիչ, հատուկ իմ Minivac 601 Replica նախագծի համար: Իմ նոր Think-a-Tron 2020 նախագծի համար ես զգում եմ ևս մեկ պտտվող անջատիչի կարիք: Ես փնտրում եմ SP5T վահանակի տեղադրման անջատիչ: Հավելյալ
Ավելի էժան ESP8266 WiFi վահան Arduino- ի և այլ միկրոների համար. 6 քայլ (նկարներով)
Ավելի էժան ESP8266 WiFi Shield Arduino- ի և այլ micros- ների համար. Թարմացում ՝ 29.10.2020 թեստավորված է ESP8266 գրատախտակով V2.7.4. V2.2.0 աշխատանքներ Թարմացում. 19 մայիսի, 2016 թ. Այս նախագծի 14 -ը վերանայում է գրադարանները և աշխատանքային օրենսգիրքը
Ձեր սրտի կշիռը չափելը ձեր մատի ծայրում է. Ֆոտոպոլթիսմոգրաֆիա Մոտեցում սրտի զարկերի որոշման համար. 7 քայլ
Ձեր սրտի կշիռը չափելը ձեր մատի ծայրում է. Photoplethysmography Approach to Determining Heart Rate: Photoplethysmograph (PPG) պարզ և էժան օպտիկական տեխնիկա է, որը հաճախ օգտագործվում է արյան ծավալի փոփոխությունները հյուսվածքների միկրոանոթային անկողնում հայտնաբերելու համար: Այն հիմնականում օգտագործվում է ոչ ինվազիվ ՝ մաշկի մակերեսին չափումներ կատարելու համար, սովորաբար
Windows Bluetooth համակարգի վերլուծություն - սենսորային պիտակի մոտեցում. 7 քայլ (նկարներով)
Windows Bluetooth համակարգի վերլուծություն - SensorTag մոտեցում. Ստորև ես կանեմ Windows օպերացիոն համակարգի (ՕՀ) վերլուծություն ՝ Bluetooth ցածր էներգիայի սարքերի հետ հաղորդակցության տեսանկյունից և ndash; մեր դեպքում ՝ տարբեր տեսակի SensorTags- ով ՝ Thunderboard React, Thunderboard Sense (բ
AM մոդուլատոր - օպտիկական մոտեցում. 6 քայլ (նկարներով)
AM Modulator - Օպտիկական մոտեցում. Ամիսներ առաջ ես գնել եմ այս DIY AM ռադիոընդունիչի հավաքածուն Banggood- ից: Ես այն հավաքել եմ: (Ինչպե՞ս դա անել, ես մտադիր էի նկարագրել առանձին Instructable- ում) Նույնիսկ առանց որևէ թյունինգի հնարավոր էր բռնել որոշ ռադիոկայաններ, բայց ես փորձեցի հասնել