Мазмуну:

Nextion менен башкача мамиле: 3 кадам
Nextion менен башкача мамиле: 3 кадам

Video: Nextion менен башкача мамиле: 3 кадам

Video: Nextion менен башкача мамиле: 3 кадам
Video: LCD1602 жана Arduino менен MAX6675 термопарын колдонуу 2024, Июль
Anonim
Nextion менен башкача мамиле
Nextion менен башкача мамиле

Nextion сенсордук дисплейине туташкан Arduino Nano менен болгон биринчи долбоорумда, мен Nextionго сериялык порт аркылуу билдириле турган узак командаларды жазган элем жана эгерде кокустук учурларда таптакыр көз карандысыз буйруктарды жөнөтүү керек болсо, бул сөзсүз болот.

Мен дагы башка нерселерге караганда Китепканалар менен "күрөшүүгө" көбүрөөк убакыт бөлгөнүмдү моюнга алышым керек. Ошентип, акырындык менен ITEADдын оор китепканалары жок эле толугу менен ишке кирдим.

Мен жакында Nextionго визуалдык нерселердин атрибуттарынын өзгөрүүсүн билдирүүгө шашылбаганымды түшүндүм, бирок мен аларды топтоп, бүтүндөй Nextionго жөнөткөнчө күткөндү жакшы көрөм.

Мен өзүмдү жакшыраак түшүндүрүүгө аракет кылам.

Менин долбоорумда 16 тексттик көрсөтмөлөрдөн турганда, мен алардын айрымдарын күйгүзүп же өчүргүм келет, муну күйгүзүү үчүн "bco" атрибутунун жардамы менен жасайм (мисалы) кара боздон акка өтөт (эгер кара тик бурчтук), жана тескерисинче өчүрүү.

Колдонмомдо 16 ар кандай учурда 16 сериялык портко 16 буйрукту жөнөтүүнүн эч кандай пайдасы жок деп таптым.

Мен анын ордуна Arduino кайсы сигналдар "күйүк" (БИЙИК) болушу керек, кайсынысы "өчүрүү" (ТӨМӨН) болорун 16 биттик реестрде чогултууну туура көрөм, мында ар бир бит Nextionдун 16 сигнализациясынын бирине туура келет.

Реестрдин ар бир битин жаңырткандан кийин, мен анын маанисин Nextionго өткөрүп берем, ал 16 элементке байланыштуу жамааттык маалыматты камтыйт.

Ошентип, Arduino менен Nextionдун байланышы бир топ кыскарат, анткени Nextionго сериалда жөнөтүлгөн бир эле билдирүүдө 16 билдирүүнү берүүнү талап кылган маалымат чогултулат.

Туура, бардык отчетторду жаңыртуу дайыма эле керек боло бербейт, бирок мен антпесем көбүрөөк убакыт кетет деп ишенем.

Албетте, Arduino алган бүтүн санда камтылган ар бир бит, Nextion дисплейи аны каалаган атрибут менен байланыштырууга туура келет.

Бул код Nextion дисплейинде жазылышы керек дегенди билдирет, бирок коркпош керек: эгер мен ийгиликке жетишсем …

Андан кийин эки эсе артыкчылык бар: Arduino жеңил кодго ээ болот жана Nextion менен сериялык байланышта азыраак болот.

Nextion маалыматтарды бир билдирүүдө алгандан кийин, аларды 16 билдирүүнү күткөнгө караганда алда канча тезирээк колдонот. 16 сигналды күйгүзүү же өчүрүү демейдеги режимге карата дээрлик заманбап болуп калат, анда белгисиз сандагы билдирүүлөрдүн убактысы биринчи сигнал үчүн буйруктун аткарылышы менен акыркы сигнал үчүн буйруктун ортосунда өтөт.

Nextion дисплейинде мен бул системаны классикалык түрдө жараттым, башкача айтканда, "маска" регистрин ар бир жолу айландыруу 16 биттин ар бирин карап чыгууга мүмкүндүк берет. Текшерилген бит ЖОГОРУ болгондо, дисплейде ошол бит менен байланышкан сигнал күйөт жана бит ТӨМӨН болгондо өчөт.

Бул системанын 'терс' жагы Nextion дисплейинде жазылган кодду документтештирүү Arduino кодуна караганда анча ыңгайлуу эмес. Андан тышкары, Nextion коду ар кандай объектилерге чачырап кетүү коркунучу бар. Эмне кылганыңызды дароо документтештирүү үчүн этият болуу керек.

Мен Notepad ++ кодун жазуу үчүн колдонуп, аны Nextion объектине көчүрөм, ал дээрлик 0 -беттеги tm0до гана.

Nextion тилинин синтаксисинде көптөгөн чектөөлөр бар, бирок ал аларды жеңүүгө же минималдуу күч менен айланып өтүүгө жана көйгөйлөрдү адаттан тыш көз караш менен кароого аракет кылат.

Мисал катары, мен Ардуинонун эң жөнөкөй жол менен жазган реестрди кантип жазаарын билдирем.

1 -кадам: Реестр кантип өткөрүлөт

ArduinoCode. PDF файлында мен бардык эскиздеримди көрсөтөм. (Бул жерден кодду окуу анча түшүнүксүз)

Бул жерде, мен Arduino китепканалардын жардамысыз 16 биттик каттоону 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 Nextionдо айырмаланып турган атрибуттар жөнүндө маалыматты 16 биттик регистрлерге чогултуу ыңгайлуураак болду. Болжол менен ар бир 500 mS, менин Arduino Nextionго ар бир реестрде камтылган 16 битти камтыган бир билдирүү жөнөтөт. Албетте, Nextionдо биз аткарылышы керек болгон кодго муктажбыз. Бул тапшырманы (жана кодду) бөлүштүрүү башка көптөгөн артыкчылыктарды алууга мүмкүндүк берет. Мисалы, кантип жаркыроо керек экенин ойлонуп көрүңүз! Менин мамилем менен бул оңой: Arduino реестрине бир аз коюп, Nextionго жөнөтүңүз. Nextion эгиз реестрлери Arduinoдон сейрек жаңыртылышы мүмкүн, анткени көз ирмөө жыштык байланыштан көз каранды эмес; ирмөө жыштыгы Таймер объектисинен Nextionго көз каранды жана 50 мС жакын минималдуу убакыт базасы менен иштей алат. Ошентип, менин методум менен биз Nextionдо жыштыкты салыштырмалуу жогорку ылдамдыкта (2 Гц деп ойлойбуз), менин Arduino 10 секунд сайын билдирүү жөнөтүп турса дагы, өтө мисал үчүн. Бул карама -каршы маселени сунуштай алат: Байланыш үзүлсө кантип кылуу керек? Бул талкуунун объектиси эмес, бирок мен бул маселени Watch Dog түрүндө чечтим: бири Arduino кодунун ичинде, экинчиси Nextion кодуна.

Жаркыроо Nextion коду менен жөнгө салынат, мында ар бир жарык өзүнүн тиешелүү эрежелерине баш ийет: ON/OFF же GREEN/RED же ичиндеги жазууну өзгөртүү (же башка). Мен өзүмдүн долбоорум жөнүндө башка нерселерди айта алам, бирок мен сиздин суроолорду күтүүнү туура көрөм, өтө көп сөздөрдү кошуудан мурун, мен каалагандай жакшы которуу үчүн оңой эмес.

3 -кадам: Nextion объектилерин түзөтүү

Nextion объектилерин түзөтүү
Nextion объектилерин түзөтүү

Бул жерде Nextion Editor менен tm0 объектисине жазган коддун бир бөлүгү.

Ардуинодон алынган 16 бит менен Nextion дисплейи жөн эле сигналдарды күйгүзүп же өчүрбөй турганын байкабай койбойбуз. Учурда түшүнүктү татаалдаштырбоо үчүн түшүндүрмөлөрдү калтырам.

Мен башталгычмын, андыктан чаташкан кодду бул жерден окуу үчүн Nextion code. 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 // Маска

if (vACC.val! = 0) // Test RDY

{

tRDY.pco = КӨК // КЫЗЫЛ

} башка

{

tRDY.pco = GRAY // күңүрт боз

}

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

vACC.val = vINP.val & 0x0002

if (vACC.val! = 0) // Test PWR

{

tPWR.pco = ЖАШЫЛ // жарык жашыл

tPON.txt = "ON" // ON

tPON.pco = ЖАШЫЛ // жарык Жашыл

} башка

{

33808

tPON.txt = "ӨЧҮК" // ӨЧҮРҮҮ

tPON.pco = БОЗ // караңгы боз 33808

}

// КУРГАК ***************

vACC.val = vINP.val & 0x0004

if (vACC.val! = 0) // КУРГА сыноо

{

tDRV.pco = КӨК // КӨК

tDRY.pco = КӨК // КӨК

} башка

{

tDRV.pco = БОЗ // караңгы боз 33808

tDRY.pco = БОЗ // караңгы боз 33808

}

// ЧУРКА ***************

vACC.val = vINP.val & 0x0018

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

{

tRUN.bco = RED // MARCIA RED (күйгүзүлгөн)

tRUN.pco = КАРА // КАРА боюнча

tDIR.bco = КЫЗЫЛ // КЫЗЫЛ

tDIR.pco = КАРА // КАРА боюнча

} башка

{

tRUN.bco = 32768 // MARCIA GRAY (өчүрүлгөн)

tRUN.pco = GRAY // GRAY боюнча

10D. You is a comment

tDIR.pco = GRAY // DIR GRAY

tDIR.txt = "---" // ТОКТОТ

}

// СОЛ **************

vACC.val = vINP.val & 0x0008

if (vACC.val! = 0) // Оңго чуркоо

{

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

}

// ТУУРА *************

vACC.val = vINP.val & 0x0010

if (vACC.val! = 0) // Сыноо RUN Солго

{

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

}

// БААРЫ **************

vACC.val = vINP.val & 0x0018

if (vACC.val == 24) // Test RUN both

{

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

}

// ТЕСТ **************

vACC.val = vINP.val & 0x0020

if (vACC.val! = 0) // Test TEST

{

tTEST.pco = АК // АК

tsw tTEST, 1 // Touch окуяларын иштетүү

} башка

{

tTEST.pco = БОЗ // караңгы боз 33808

tsw tTEST, 0 // Touch окуяларын өчүрүү

}

// КАТА *************

vACC.val = vINP.val & 0x0040

if (vACC.val == 0) // ТЕЗ КАТА

{

tFLT.pco = GRAY // FAULT жок

}

эгер (vACC.val! = 0)

{

tFLT.pco = САРЫ // КАТА бар

}

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

vACC.val = vINP.val & 0x0080

if (vACC.val == 0) // EME сыноо

{

tEME.pco = GRAY // EME жок

}

эгер (vACC.val! = 0)

{

tEME.pco = RED // EME бар

}

}

// ФЕРМО *************

vACC.val = vINP.val & 0x0100

if (vACC.val! = 0) // Test FERMO

{

tFER.pco = КАРА // КАРА

tFER.bco = ЖАШЫЛ // ЖАШЫЛ

} башка

{

tFER.pco = GRAY // GRAY

tFER.bco = 672 // караңгы ЖАШЫЛ

}

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

Ыраазычылык

Мен Гидеон Россувга ыраазычылык билдиргим келет, анткени анын Нускамаларын окуу мен максаттарымдын бир бөлүгүн тез эле алдым. Рахмат мырза. Gideon Rossouwv

Сунушталууда: