Кстати, возле пунктов 3.25, 3.26 и 3.27 Instruction Set - Nextion стоит параметр BLOCK. Полагаю, что производитель хотел отметить то, что эти операторы именно БЛОКИРУЮЩИЕ ( и на события с PIO doevents, согласно описания, не влияет; только на визуальное отображение (обновление текста, картинки) и на подгрузку данных из сериал порта).
По истечении 2-х дней разбирательств с темой я понял , что “Block относится к Param Count и означает, что параметром функции служит блок кода.” и что выше я ерунду сказал. Бывает. Приношу свои извинения.
“Обращение к системным переменным sysN происходит быстрее, чем к параметрам объекта или переменным уровня страницы.” - наверное так и есть. Нужно будет поставить эксперимент… Пока поверим вам на слово.
Подвожу итог своих размышлений и изысканий…
Итак, я ответил на все свои поставленные вопросы, т. к. 1) реализовал мультизадачность (она же параллельность). 2) millis() в ПО Nextion отсутствует; аналог ардуиновского millis() можно реализовать через таймеры. 3) Пример кода (готовый, мой чисто тестовый проект для демонстрации работы мультизадачности) привожу ниже.
Отдельное спасибо Алексею Шиляеву за его подсказку в комментариях к его же видео: Работа с GPIO входами на панеле Nextion. - YouTube
Считаю поставленные в теме вопросы решёнными.
Закрывать тему не буду, т. к. наверняка кто-нибудь захочет мой код изменить, улучшить, “причесать” или предложить альтернативу… Всё это лично мною приветствуется (т. к. я первый раз держу в руках Nextion).
Из примеров видно, как мультизадачность влияет на скорость обработки разных событий. Имхо, для процессов, которые надо отображать на дисплее и на которые надо реагировать быстрее, чем минимум 0,1 секунды (а то и больше; зависит от загруженности процессами) сам по себе Nextion с GPIO (без ардуинки) не годится.
Если нужна мультизадачность, то забудьте про FOR и WHILE. Пока цикл не закончится ничего происходить не будет, кроме того, что прописано в цикле. Оперативная команда doevents позволяет лишь принудительно отобразить изменения на экране, если они связаны с циклом) и получить данные по порту (но не выполнить команды в них заложенные; они будут выполнены после окончания цикла).
Наткнулся на прелюбопытный факт, а именно что между 2-я видами кнопок Button и Dual-State Button нет никакого отличия, кроме визуального.
Я предполагал, что когда говорится, что есть кнопка, а есть двухпозиционная кнопка, то между ними есть и функциональные отличия, например: а) у простой кнопки для момента её нажатия (на экране отображается вдавливанием) и момента отпускания (кнопка возвращается на экране в исходное положение) в едиторе каждому событию можно прописать свой функционал).
Ну а у двухпозиционной кнопки логично было предположить, что есть 4 события: момент нажатия при “включении”, момент отпускания при “включении” (но кнопка остаётся отображаться на экране вдавленной), момент нажатия при “отключении” и момент отпускания при “отключении” (кнопка возвращается в исходное состояние). Так вот, у двухпозиционной кнопки 1 и 3 события - это одно и то же (просто нажатие), как и 2 и 4-е - это просто одно и то же отпускание.
По последнему пункту, неправильно.
Так как можно не только обрабатывать события нажатие/отжатие, но так же в нужные моменты узнавать состояние(нажата/отжата)
Точно. Не заметил. )) Есть такое отличие. Странно то, что есть переменная. А вот события не различаются при разных положениях… Ну ладно, не эксперт я… Видать так надо. Производитель лучше знает что он родил…
А чем событие нажатия и отпускания кнопки с фиксацией должно отличаться от того же события но с кнопкой без фиксации ?
Тут не нужно быть экспертом, тут нужно уметь рассуждать логически.
Всем привет. Такой вопрос: На новом форуме нет отдельной ветки по NEXTION, как это было на старом? Чтобы не плодить тут ветки на каждый вопрос…
Ну и мои 5 копеек )) заранее извиняюсь если изобрёл велосипед.
Короче, кнопки и прочие объекты, которые можно нажимать можно использовать в качестве функций. В нужном месте пишем