Параллельность задач на дисплее Nextion серии "К"

Миллис в нем нет, есть:

doevents

Force immediate screen refresh and receive serial bytes to buffer
– useful inside exclusive code block for visual refresh (see 3.26 and 3.27)

usage:

doevents // allows refresh and serial to receive during code block|

О, благодарствую! На эту тему найдено: 148 Nextion "FOR" and "WHILE" loops along with the "DOEVENTS" command - YouTube Бум разбираться что тут объясняют.

Ещё порекомендую пользоваться sys0…sys2

Кстати, возле пунктов 3.25, 3.26 и 3.27 Instruction Set - Nextion стоит параметр BLOCK. Полагаю, что производитель хотел отметить то, что эти операторы именно БЛОКИРУЮЩИЕ ( и на события с PIO doevents, согласно описания, не влияет; только на визуальное отображение (обновление текста, картинки) и на подгрузку данных из сериал порта).

Не понял вашего совета. Разжуйте чуток для новичка в Nextion что вы хотите сказать этим?

Block относится к Param Count и означает, что параметром функции служит блок кода.

Обращение к системным переменным sysN происходит быстрее, чем к параметрам объекта или переменным уровня страницы.

  1. По истечении 2-х дней разбирательств с темой я понял , что “Block относится к Param Count и означает, что параметром функции служит блок кода.” и что выше я ерунду сказал. Бывает. Приношу свои извинения.
  2. “Обращение к системным переменным sysN происходит быстрее, чем к параметрам объекта или переменным уровня страницы.” - наверное так и есть. Нужно будет поставить эксперимент… Пока поверим вам на слово. :wink:

Подвожу итог своих размышлений и изысканий…
Итак, я ответил на все свои поставленные вопросы, т. к. 1) реализовал мультизадачность (она же параллельность). 2) millis() в ПО Nextion отсутствует; аналог ардуиновского millis() можно реализовать через таймеры. 3) Пример кода (готовый, мой чисто тестовый проект для демонстрации работы мультизадачности) привожу ниже.
Отдельное спасибо Алексею Шиляеву за его подсказку в комментариях к его же видео: Работа с GPIO входами на панеле Nextion. - YouTube
Считаю поставленные в теме вопросы решёнными.
Закрывать тему не буду, т. к. наверняка кто-нибудь захочет мой код изменить, улучшить, “причесать” или предложить альтернативу… Всё это лично мною приветствуется (т. к. я первый раз держу в руках Nextion).

Тестовый пример тут: https://cloud.mail.ru/public/H5yb/mJwsj16M9

  1. Из примеров видно, как мультизадачность влияет на скорость обработки разных событий. Имхо, для процессов, которые надо отображать на дисплее и на которые надо реагировать быстрее, чем минимум 0,1 секунды (а то и больше; зависит от загруженности процессами) сам по себе Nextion с GPIO (без ардуинки) не годится.
  2. Если нужна мультизадачность, то забудьте про FOR и WHILE. Пока цикл не закончится ничего происходить не будет, кроме того, что прописано в цикле. Оперативная команда doevents позволяет лишь принудительно отобразить изменения на экране, если они связаны с циклом) и получить данные по порту (но не выполнить команды в них заложенные; они будут выполнены после окончания цикла).
  3. Наткнулся на прелюбопытный факт, а именно что между 2-я видами кнопок Button и Dual-State Button нет никакого отличия, кроме визуального.
    Я предполагал, что когда говорится, что есть кнопка, а есть двухпозиционная кнопка, то между ними есть и функциональные отличия, например: а) у простой кнопки для момента её нажатия (на экране отображается вдавливанием) и момента отпускания (кнопка возвращается на экране в исходное положение) в едиторе каждому событию можно прописать свой функционал).
    Ну а у двухпозиционной кнопки логично было предположить, что есть 4 события: момент нажатия при “включении”, момент отпускания при “включении” (но кнопка остаётся отображаться на экране вдавленной), момент нажатия при “отключении” и момент отпускания при “отключении” (кнопка возвращается в исходное состояние). Так вот, у двухпозиционной кнопки 1 и 3 события - это одно и то же (просто нажатие), как и 2 и 4-е - это просто одно и то же отпускание.

По последнему пункту, неправильно.
Так как можно не только обрабатывать события нажатие/отжатие, но так же в нужные моменты узнавать состояние(нажата/отжата)

Если только визуально, то да, согласен.

Причем тут визуально ?
У тебя есть переменная состояния кнопки.
Значение этой переменной можно запросить в любой момент из любого места.

Точно. Не заметил. )) Есть такое отличие. Странно то, что есть переменная. А вот события не различаются при разных положениях… Ну ладно, не эксперт я… Видать так надо. Производитель лучше знает что он родил…

А чем событие нажатия и отпускания кнопки с фиксацией должно отличаться от того же события но с кнопкой без фиксации ?
Тут не нужно быть экспертом, тут нужно уметь рассуждать логически.

Ну тут своя логика. А у простого человека ( у меня) - я её выше описал.

  1. Вот нашёл описание всех компонентов GUI, включая таймер (почти в конце страницы): Компоненты GUI для всех устройств Дисплеи NEХTION руководство Теперь стало ясно, как работает таймер в Nextion.
  2. Ну а тут можно почитать о том, как работать с GPIO: https://nextion.tech/?s=GPIO , особенно тут: The Sunday Blog: GPIO on Nextion vs. Arduino - Part 1 (Theory) - Nextion

Всем привет. Такой вопрос: На новом форуме нет отдельной ветки по NEXTION, как это было на старом? Чтобы не плодить тут ветки на каждый вопрос…

Ну и мои 5 копеек )) заранее извиняюсь если изобрёл велосипед.
Короче, кнопки и прочие объекты, которые можно нажимать можно использовать в качестве функций. В нужном месте пишем

click [id кнопки],1 // нажали на кнопку
click [id кнопки],0 // отпустили кнопку

А в обработке нажатия той кнопки код самой “функции” или подпрограммы если по старинному))

1 лайк