Мазмұны:

Келесі әдіспен басқа тәсіл: 3 қадам
Келесі әдіспен басқа тәсіл: 3 қадам

Бейне: Келесі әдіспен басқа тәсіл: 3 қадам

Бейне: Келесі әдіспен басқа тәсіл: 3 қадам
Бейне: Басқа тышты деген осы 😡 2024, Шілде
Anonim
Келесі әдіспен басқа тәсіл
Келесі әдіспен басқа тәсіл

Nextion сенсорлық дисплейіне қосылған Arduino Nano -мен алғашқы жобада мен Nextion -ге сериялық порт арқылы хабарлауға болатын ұзақ командалар сериясын жаздым, егер кездейсоқ сәтте мүлдем тәуелсіз командаларды жіберу қажет болса, бұл сөзсіз.

Мен кітапханалармен «күресуге» бәрінен де көп уақыт жұмсағанымды мойындауым керек. Осылайша мен біртіндеп ITEAD -тың ауыр кітапханаларынсыз жұмысқа келдім.

Мен көп ұзамай көрнекі объектілердің атрибуттарындағы өзгерістерді Nextion -мен байланыстыруға асықпайтынымды түсіндім, бірақ мен оларды толық жинап алғанға дейін күтіп тұруды жөн көрдім.

Мен өзімді жақсы түсіндіруге тырысамын.

16 мәтіндік көрсеткіштен тұратын менің жобамда мен олардың кейбірін қосқым немесе өшіргім келеді, мен мұны қосу үшін «bco» атрибуты арқылы жасаймын (мысалы) қою сұрдан ақ түске ауысады (егер қара тіктөртбұрыш), және керісінше өшіру.

Менің қосымшамда сериялық портқа 16 түрлі сәтте 16 команданы жіберудің пайдасы жоқ деп таптым, олардың әрқайсысы 16 сигналдың «bco» үшін.

Мен оның орнына Arduino 16 биттік регистрде қандай сигналдар «қосулы» (ЖОҒАРЫ) болуы керек және қайсысы «өшірулі» (ТӨМЕН) болуы керек екенін жинауды жөн көремін, мұнда әрбір бит Nextion сигналының 16 сигналының біріне сәйкес келеді.

Регистрдің әрбір битін жаңартқаннан кейін мен оның мәнін Nextion -ға жіберемін, онда 16 элементке қатысты жиынтық ақпарат бар.

Осылайша, Arduino мен Nextion арасындағы байланыс едәуір қысқарады, себебі Nextion сериясында берілетін бір хабарламада басқаша түрде 16 хабарламаны жіберуді қажет ететін ақпарат жиналады.

Рас, барлық есептерді үнемі жаңартып отыру қажет емес, бірақ мен басқаша уақытты жоғалтатыныма сенімдімін.

Әрине, Arduino алған бүтін санның әрбір битінде Nextion дисплейі оны қажетті атрибутпен байланыстыруға мәжбүр болады.

Бұл кодты Nextion дисплейінде жазу керек дегенді білдіреді, бірақ қорқудың қажеті жоқ: егер мен сәтті болсам …

Содан кейін екі есе артықшылық бар: Arduino жеңілірек кодқа ие болады және Nextion -пен сериялық байланыспен аз айналысады.

Nextion деректерді бір хабарламада алғаннан кейін оларды 16 хабарламаны күткеннен әлдеқайда жылдам пайдаланады. 16 сигналды қосу немесе өшіру әдеттегі режимге сәйкес келеді, онда белгісіз санды алу уақыты бірінші сигнал беру үшін және соңғы сигнал үшін пәрменнің орындалуы арасында өтеді.

Nextion дисплейінде мен бұл жүйені классикалық түрде жасадым, яғни «маска» регистрін әр айналдыру 16 биттің әрқайсысын тексеруге мүмкіндік береді. Тексерілген бит жоғары болса, дисплейде сол битке байланысты сигнал жанып тұрады және бит төмен болғанда өшеді.

Бұл жүйенің 'теріс' жағы мынада: Nextion дисплейінде жазылған код Arduino кодына қарағанда құжатталуға ыңғайлы емес. Сонымен қатар, Nextion коды әр түрлі объектілерге шашырау қаупін тудырады. Сіз не істеп жатқаныңызды бірден құжаттау үшін мұқият болуыңыз керек.

Мен Notepad ++ кодын кодты жазу үшін қолданамын, содан кейін мен тек 0 бетінің tm0 -де орналасқан Nextion нысанына көшіремін.

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

Мысал ретінде мен Arduino -ның жіберілетін тізілімді қалай қарапайым түрде жазғанын айтамын.

1 -қадам: Реестр қалай беріледі

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

Мен төменде Arduino -ның 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 -ның Nextion -да өзгеретін атрибуттар туралы ақпаратты 16 биттік регистрге жинауын ыңғайлы деп таптым. Шамамен әрбір 500 мС, менің 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 редакторымен tm0 объектісінде жазған кодтың бір бөлігі.

Ардуинодан алынған 16 битпен Nextion дисплейі сигналдарды қосады және өшірмейді. Түсінуді қиындатпау үшін мен түсініктемелерді жібермеймін.

Мен жаңадан бастаушымын, сондықтан шатастырылған кодты төменнен оқу үшін Nextion code. PDF бетін жүктеген дұрыс. (Кешіріңіз, бұл менің бірінші нұсқауым)

Егер қаласаңыз, менің қосымшам үшін «HMI» толық кодын жүктей аласыз. Бұл кодтың файл атауы - POW1225. HMI. Ол NX4024T032 Nextion дисплейіне енуі мүмкін, бірақ оны түсіну үшін көптеген объектілерге жүзіп, редактордың кіші терезесіндегі кодты қарау керек. Nextion code. PDF файлында жазылған негізгі кодты қарау оңайырақ болады деп ойлаймын

// POW1225 жобасы. HMI 15 мамыр 2019 ж

// vACC (va0) аккумулятор

// vINP (va1) енгізу регистрі xxxx xxxx xxxx xxxx

tm0.kz = 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

if (vACC.val! = 0) // PWR сынағы

{

tPWR.pco = ЖАСЫЛ // ақшыл ЖАСЫЛ

tPON.txt = «ON» // ON

tPON.pco = ЖАСЫЛ // ақшыл ЖАСЫЛ

} басқа

{

tPWR.pco = СҰРЫ // қараңғы сұр 33808

tPON.txt = «ӨШІРУ» // ӨШІРУ

tPON.pco = СҰР // қараңғы СҰР 33808

}

// құрғақ ***************

vACC.val = vINP.val & 0x0004

if (vACC.val! = 0) // DRY сынағы

{

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

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

} басқа

{

tDRV.pco = СҰР // қараңғы СҰР 33808

tDRY.pco = СҰР // қараңғы СҰР 33808

}

// ЖҮГІР ***************

vACC.val = vINP.val & 0x0018

if (vACC.val! = 0) // Тексеру РУН

{

tRUN.bco = ҚЫЗЫЛ // MARCIA RED (қосулы)

tRUN.pco = ҚАРА // ҚАРАДА

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

tDIR.pco = ҚАРА // қарада

} басқа

{

tRUN.bco = 32768 // MARCIA GRAY (өшірулі)

tRUN.pco = GRAY // сұрда

tDIR.bco = 32768 // DIR қараңғы Жасыл 1024

tDIR.pco = СҰР // 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) // Тексеру солға

{

tDIR.txt = «>>>» // DIR RIGHT

}

// ЕКІСІ **************

vACC.val = vINP.val & 0x0018

if (vACC.val == 24) // ЕКІСІН ЖҮРГІЗУ

{

tDIR.txt = «>>! <<» // DIR BOTH

}

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

vACC.val = vINP.val & 0x0020

if (vACC.val! = 0) // ТЕСТТІ СЫНАУ

{

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 = ҚЫЗЫЛ // EME бар

}

}

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

vACC.val = vINP.val & 0x0100

if (vACC.val! = 0) // FERMO сынағы

{

tFER.pco = ҚАРА // ҚАРА

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

} басқа

{

tFER.pco = СҰР // СҰР

tFER.bco = 672 // күңгірт ЖАСЫЛ

}

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

Мойындау

Мен Гидеон Россувқа ризашылығымды білдіргім келеді, себебі мен оның нұсқауларын оқып, өз мақсаттарымның бір бөлігін тез алдым. Рахмет мырза. Гидеон Россув

Ұсынылған: