Панель NEXTION
Панель NEXTION
Теперь вопрос как организовать создание этих переменных в Flprog, организовать разбор и обработку переменных в панели. Я нашёл такие операторы как duble a1,a2; cin >> a1; cin >> a2, но редактор ругается на них, то-ли не знает, то-ли неправильное написание.
-
- Рядовой
- Сообщения: 85
- Зарегистрирован: 01 дек 2015, 15:49
- Откуда: Бобруйск
- Имя: Александр
- Поблагодарили: 2 раза
Панель NEXTION
[ref]Ursinoid[/ref], Давайте по порядку.
Начнём с упаковки.
Блок сдвига - с нашего форума, из какого-то проекта...
Постарался подробно для Вас описать. Там два варианта сборки первой переменной.
Спрашивайте, если не понятно, с удовольствием отвечу.
Отправлено спустя 35 минут 16 секунд:
О, засада в панели, из описания:
7 Nextion uses integer math and does not have real or floating support.
Нет в ней чисел типа float, только long.
Тогда с десятичными значениями придётся работать как со строкой:
получать из переменной и добавлять точку перед последним символом. Несложно.
или слать изначально строкой. больше байт в посылке.
Нужно так-же понимать - посылка, нетто, идёт в "обёртке"спец символов - в итоге брутто может перевесить эффективность сборки. Для этого нужно определится, где и на каких экранах будут находится отображаемые данные. Может витиевато завернул - но надеюсь на понимание
Начнём с упаковки.
Блок сдвига - с нашего форума, из какого-то проекта...
Постарался подробно для Вас описать. Там два варианта сборки первой переменной.
Спрашивайте, если не понятно, с удовольствием отвечу.
Отправлено спустя 35 минут 16 секунд:
О, засада в панели, из описания:
7 Nextion uses integer math and does not have real or floating support.
Нет в ней чисел типа float, только long.
Тогда с десятичными значениями придётся работать как со строкой:
получать из переменной и добавлять точку перед последним символом. Несложно.
или слать изначально строкой. больше байт в посылке.
Нужно так-же понимать - посылка, нетто, идёт в "обёртке"спец символов - в итоге брутто может перевесить эффективность сборки. Для этого нужно определится, где и на каких экранах будут находится отображаемые данные. Может витиевато завернул - но надеюсь на понимание

У вас нет необходимых прав для просмотра вложений в этом сообщении.
Панель NEXTION
Александр спасибо за советы на мои ламерские вопросы. Действительно лучше отправлять всё строковыми переменными. Мне так понятнее что я делаю. Хотя данные и будут в той или иной степени задействованы на всех страницах, эти все переменные (пользуюсь подсказками других участников форума:grin-mpx, SSSergeich например), будут отправляться на одну страницу, как правило стартовую, там они будут обрабатываться, и оттуда-же разбираться по другим страницам.
-
- Рядовой
- Сообщения: 85
- Зарегистрирован: 01 дек 2015, 15:49
- Откуда: Бобруйск
- Имя: Александр
- Поблагодарили: 2 раза
Панель NEXTION
Согласен, не стоит всё брать с наскокаUrsinoid писал(а): 31 май 2019, 12:35 Александр спасибо за советы на мои ламерские вопросы. Действительно лучше отправлять всё строковыми переменными. Мне так понятнее что я делаю.

Но немного для закрепления моих разъяснений, что-б не пропали совсем даром:
[spoiler=Просто для понимания, вариант плата 2]
Код: Выделить всё
Сначала переменная 0, т.е.
0000 0000 0000 0000 0000 0000 0000 0000
^ старший бит, 31-й младший бит, 0-й ^
Записываем наши первые 11 бит, данных,"А", в младшие
0000 0000 0000 0000 0000 0ААА АААА АААА
потом сдвигаем влево, на 11 для записи следующих 11, "В"
0000 0000 00АА АААА АААА А000 0000 0000
потом битовое ИЛИ со второй переменной
0000 0000 00АА АААА АААА А000 0000 0000
0000 0000 0000 0000 0000 0BBB BBBB BBBB
= 0000 0000 00АА АААА АААА АBBB BBBB BBBB
Сдвинем ещё влево для записи следующих девяти,"С"
0AAA AAAA AAAA BBBB BBBB BBB0 0000 0000
Потом побитовое или с третьей
0AAA AAAA AAAA BBBB BBBB BBB0 0000 0000
0000 0000 0000 0000 0000 000С СССС СССС
= 0AAA AAAA AAAA BBBB BBBB BBBС СССС СССС
В битах А - значение от 1, в В - от 2, в С - от 3 переменных.
Всё.
В биты можно заносить значения кнопок, булеан переменных - выигрыш колоссальный.
Панель NEXTION
[ref]grin-mpx[/ref], подскажи по своему примеру передачи четырёх переменных одной строкой. Я уже какой день с ним разбираюсь и кое-что мне не понятно.
1 "//va0.txt=sinhro.stroka.txt" , что означает данный комент и к чему относится, в твоём примере я не нашёл переменную va0.txt
2 Как переменные va3.val==0 и va4.val=3 получают эти значения, я вставлял в твой код строки на вывод значений этих переменных на экран у меня получалось, что вначале работы таймера va3.val=4, как она обнуляется.
3 Почему при извлечении подстроки должен извлекаться 1 знак, выделяется 4 знака.
4 Зачем используется знак конца строки #, а если строку отправлять без этого знака?
5 Для чего эти манипуляции с этим знаком.
Ну как-то так
1 "//va0.txt=sinhro.stroka.txt" , что означает данный комент и к чему относится, в твоём примере я не нашёл переменную va0.txt
2 Как переменные va3.val==0 и va4.val=3 получают эти значения, я вставлял в твой код строки на вывод значений этих переменных на экран у меня получалось, что вначале работы таймера va3.val=4, как она обнуляется.
3 Почему при извлечении подстроки должен извлекаться 1 знак, выделяется 4 знака.
4 Зачем используется знак конца строки #, а если строку отправлять без этого знака?
5 Для чего эти манипуляции с этим знаком.
Ну как-то так
- grin-mpx
- Лейтенант
- Сообщения: 477
- Зарегистрирован: 17 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель NEXTION
1. Это не коммент, это просто закомментированная строка. Чтоб не работала в коде и чтоб не удалять и не прописывать потом опять.Ursinoid писал(а): 01 июн 2019, 18:15 1 "//va0.txt=sinhro.stroka.txt" , что означает данный комент и к чему относится, в твоём примере я не нашёл переменную va0.txt
2 Как переменные va3.val==0 и va4.val=3 получают эти значения, я вставлял в твой код строки на вывод значений этих переменных на экран у меня получалось, что вначале работы таймера va3.val=4, как она обнуляется.
3 Почему при извлечении подстроки должен извлекаться 1 знак, выделяется 4 знака.
Не обращайте внимания.
2. Вы не представляете на каком уровне пространственного подсознания я был, когда адаптировал этот код из какого-то примера под свои
нужды. Это при том, что я Си не знаю. Потому как я сейчас в сознании, толком Вам объяснить не могу

3. Тоже...
Символ # является маркером (разделительным символом) окончания значения преданного в любом месте строки из ардуины. То есть, собранная в ардуине строка Flprog#3.0.3# запишется в t0 как Flprog и в t1 как 3.0.3 . В принципе # можно заменить любым другим символом, но при условии что кроме как маркером он не прилетит от ардуины. Без разделительного символа (маркера)в данной конструкции не обойтись, т.к. он делает возможным передачу строки с нефиксированным количеством символов. (в данном случае число символов в каждом из 4х значений ограничено до 10. За это отвечают переменные va1,va2,общая длинна строки-переменная stroka на странице sinhro).Ursinoid писал(а): 01 июн 2019, 18:15 4 Зачем используется знак конца строки #, а если строку отправлять без этого знака?
Ниже выкладываю рабочие проекты. Тут уже реализована передача данных каждую секунду и обновление их на дисплее. Хочу заметить, что фактически для передачи 8 значений на 2х страницах задействована всего одна переменная для дисплея в ардуино. В дисплее кроме основных страниц есть страница sinhro с переменной stroka. Именно туда ардуина отправляет собранную строку и именно оттуда таймеры на страницах дисплея выдергивают эту строку для разборки. Тот, кто сталкивался с нехваткой памяти для глобальных переменных у ардуины из-за большого количества значений, кнопок и пр. знает как важно сократить по максимуму элементы на дисплее .

У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Siberian
- Лейтенант
- Сообщения: 633
- Зарегистрирован: 07 сен 2015, 11:51
- Откуда: СССР
- Имя: Александр
- Благодарил (а): 34 раза
- Поблагодарили: 5 раз
Панель NEXTION
[ref]grin-mpx[/ref], Здравствуйте!
Интересное решение передачи одной строкой на одну страницу!
Только я не совсем понял суть разделителя # в сложении строк.
Работает и без него...
Интересное решение передачи одной строкой на одну страницу!



Только я не совсем понял суть разделителя # в сложении строк.
Работает и без него...

У вас нет необходимых прав для просмотра вложений в этом сообщении.
Панель NEXTION
Я кажется понял, без разделителя #, каждую подстроку придётся делать одинаковой длинны, а с разделителем ограничивается только общей длинной строки в переменной. Класс! Я делал для пробы объединение строк, но мне пришлось все подстроки приводить к одинаковой и фиксированной длине. А это муторно потом лишние операции по приведению переданного значения к исходному, да и в Fl убираются лишние блоки, то есть получается и код меньшего размера. Где-то ранее на форуме читал чьё-то высказывание, что строковые переменные при пересылке в ардуине создают копию самих себя, и если программа занимает где-то более 60% памяти, то с учётом резервных копий, её может не хватить, отсюда и тормоза при выполнении программы в ардуине. Один форумчанин писал, что у него Мега там какая-то, и то она не справлялась с выполнением программы, так что ему в конце концов пришлось присандалить ещё одну Мегу, которая выполняла функцию только по коммуникации между основной Мегой и исполнителями.
Панель NEXTION
grin-mpx, хотя ты так и не ответил откуда в va4.val, в начале работы программы, появляется значение 3, если в конце программы все переменные обнуляются.
Зачем опять в va2 объединять извлечённое значение и разделитель, а перед раздачей в t0 опять его убирать, а если вообще убрать эти манипуляции с разделителем?
Зачем опять в va2 объединять извлечённое значение и разделитель, а перед раздачей в t0 опять его убирать, а если вообще убрать эти манипуляции с разделителем?
- grin-mpx
- Лейтенант
- Сообщения: 477
- Зарегистрирован: 17 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель NEXTION
Так и попробуйте. Может будет работать. Я уже не помню с каких соображений куда чего ставил. Может ошибся где-то.
Панель NEXTION
К сожалению не работает. Я пробовал по разному, изгалялся как мог над кодом. Без этого кода как и должно извлекается по одному символу. Таким образом надо использовать код как у тебя. Ещё вопрос по симулятору, что надо сделать, что бы симулятор работал от сигналов ком- порта, у меня получилось, что симулятор принимает сигналы из порта, но сам не реагирует на них.
- grin-mpx
- Лейтенант
- Сообщения: 477
- Зарегистрирован: 17 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель NEXTION
Это как?Ursinoid писал(а): 02 июн 2019, 21:52 у меня получилось, что симулятор принимает сигналы из порта, но сам не реагирует на них.
Панель NEXTION
Ну там внизу под окошком симулятора 3 маленьких окошка, когда я ставлю пункт ,User MCU input, появляется пункт для коннекта с портом. После коннекта с портом в самом правом окошке бегут данные из ком-порта, но сам симулятор не реагирует на него.
- grin-mpx
- Лейтенант
- Сообщения: 477
- Зарегистрирован: 17 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель NEXTION
А как он должен реагировать? Там кроме текстовой информации идет идет постоянный обмен, запрос номера страницы, опрос кнопок или еще чего-то. Над третьим маленьким окошком нажмите букву S, потом остановите симуляцию кнопкой STOP и почитайте что там прилетало на панель.
Панель NEXTION
Я думал, что панель в симуляторе должна работать по приходу команды из порта. В третьем маленьком окошке я вижу какие команды прилетают, а толку.
- grin-mpx
- Лейтенант
- Сообщения: 477
- Зарегистрирован: 17 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель NEXTION
Так а какие?Ursinoid писал(а): 03 июн 2019, 07:08 В третьем маленьком окошке я вижу какие команды прилетают, а толку.
Панель с ардуиной живут своей жизнью, иногда обращаясь к Вам, а иногда выполняют Вашу просьбу.Ursinoid писал(а): 03 июн 2019, 07:08 Я думал, что панель в симуляторе должна работать по приходу команды из порта.

Что конкретно не работает?
Панель NEXTION
Я пробовал пример, который выложил уважаемы Siberian(ох и задолбался же я в симуляторе цифири набирать!)
,так вот, в правом маленьком окошке прилетала именно та строка которая формировалась в ардуине. Я думал, что по приходу этой строки, виртуальная панель должна реагировать,т.е. выполнять программный код который записан в редакторе, но этого почему-то не происходило.

- grin-mpx
- Лейтенант
- Сообщения: 477
- Зарегистрирован: 17 июл 2017, 18:39
- Откуда: Днепр. UA
- Имя: Григорий
Панель NEXTION
В каком редакторе?Ursinoid писал(а): 03 июн 2019, 07:24 выполнять программный код который записан в редакторе, но этого почему-то не происходило.
Панель NEXTION
Я имею ввиду в таймере панели, но панель же создаётся в этом-же редакторе, в котором и запускается симулятор, и вполне естественно ожидать от него выполнение программы которая написана в нём же.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя