Мазмұны:
Бейне: Келесі әдіспен басқа тәсіл: 3 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:25
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 редакторымен 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 // күңгірт ЖАСЫЛ
}
// *******************
Мойындау
Мен Гидеон Россувқа ризашылығымды білдіргім келеді, себебі мен оның нұсқауларын оқып, өз мақсаттарымның бір бөлігін тез алдым. Рахмет мырза. Гидеон Россув
Ұсынылған:
Пернетақтаның ағылшын тілінен басқа орналасуын білу үшін Python-ды қолдану: 8 қадам
Пернетақтаның ағылшын емес орналасуын білу үшін Python-ды қолдану: Сәлеметсіз бе, мен Джулиенмін! Мен информатика мамандығының студентімін, бүгін мен сізге Python көмегімен ағылшын тілінен басқа пернетақтаның орналасуын үйретуге болатынын көрсетемін. Қазіргі уақытта интернетте көптеген тіл үйрену жүріп жатыр, және адамдар бір нәрсені біле алады
Eagle Cad көмегімен келесі үйдегі автоматтандыру (1 -бөлім - ПХД): 14 қадам
Eagle Cad көмегімен келесі үйдегі автоматтандыру (1 -бөлім - ПХД): Кіріспе: Неліктен мен оның жаңа буынын айтамын: өйткені ол дәстүрлі үй автоматтандыру құрылғыларынан әлдеқайда жақсы компоненттерді пайдаланады. Ол құрылғыларды басқара алады: Google Voice командалары Құрылғыны басқару панеліндегі сенсорлық тақтаны қолданбадан
Сізге келесі GPS/жаяу жүру үшін DIY GPS деректерді тіркеуші: 11 қадам (суреттермен)
Сізге келесі GPS/жаяу жүргіншілерге арналған DIY GPS деректерді тіркеуші: Бұл GPS мәліметтерін тіркеу құралы, оны сіз әр түрлі мақсатта қолдана аласыз, мысалы, егер сіз демалыс күндері күзгі түстерді тексеру үшін ұзақ жолға шыққыңыз келсе. немесе сізде жыл сайын күзде баратын сүйікті жол бар және сіз
Келесі DIY жобасы үшін кәсіби көрінетін алдыңғы панельдер жасаңыз: 7 қадам (суреттермен)
Келесі DIY жобасы үшін кәсіби көрінетін алдыңғы панельдер жасаңыз: DIY жобалары үшін кәсіби көрінетін алдыңғы панельдерді жасау қиын немесе қымбат емес. ТЕГІН бағдарламалық қамтамасыз ету, кеңсе керек -жарақтары мен аз уақыт ішінде сіз келесі жобаны сәндеу үшін үйде кәсіби көрінетін алдыңғы панельдерді жасай аласыз
SOCBOT - келесі буын Vibrobot: 13 қадам (суреттермен)
SOCBOT - келесі буын Vibrobot: .Алғашында пейджерлер болды. Іске қосылған пейджерлердің үстелдер мен шкафтардан би билеуі адамдардың көпшілігін шиеленістірді. Бұл өндірушінің қатысуымен болған кезде өзгерді. Көп ұзамай еврикалық әйелдер