Съдържание:
Видео: Различен подход с Nextion: 3 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
В първия си проект с Arduino Nano, свързан към сензорния дисплей Nextion, бях написал дълга поредица от команди, които да бъдат съобщени на Nextion през серийния порт и това е неизбежно, ако трябва да изпращаме напълно независими команди в случайни моменти.
Трябва също да призная, че прекарах повече време в „битка“с библиотеките, отколкото в всичко друго. Така че постепенно започнах да работя напълно без тежките библиотеки на ITEAD.
Скоро разбрах, че нямам спешност да съобщавам на Nextion промените в атрибутите на визуалните обекти, но предпочитам да изчакам докато ги събера и да ги изпратя на Nextion като цяло, когато се сдобия с пълна група.
Ще се опитам да се обясня по -добре.
Когато в моя проект, съставен от 16 текстови индикации, искам да включа или изключвам някои от тях, го правя, като се възползвам от атрибута „bco“, който при включване преминава (например) от тъмно сиво в бяло (ако е в черен правоъгълник) и обратно, за да изключите.
В моето приложение намерих за безполезно да изпращам 16 команди към серийния порт в 16 различни момента, по една за всеки „bco“от 16 -те сигнала.
Предпочитам вместо това Arduino да събира кои сигнали трябва да са „включени“(HIGH) и кои трябва да са „изключени“(LOW) в 16-битов регистър, където всеки бит съответства на един от 16 сигнали на Nextion.
След актуализиране на всеки бит от регистъра, прехвърлям стойността му към Nextion, едно съобщение, което съдържа колективна информация относно 16 елемента.
По този начин комуникацията от Arduino и Nextion е значително намалена, тъй като в това единствено съобщение, предадено по серийния към Nextion, се събира информация, която иначе би изисквала предаването на 16 съобщения.
Вярно е, че не винаги е необходимо да се актуализират всички отчети, но съм сигурен, че ако го направите по друг начин, ще загубите повече време.
Естествено всеки бит, съдържащ се в цяло число, получено от Arduino, дисплеят Nextion ще трябва да го свърже с желания атрибут.
Това означава, че кодът трябва да бъде написан на дисплея на Nextion, но не трябва да се плаши: ако успея …
Тогава има двойно предимство: Arduino ще има по -лек код и ще бъде по -малко ангажиран в серийната комуникация с Nextion.
След като получи данните в едно съобщение, Nextion ще ги използва много по -бързо, отколкото ако изчака 16 съобщения. Следователно включването или изключването на 16 сигнала ще бъде почти едновременно по отношение на най -обичайния режим, при който времето за неизвестен брой съобщения изтича между изпълнението на командата за първата сигнализация и командата за последната сигнализация.
В дисплея Nextion създадох тази система по класическия начин, тоест завъртането на регистър „маска“всеки път ви позволява да разгледате всеки от 16 -те бита. Когато изследваният бит е ВИСОК, сигналът, свързан с този бит, светва на дисплея и се изключва, когато битът е НИСКИ.
„Отрицателният“аспект на тази система е, че кодът, написан на дисплея Nextion, е по -малко удобен за документиране от кода на Arduino. Освен това кодът на Nextion рискува да бъде разпръснат върху различни обекти. Трябва да се внимава да документирате това, което правите веднага.
Използвам Notepad ++, за да напиша кода, който след това копирам в обекта Nextion, който е почти изключително в tm0 на страница 0.
Синтаксисът на езика Nextion има множество ограничения, но той успява да ги преодолее или да ги заобиколи с минимални усилия и да се опита да види проблемите от гледна точка, които също са необичайни.
Като пример докладвам начина, по който Arduino записва регистъра за предаване, написан от мен по възможно най -елементарния начин.
Стъпка 1: Как се предава регистърът
Във файла ArduinoCode. PDF показвам цялата си скица. (Четенето на кода тук долу не е толкова ясно)
Тук долу искам само да покажа по какъв начин Arduino изпраща 16 -битовия регистър до Nextion, без помощта на библиотеките, но само като спазва синтаксиса, описан от ITEAD.
//***************************************************************************************
void 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:.. Но преди…
Разбира се, кодът започва с всички декларации и setup ().
Входовете са INPUT_PULLUP, така че входните превключватели са нормално отворени и когато са затворени, те прилагат GND към съответния вход.
(Това е първият ми Instructable и съжалявам да ви покажа моя код по този лош начин. Моля, изтеглете файла 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 секунди, само за краен пример. Това може да предложи обратния проблем: как да постъпим, ако комуникацията се провали? Това не е обект на тази дискусия, но вече реших този проблем с един вид куче за наблюдение: един в кода на Arduino, друг в кода на Nextion.
Мигането се регулира от кода на Nextion, където всяка светлина следва неговите правилни правила: ВКЛ./ИЗКЛ. Или ЗЕЛЕН/ЧЕРВЕН, или също промяна на написаното вътре (или друго). Бих могъл да разкажа някои други неща за моя проект, но предпочитам да изчакам вашите въпроси, преди да добавя твърде много думи, които не са толкова лесни за мен да превеждам добре, както бих направил.
Стъпка 3: Редактиране на Nextion обекти
Ето част от кода, който написах с Nextion Editor върху обекта tm0.
Не избягваме нашето забелязване, че с 16 -те бита, получени от Arduino, дисплеят 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) // Тествайте RDY
{
tRDY.pco = СИН // ЧЕРВЕН
} else
{
tRDY.pco = СИВ // тъмно СИВ
}
// PWR ***************
vACC.val = vINP.val & 0x0002
if (vACC.val! = 0) // Тествайте PWR
{
tPWR.pco = ЗЕЛЕН // светъл ЗЕЛЕН
tPON.txt = "ON" // ON
tPON.pco = ЗЕЛЕН // светъл ЗЕЛЕН
} else
{
tPWR.pco = СИВ // тъмно СИВ 33808
tPON.txt = "OFF" // OFF
tPON.pco = СИВ // тъмно СИВ 33808
}
// СУХ ***************
vACC.val = vINP.val & 0x0004
if (vACC.val! = 0) // Тествайте DRY
{
tDRV.pco = СИН // СИН
tDRY.pco = СИН // СИН
} else
{
tDRV.pco = СИВ // тъмно СИВ 33808
tDRY.pco = СИВ // тъмно СИВ 33808
}
// БЕГА ***************
vACC.val = vINP.val & 0x0018
if (vACC.val! = 0) // Тестване RUN
{
tRUN.bco = ЧЕРВЕН // MARCIA ЧЕРВЕН (включен)
tRUN.pco = ЧЕРНО // на ЧЕРНО
tDIR.bco = ЧЕРВЕНО // ЧЕРВЕНО ЧЕРВЕНО
tDIR.pco = ЧЕРНО // на ЧЕРНО
} else
{
tRUN.bco = 32768 // MARCIA GREY (изключено)
tRUN.pco = СИВ // на СИВ
tDIR.bco = 32768 // DIR тъмно ЗЕЛЕН 1024
tDIR.pco = СИВ // МЪРКО СИВ
tDIR.txt = "---" // СТОП
}
// НАЛЯВО **************
vACC.val = vINP.val & 0x0008
if (vACC.val! = 0) // Тестване RUN Вдясно
{
tDIR.txt = "<<<" // DIR НАЛЯВО
}
// ПРАВО *************
vACC.val = vINP.val & 0x0010
if (vACC.val! = 0) // Тестване RUN Вляво
{
tDIR.txt = ">>>" // DIR ДЯСНО
}
// И ДВЕТЕ **************
vACC.val = vINP.val & 0x0018
if (vACC.val == 24) // Тествайте RUN и двете
{
tDIR.txt = ">>! <<" // DIR И ДВЕ
}
// ТЕСТ **************
vACC.val = vINP.val & 0x0020
if (vACC.val! = 0) // Тест TEST
{
tTEST.pco = БЯЛ // БЯЛ
tsw tTEST, 1 // Активиране на събития с докосване
} else
{
tTEST.pco = СИВ // тъмно СИВ 33808
tsw tTEST, 0 // Деактивиране на събития с докосване
}
// FAULT *************
vACC.val = vINP.val & 0x0040
if (vACC.val == 0) // Проверете FAULT
{
tFLT.pco = ГРИВНО // НЕИЗПРАВНОСТ отсъства
}
ако (vACC.val! = 0)
{
tFLT.pco = ЖЪЛТ // НЕИЗПРАВНОСТ присъства
}
// EME ***************
vACC.val = vINP.val & 0x0080
if (vACC.val == 0) // Тествайте EME
{
tEME.pco = СИВ // EME отсъства
}
ако (vACC.val! = 0)
{
tEME.pco = ЧЕРВЕН // EME присъства
}
}
// ФЕРМО *************
vACC.val = vINP.val & 0x0100
if (vACC.val! = 0) // Тествайте FERMO
{
tFER.pco = ЧЕРЕН // ЧЕРЕН
tFER.bco = ЗЕЛЕН // ЗЕЛЕН
} else
{
tFER.pco = СИВ // СИВ
tFER.bco = 672 // тъмно ЗЕЛЕНО
}
// *******************
Признание
Искам да изкажа своите признания на Гидиън Росув, защото четейки неговите инструкции, бързо постигнах част от целите си. Благодаря ви г -н. Гидеон Росув
Препоръчано:
Макро обектив „Направи си сам“с AF (различен от всички други макро обективи „Направи си сам“): 4 стъпки (със снимки)
Макро обектив „Направи си сам“с АФ (различен от всички други макро обективи „Направи си сам“): Виждал съм много хора, които правят макро обективи със стандартен комплект обектив (Обикновено 18-55 мм). Повечето от тях са обектив, просто залепен върху камерата назад или отстранен преден елемент. И за двете опции има недостатъци. За монтиране на обектива
Движещият се OLOID - различен домашен любимец в различно време: 10 стъпки (със снимки)
Движещият се OLOID - различен домашен любимец в различни времена: Корона е променила живота ни: изисква от нас физическа дистанция, което от своя страна води до социално дистанциране. И така, какво би могло да бъде решение? Може би домашен любимец? Но не, Корона идва от животни. Нека се спасим от поредната Corona 2.0. Но ако имаме
Измерването на сърдечната честота е на върха на пръста ви: Фотоплетизмографски подход за определяне на сърдечната честота: 7 стъпки
Измерването на сърдечната честота е на върха на пръста ви: Фотоплетизмографски подход за определяне на сърдечната честота: Фотоплетизмографът (PPG) е проста и евтина оптична техника, която често се използва за откриване на промени в обема на кръвта в микроваскуларно легло от тъкан. Използва се предимно неинвазивно за извършване на измервания на повърхността на кожата, обикновено
Erguro-one a Maach Подход към Sonos Play 5 с IKEA Kuggis Box: 7 стъпки (със снимки)
Erguro-one a Maach Подход към Sonos Play 5 с IKEA Kuggis Box: Този проект се роди, след като за първи път чух Sonos Play 5 високоговорители, бях толкова впечатлен от качеството на звука по отношение на малкия размер на високоговорителя, ниските честоти са абсолютно впечатляващи, поради тази причина притежавам 2 Play 5 ;-) Аз h
Как да превърнете дизайна си в професионална печатна платка - Моят подход: 9 стъпки
Как да превърнете дизайна си в професионална печатна платка | Моят подход: В тази публикация ще споделя моя подход към изграждането на професионална платка за печатни платки в много малко подробни стъпки. Също така вградих видеоклип на същото, можете да го гледате или да продължите да четете публикацията за подробно обяснение. Така че нека започнем с