Სარჩევი:
- ნაბიჯი 1: როგორ ხდება რეგისტრის გადაცემა
- ნაბიჯი 2:.. მაგრამ ადრე…
- ნაბიჯი 3: შემდგომი ობიექტების რედაქტირება
ვიდეო: განსხვავებული მიდგომა შემდეგით: 3 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:18
Arduino Nano– სთან დაკავშირებულ ჩემს პირველ პროექტში, Nextion სენსორულ ეკრანზე, მე დავწერე ბრძანებების გრძელი სერია, რომელიც უნდა მიეწოდოს Nextion– ს სერიული პორტის საშუალებით და ეს გარდაუვალია, თუ ჩვენ გვჭირდება სრულიად დამოუკიდებელი ბრძანებების გაგზავნა შემთხვევით მომენტებში.
ასევე უნდა ვაღიარო, რომ ბიბლიოთეკებთან "ბრძოლაში" უფრო მეტი დრო გავატარე, ვიდრე სხვა არაფერი. ასე რომ, მე თანდათანობით მოვედი სამუშაოდ სრულიად მძიმე ITEAD ბიბლიოთეკების გარეშე.
მალევე მივხვდი, რომ სასწრაფოდ არ მქონდა ნექსტიონისთვის ვიზუალური ობიექტების ატრიბუტებში ცვლილებების გაცნობის აუცილებლობა, მაგრამ მირჩევნია დაველოდო სანამ არ შევაგროვებ და გავგზავნი მთლიანად Nextion– ში, როდესაც მივიღებ სრულ ჯგუფს.
შევეცდები უკეთ ავხსნა საკუთარი თავი.
როდესაც ჩემს პროექტში, რომელიც შედგება 16 ტექსტური მითითებისაგან, მინდა ზოგიერთი მათგანი ჩართო ან გამორთო, ამას ვაკეთებ "bco" ატრიბუტის უპირატესობით, რომელიც ჩართვისას (მაგალითად) მუქი ნაცრისფერიდან თეთრზე გადადის (თუ შავი ოთხკუთხედი) და პირიქით გამორთვა.
ჩემს განაცხადში მე აღმოვაჩინე უსარგებლო 16 ბრძანების სერიულ პორტში 16 სხვადასხვა მომენტში გაგზავნა, ერთი 16 სიგნალის თითოეული "bco" - სთვის.
მე მირჩევნია Arduino– მ შეაგროვოს რომელი სიგნალები უნდა იყოს „ჩართული“(მაღალი) და რომელი სიგნალები უნდა იყოს „გამორთული“(დაბალი) 16 ბიტიან რეგისტრში, სადაც თითოეული ბიტი შეესაბამება Nextion– ის 16 სიგნალიდან ერთ – ერთს.
რეგისტრაციის თითოეული ნაწილის განახლების შემდეგ, მე ვაგზავნი მის მნიშვნელობას Nextion– ს, ერთ შეტყობინებას, რომელიც შეიცავს კოლექტიურ ინფორმაციას 16 ელემენტის შესახებ.
ამგვარად კომუნიკაცია არდუინოსა და ნექსტიონისგან მნიშვნელოვნად მცირდება, რადგან სერიალში Nextion– ზე გადაცემულ ერთ შეტყობინებაში გროვდება ინფორმაცია, რომელიც სხვაგვარად მოითხოვდა 16 შეტყობინების გადაცემას.
მართალია, ყოველთვის არ არის აუცილებელი ყველა ანგარიშის განახლება, მაგრამ დარწმუნებული ვარ, რომ სხვაგვარად გაკეთება უფრო მეტ დროს დაკარგავს.
ბუნებრივია, თითოეული ბიტი შეიცავს არდუინოს მიერ მიღებულ მთელ რიცხვს, Nextion ჩვენება უნდა დაუკავშიროს მას სასურველ ატრიბუტთან.
ეს ნიშნავს, რომ კოდი უნდა იყოს ჩაწერილი Nextion ეკრანზე, მაგრამ ის არ უნდა შეშინდეს: თუ მე შევძელი…
შემდეგ არის ორმაგი უპირატესობა: Arduino– ს ექნება უფრო მსუბუქი კოდი და ნაკლებად იქნება დაკავებული Nextion– თან სერიულ კომუნიკაციაში.
შემდეგი მონაცემების მიღების შემდეგ ერთი შეტყობინება, გამოიყენებს მათ ბევრად უფრო სწრაფად, ვიდრე 16 შეტყობინებას ელოდებოდა. ამრიგად, 16 სიგნალის ჩართვა ან გამორთვა თითქმის ერთდროულად იქნება ყველაზე ჩვეულებრივ რეჟიმში, რომლის დროსაც უცნობი რაოდენობის შეტყობინებების დრო გადის პირველი სიგნალის და ბოლო სიგნალის ბრძანების შესრულებას შორის.
Nextion ეკრანზე მე შევქმენი ეს სისტემა კლასიკური გზით, ანუ ყოველ ჯერზე "ნიღბის" რეგისტრაცია საშუალებას გაძლევთ შეისწავლოთ თითოეული 16 ბიტიდან თითოეული. როდესაც ბიტი შესწავლილია მაღალი, ამ ბიტთან დაკავშირებული სიგნალი ანათებს ეკრანზე და ითიშება, როდესაც ბიტი დაბალია.
ამ სისტემის "უარყოფითი" ასპექტი ის არის, რომ Nextion ეკრანზე ჩაწერილი კოდი ნაკლებად მოსახერხებელია დოკუმენტირებისთვის, ვიდრე Arduino კოდი. გარდა ამისა, Nextion კოდი საფრთხეს უქმნის გაფანტვას სხვადასხვა ობიექტზე. ზრუნვა უნდა იქნას მიღებული იმის დასადასტურებლად, თუ რას აკეთებთ დაუყოვნებლივ.
მე ვიყენებ Notepad ++ - ს კოდის დასაწერად, რომელსაც შემდეგ ვკოპირებ Nextion ობიექტში, რომელიც თითქმის ექსკლუზიურად არის 0 გვერდის tm0.
Nextion ენის სინტაქსს აქვს მრავალი შეზღუდვა, მაგრამ ის ახერხებს მათ გადალახვას ან მათ გარშემო მინიმუმ ძალისხმევას და ცდილობს შეხედოს პრობლემებს, რომლებიც ასევე უჩვეულოა.
როგორც მაგალითი, მე ვაფიქსირებ გზას, რომლითაც არდუინო წერს გადასაცემად რეგისტრს, ჩემს მიერ დაწერილი რაც შეიძლება ელემენტარულად.
ნაბიჯი 1: როგორ ხდება რეგისტრის გადაცემა
ფაილში ArduinoCode. PDF მე ვაჩვენებ ჩემს ყველა ესკიზს. (აქ კოდის წაკითხვა არც ისე ნათელია)
ქვემოთ, მე მხოლოდ მინდა ვაჩვენო, თუ როგორ უგზავნის არდუინომ 16 ბიტიანი რეგისტრაცია Nextion– ს ბიბლიოთეკების დახმარების გარეშე, მაგრამ პატივს სცემს ITEAD– ის მიერ აღწერილ სინტაქსს.
//***************************************************************************************
ბათილია NexUpd ()
//***************************************************************************************
{
SRSerial.print ("vINP.val =");
SRSerial.print (InpReg); // გადასცეს 16 შეგროვებული ბიტი Nextion ეკრანზე
SRSerial.print (InpReg); // გადასცეს 16 შეგროვებული ბიტი Nextion ეკრანზე
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– დან, რადგან დახუჭვის სიხშირე დამოუკიდებელია კომუნიკაციისგან; დახუჭვის სიხშირე დამოკიდებულია ტაიმერის ობიექტიდან Nextion– ზე და შეუძლია გაუშვას მინიმალური დროის ბაზით 50 mS– მდე. ასე რომ, ჩემი მეთოდით ჩვენ შეგვიძლია დავხუჭოთ სინათლე Nextion– ში შედარებით მაღალი სიხშირით (დავუშვათ 2 Hz), მაშინაც კი, თუ ჩემი Arduino აგზავნის შეტყობინებებს ყოველ 10 წამში, მხოლოდ უკიდურესი მაგალითისთვის. ეს შეიძლება მიუთითებდეს საპირისპირო პრობლემას: როგორ მოვიქცეთ, თუ კომუნიკაცია ვერ მოხერხდება? ეს არ არის ამ დისკუსიის ობიექტი, მაგრამ მე უკვე გადავწყვიტე ეს პრობლემა ერთგვარი Watch Dog– ით: ერთი Arduino კოდის შიგნით, მეორე Nextion კოდში.
მოციმციმე რეგულირდება Nextion კოდით, სადაც ყველა შუქი მიჰყვება მის სათანადო წესებს: ON/OFF ან GREEN/RED ან ასევე შიგნიდან დაწერილი (ან სხვა მეტი). მე შემიძლია სხვა რამ გითხრათ ჩემი პროექტის შესახებ, მაგრამ მირჩევნია დაველოდო თქვენს შეკითხვებს, სანამ დავამატებ ძალიან ბევრ სიტყვას, რომლის თარგმნაც არც ისე ადვილია ჩემთვის.
ნაბიჯი 3: შემდგომი ობიექტების რედაქტირება
აქ არის კოდის ნაწილი, რომელიც დავწერე Nextion Editor– ით tm0 ობიექტზე.
ჩვენ არ გავურბივართ იმას, რომ არდუინოსგან მიღებული 16 ბიტით, Nextion ეკრანი მხოლოდ სიგნალებს არ ჩართავს და გამორთავს. ამ მომენტში მე გამოვტოვებ ახსნა -განმარტებებს, რათა არ გავართულო გაგება.
მე დამწყები ვარ და ამიტომ ჯობია ჩამოტვირთოთ Nextion კოდი. PDF გვერდის ნაცვლად რომ წაიკითხოთ დაბნეული კოდი აქ ქვემოთ. (ვწუხვარ, რომ ეს ჩემი პირველი სასწავლო ინსტრუქციაა)
თუ გსურთ, შეგიძლიათ ჩამოტვირთოთ სრული კოდი "HMI" ამ ჩემი პროგრამისთვის. ამ კოდის ფაილის სახელია POW1225. HMI. ის შეიძლება გადავიდეს თქვენს Nextion ეკრანზე NX4024T032, მაგრამ ამის გასაგებად თქვენ უნდა შეხვიდეთ ბევრ ობიექტში და შეხედოთ კოდს რედაქტორის პატარა ფანჯრის შიგნით. ასე რომ, მე ვფიქრობ, რომ უფრო ადვილი გამოჩნდება მთავარი კოდი, ჩაწერილი ფაილში Nextion code. PDF
// პროექტი POW1225. HMI 15 მაისი 2019
// vACC (va0) აკუმულატორი
// vINP (va1) შეყვანის რეგისტრაცია xxxx xxxx xxxx xxxx
tm0.en = 1 // tm0 დაწყება
tm0.tim = 50 // tm0 დროის ბაზა 50 mS
// RDY ***************
vACC.val = vINP.val & 0x0001 // ნიღაბი
თუ (vACC.val! = 0) // ტესტი RDY
{
tRDY.pco = ცისფერი // წითელი
} სხვა
{
tRDY.pco = ნაცრისფერი // მუქი ნაცრისფერი
}
// PWR ***************
vACC.val = vINP.val & 0x0002
თუ (vACC.val! = 0) // ტესტი PWR
{
tPWR.pco = მწვანე // ღია მწვანე
tPON.txt = "ჩართული" // ჩართული
tPON.pco = მწვანე // ღია მწვანე
} სხვა
{
tPWR.pco = ნაცრისფერი // მუქი ნაცრისფერი 33808
tPON.txt = "OFF" // OFF
tPON.pco = ნაცრისფერი // მუქი ნაცრისფერი 33808
}
// მშრალი ***************
vACC.val = vINP.val & 0x0004
თუ (vACC.val! = 0) // გამოცადეთ მშრალი
{
tDRV.pco = ცისფერი // ცისფერი
tDRY.pco = ცისფერი // ცისფერი
} სხვა
{
tDRV.pco = ნაცრისფერი // მუქი ნაცრისფერი 33808
tDRY.pco = ნაცრისფერი // მუქი ნაცრისფერი 33808
}
// გაუშვით ***************
vACC.val = vINP.val & 0x0018
თუ (vACC.val! = 0) // ტესტირება RUN
{
tRUN.bco = წითელი // MARCIA RED (ჩართული)
tRUN.pco = შავი // შავზე
tDIR.bco = RED // DIR RED
tDIR.pco = შავი // შავზე
} სხვა
{
tRUN.bco = 32768 // MARCIA GRAY (გამორთულია)
tRUN.pco = ნაცრისფერი // ნაცრისფერზე
tDIR.bco = 32768 // DIR მუქი მწვანე 1024
tDIR.pco = ნაცრისფერი // მშრალი ნაცრისფერი
tDIR.txt = "---" // STOP
}
// მარცხენა **************
vACC.val = vINP.val & 0x0008
if (vACC.val! = 0) // ტესტი RUN Right
{
tDIR.txt = "<<<" // DIR მარცხენა
}
// უფლება *************
vACC.val = vINP.val & 0x0010
if (vACC.val! = 0) // ტესტი RUN მარცხნივ
{
tDIR.txt = ">>>" // DIR უფლება
}
// ორივე **************
vACC.val = vINP.val & 0x0018
თუ (vACC.val == 24) // გამოცადეთ ორივე
{
tDIR.txt = ">>! <<" // DIR BOTH
}
// ტესტი **************
vACC.val = vINP.val & 0x0020
თუ (vACC.val! = 0) // ტესტირება
{
tTEST.pco = WHITE // WHITE
tsw tTEST, 1 // Touch მოვლენების ჩართვა
} სხვა
{
tTEST.pco = ნაცრისფერი // მუქი ნაცრისფერი 33808
tsw tTEST, 0 // Touch მოვლენების გამორთვა
}
// ბრალია *************
vACC.val = vINP.val & 0x0040
თუ (vACC.val == 0) // გამოცდა გაუმართაობა
{
tFLT.pco = ნაცრისფერი // ბრალი არ არსებობს
}
თუ (vACC.val! = 0)
{
tFLT.pco = YELLOW // FAULT present
}
// 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 // მუქი მწვანე
}
// *******************
აღიარება
მინდა მადლობა გადავუხადო გედეონ როსოვვს, რადგან მისი ინსტრუქციის კითხვისას მე სწრაფად მივაღწიე ჩემი მიზნების ნაწილს. მადლობა ბატონო გედეონ როსოვვი
გირჩევთ:
განსხვავებული უსარგებლო მანქანა: 6 ნაბიჯი (სურათებით)
სხვადასხვა უსარგებლო მანქანა: ამდენი უსარგებლო მანქანით, მე შევეცადე გამეკეთებინა ის, რაც ცოტა სხვაგვარადაა. იმის ნაცვლად, რომ მექანიზმი გააჩინოს გადამრთველი, ეს მანქანა უბრალოდ ბრუნავს გადამრთველს 180 გრადუსით, ამ პროექტში მე გამოვიყენე ნემა 17 სტეპერმოტორული, რომელიც
თქვენი გულისცემის გაზომვა თქვენი თითის წვერშია: ფოტოპლეტიზმოგრაფიული მიდგომა გულისცემის დასადგენად: 7 ნაბიჯი
თქვენი გულისცემის გაზომვა არის თქვენი თითის წვერზე: ფოტოპლეტიზმოგრაფია გულისცემის განსაზღვრის მიდგომა: ფოტოპლეტიზმოგრაფი (PPG) არის მარტივი და იაფი ოპტიკური ტექნიკა, რომელიც ხშირად გამოიყენება ქსოვილის მიკროვასკულარული ფენის სისხლის მოცულობის ცვლილებების დასადგენად. იგი ძირითადად გამოიყენება არაინვაზიურად კანის ზედაპირზე გაზომვებისთვის, როგორც წესი
როგორ გადააქციოთ თქვენი დიზაინი პროფესიონალურ PCB დაფაზე - ჩემი მიდგომა: 9 ნაბიჯი
როგორ გადააქციოთ თქვენი დიზაინი პროფესიონალურ PCB დაფაზე | ჩემი მიდგომა: ამ პოსტში მე გაგიზიარებთ ჩემს მიდგომას პროფესიული PCB დაფის შესაქმნელად ძალიან ცოტა დეტალურ ნაბიჯში. მე ასევე ჩავრთე იგივე ვიდეო, შეგიძლიათ უყუროთ მას ან განაგრძოთ პოსტის კითხვა დეტალური ახსნისთვის. ასე რომ, დავიწყოთ
Windows Bluetooth სისტემის ანალიზი - სენსორული მიდგომა: 7 ნაბიჯი (სურათებით)
Windows Bluetooth სისტემის ანალიზი - SensorTag მიდგომა: შემდეგში გავაკეთებ Windows ოპერაციული სისტემის (OS) ანალიზს Bluetooth Low Energy მოწყობილობებთან კომუნიკაციის თვალსაზრისით - ჩვენს შემთხვევაში სხვადასხვა ტიპის სენსორითეგები: Thunderboard React, Thunderboard Sense (b
AM მოდულატორი - ოპტიკური მიდგომა: 6 ნაბიჯი (სურათებით)
AM მოდულატორი - ოპტიკური მიდგომა: თვის წინ შევიძინე ეს DIY AM რადიო მიმღების ნაკრები Banggood– დან. მე აწყობილი მაქვს. (როგორ გავაკეთო ამის აღნიშვნა ცალკე ინსტრუქციით) ყოველგვარი რეგულირების გარეშეც კი შესაძლებელი იყო ზოგიერთი რადიოსადგურის დაჭერა, მაგრამ მე შევეცადე მიმეღწია