Парни привет, кто нибудь юзал новую версию дисплеев в линейке "intelligent" , как там дела с контрастом и цветами, или стекло вообще не меняли все на том же уровне, как емкостной сенсор себя ведет, что нибудь поправлено в лучшую сторону ?...
Returned when get command to return a number
4 byte 32-bit value in little endian order.
(0x01+0x02*256+0x03*65536+0x04*16777216)
Что такое биты, байты, регистры, флаги и HEX - я знаю. Знаю, что в 16 разрядном числе старший байт надо умножить на 256. Программировал на ассемблере для 8080, 8049, St62, ST65, MSP430. Сейчас я не знаю, как объяснить микроконтроллеру, что он уже получил ответ на запрос (на языке Си). Не знаю, как получить для обработки второй байт сообщения Nextion/
Сделал. Позаимствовал идею у западного товарища. Суть идеи - преобразовать принятый поток в массив. Тогда любой байт из потока выбирается по номеру байта в массиве. Позиции байтов и длина массива мне известны.
Прошу прощения.Я чайник.А можно подробнее расписать.Сделал все как написано.Но программу ругается на переменную t1.А так работает ровно одну минуту и тухнет
Надо создать таймер, например он называется tm1, в его настройках ставишь значение 60000(1000-1сек, соответственно 60000-это 1мин.
При наступлении таймера 60000, будет выполняться строки в таймере кода.
Для пяти минутного таймера, надо создать переменную, в неё будет записываться число, при каждом наступлении таймера записывается число +1, например таймер сработал 5 раз, соответственно в переменной будет число 5, как сделать: в коде таймера пишешь t1=t1+1, где t1 это переменная в которую записываем значение.
Для затухания создаём ещё один таймер tm2 со значением 100, в нём написать код затухания дисплея:
if (t1==5)
{
t1=0 //обнуляем значение
//Начинаем затемнять дисплей
while(dim>1
{
dim=dim-1
delay=10
}
}
Dimmer.en=1 //активируем таймер, по истечению времени он выполнит свой код
В таймере Dimmer, находим параметр en, в нем ставим 0
2. Создаем таймер Dimmer (в нем пишем код, пока яркость не будет равна 15(например) убавляем яркость на -1 с задержкой 10мс
while(dim>15)
{
dim=dim-1
delay=10
}
Dimmer.en=0
3. На странице во всех элементах, например в кнопке или рисунке написать (при нажатии на элемент, будет выполняться код, пока яркость не 100%, прибавляем +1 с задержкой в 10мс):
Что-то я, видимо, не дочитал...Передаю команды с Ардуино на Nextion. Например, изменить цвет текста. Все нормально работает, но я хочу словить это событие, чтобы производить дополнительные действия. Другими словами, мне нужно одной командой из Ардуино получать значения переменной и изменять цвет компонента. Как правильно это сделать?
Подскажите, пожалуйста, алгоритм инициализации значений объектов, до отображения страницы. Есть набор датчиков, необходимо чтобы при появлении страницы значения были актуальны.
Код для Nextionа подобный этому:
while(va0.val==0)
{
doevents
}
в Preinitialize Event страницы вешает все напрочь.
Создаёшь глобальные переменные для датчиков. С ардуины отправляются данные по каждому датчику в ранее созданные переменные. Далее в preinitilize event присваиваем переменные, которые хранят самые последние значения с ардуины, к переменной, которая находится уже на самой странице.
Датчиков, условно говоря, много. Стартует дисплей, стартует, пусть ардуина. Ардуина гонит информацию в дисплей в глобальные переменные, много. К моменту окончания preinitilize event еще не все глобальные переменные получили значения, по этому может выскочить ерундакакаято. :)
Проблема в том, что (как прочитал) есть определенные ограничения на работу с переменными в момент инициализации. По этому дальше биться об инициализацию не стал, для себя решил следующим образом:
Стартует экран, в preinitilize event прячу все "нужные" элементы, вывожу прогресс бар, запускаю таймер. В событии таймера произвожу проверку все ли принято, или нет. Если еще нет - прорисовываю прогресс бар, если да - обработал принятые данные, рассовал их по элементам, прогресс бар убрал, "нужные" элементы показал, таймер остановил. Так можно обойтись без глобальных переменных.
Датчиков, условно говоря, много. Стартует дисплей, стартует, пусть ардуина. Ардуина гонит информацию в дисплей в глобальные переменные, много. К моменту окончания preinitilize event еще не все глобальные переменные получили значения, по этому может выскочить ерундакакаято. :)
Проблема в том, что (как прочитал) есть определенные ограничения на работу с переменными в момент инициализации. По этому дальше биться об инициализацию не стал, для себя решил следующим образом:
Стартует экран, в preinitilize event прячу все "нужные" элементы, вывожу прогресс бар, запускаю таймер. В событии таймера произвожу проверку все ли принято, или нет. Если еще нет - прорисовываю прогресс бар, если да - обработал принятые данные, рассовал их по элементам, прогресс бар убрал, "нужные" элементы показал, таймер остановил. Так можно обойтись без глобальных переменных.
В Preinitilize Event пишешь следующее:
//Запрос на получение данных
print "ZaprosData"
printh 0d 0a
Т.е. при нажатии на экран, посылается на ардуину запрос, чтоб она отправила данные с датчиков.
Обработка в ардуине выглядит так:
//Переменные
char inc;// переменная для хранения сообщения полученного с nextion
String incStr;// переменная для хранения сообщения полученного с nextion
int Dlina = 0; //переменная для хранения длины сообщения
if (Serial1.available()) {// Читаем полученные данные с Nextion
inc = Serial1.read();
incStr += inc;
if (inc == 0x23) {
incStr = "";
}
if (inc == 0x0A) {
Dlina = incStr.length();
AnalyseString(incStr);
incStr = "";
inc = "";
Dlina = 0;
}
}
Далее ардуина прочитала запрос и переходит в функцию обработки полученного запроса:
void AnalyseString(String incStr) {
if (incStr.indexOf("ZaprosData") >= 0) {
// Отправка температуры и влажности с датчика Assong
SendData("page0.Dat1.txt", "\"" + Temperature1 + "\"");
SendData("page0.Dat2.txt", "\"" + Humidity1 + "\"");
//.......и так далее
}
// запросов может быть сколько угодно
}
Далее ардуина отправляет сообщение каждый раз когда надо:
// отправка на Nextion данных + данные
void SendData(String dev, String data)
{
Serial1.print(dev);
Serial1.print("=");
Serial1.print(data);
Serial1.write(0xff);
Serial1.write(0xff);
Serial1.write(0xff);
dev = "";
data = "";
}
Создаешь переменные (выбираешь тип String) для каждого датчика типа dat1.txt dat2.txt ...
Создаешь на дисплее текста t1 t2....
В параметрах каждого текста находишь параметр txt и туда пишешь например "Запрос" или на свое усмотрение, Этот текст будет появляться в случае, когда данные еще не получены, а не кракрязябра)
Далее создаешь таймер timer1, в его параметрах находишь tim и пишешь туда 100, т.е. каждую 0.1 секунду будет выполняться код в этом таймере.
В таймере пишешь:
t1.txt=dat1.txt
t2.txt=dat2.txt
Итак, мы получили данные по запросу с дисплея и вывели их на дисплей, чтоб получать обновленные данные дальше, можно создать еще один таймер timer2 и в его параметрах задать время для запроса с ардуины данных ИЛИ же в самой ардуине отправлять по заданной программе или если же данные с какого-либо датчика изменились например на 0.5.
В таймере timer2 можно тоже самое написать что и в Preinitilize Event.
подскажите пожалуйста, в Nextion есть таймеры, а как они работают, по очереди, или одновременно, т.е. если один таймер установлен на 50 мс, а второй на 1500 мс, как они будут работать совместно ?
Там процессор быстрый, но одноядерный. Так что, можно сказать, что по-очереди. А совместно нормально должны работать, если в обработчике по полдня не висеть.
The Timer component is not expected to be a high precision interrupt driven component. It is however useful for queueing reoccurring event code after elapsed .tim has expired. As code is sequentially processed, it is very easy for the time to process the requested user event code to exceed the .tim intervals and therefore not interrupt driven (to avoid such stack overflows) and not high precision.
Прошу подсказать как правильно организовать в дисплее страницу логов.
Есп32 по событию шлет в дисплей строку "время - событие", нужно отображать его в области дисплея построчно и как только область заполнена сдвигать список вверх. Хотя бы и с потерей верхней строки, а в идеале со сдвигом вверх и со слайдером. Чтобы можно было пролистывать все события.
Аналог окна лога компиляции в ардуино иде например.
Скорее всего только программно. Заносить данные в массив, а на экран выводить часть строк. Слайдером/кнопками указывать с какой строки начать показывать лог на экране.
Есть 5 дюймовый экран Nextion, ползунок h0, что надо добавить чтобы при движении ползунка изменялась яркость и показывала значение в цифрах с %. Ни как не получается и в инете ни чего не нашел. Какой код писать и куда прописывать
Есть 5 дюймовый nextion NX8048T050_011 сенсорный,DS3231, Arduino nano.Все работает.Заливаю прошивку на нано.На порт мониторе часы и дата есть.На экран не выходит.Пробывал прописывать через FLProg результат 0.Ни чего не понимаю.В программировании ноль пытаюсь найти примеры.Нет ни чего.Помогите написать программу для Nextion HMI и FLP.
Я даже не пытался хамить.Я высказал свою точку зрения.
Кто действительно хочет и может даёт вводную и как сделать.А про остальных молчу.Только показывают видимость что они в чем то соображают
Показывать видимость и я умею.А реальных предложений как это сделать от вас я не услышал.
А ямы копайте себе сами.И не надо засорять мусором
Не можете помочь сидите и смотрите форумы молча
Показывать видимость и я умею.А реальных предложений как это сделать от вас я не услышал.
А ямы копайте себе сами.И не надо засорять мусором
Не можете помочь сидите и смотрите форумы молча
Да в программировании я не умею. Зато то мне не мешат конструировать собирать и паять аппаратуру.Обидно когда просишь помощь тебя просто посылаю далеко копать яму..А для того чтобы учится нужно с чего то начинать. А выход на сайте одна болтавня.Реальной помощи нет
И с чего ты предлагаешь начинать, с тупых вопросов на форуме? - начинать надо с чтения учебников
ты на форуме уже почти год - а все еще "в программировании ноль"? - значит все это время ты ходил сюда только за готовыми ответами, сам ни в чем разобраться не пытался. Вот и результат - "форум бесполезен"
Цитата:
Реальной помощи нет
ты какой "реальной помощи" ждешь? - готовый код? - ты выбрал для этого неудачный форум. тут так "помогать" не принято.
Похоже это Mega 328PB или плата под неё. https://aliexpress.ru/item/32817729229.html
делать то что )))
делать то что )))
пайку проверьте и провода, потом напругу на выходе RX.
если все ок, то соедините rx и tx и погоняйте байты на старых и на новых платах.
п.с.
PE0/1 - то ли второй uart , то ли второй i2c для чипа 328PB.
но на фото 328P, п.э. хз работают ли они, вообще.
можно просто прозвонить, и еще чекнуть все входы, м.б. китайцы распайку перепутали.
ATMega328PB
PE0 => SDA1/ICP4/ACO/PTCXY
PE1 => SCL1/T4/PTCXY
Но никаких явных проблем со связкой 328PB<->Nextion я не заметил. Ни при соединении через второй UART, ни через SoftSerial.
Надо прозвонить РЕ0 на землю, РЕ1 на Vcc. Тогда уже будет ясно.
Парни привет, кто нибудь юзал новую версию дисплеев в линейке "intelligent" , как там дела с контрастом и цветами, или стекло вообще не меняли все на том же уровне, как емкостной сенсор себя ведет, что нибудь поправлено в лучшую сторону ?...
по ATMega328PB вопрос закрыт, оказалась она очень щепетильна к питанию!
Здравствуйте.
Вопрос: получил от Nextion на запрос "get rtc4" ответ: 71 1d 00 00 00 ff ff ff
Понимаю, что после байта 0х71 идет информация о минутах 0x1d (29 минут).
Забрать информацию о минутах не получается, совсем не силен в Си. Кто-то может помочь?
https://nextion.tech/instruction-set/#s7
4 byte 32-bit value in little endian order.
https://nextion.tech/instruction-set/#s7
4 byte 32-bit value in little endian order.
Что такое биты, байты, регистры, флаги и HEX - я знаю. Знаю, что в 16 разрядном числе старший байт надо умножить на 256. Программировал на ассемблере для 8080, 8049, St62, ST65, MSP430. Сейчас я не знаю, как объяснить микроконтроллеру, что он уже получил ответ на запрос (на языке Си). Не знаю, как получить для обработки второй байт сообщения Nextion/
Сделал. Позаимствовал идею у западного товарища. Суть идеи - преобразовать принятый поток в массив. Тогда любой байт из потока выбирается по номеру байта в массиве. Позиции байтов и длина массива мне известны.
Подскажите, пожалуйста! Как в программе NEXTION EDITOR отслеживать порт GPIO?
Подскажите, пожалуйста! Как в программе NEXTION EDITOR отслеживать порт GPIO?
как я понимаю нужно в скриптах NE прописывать команды.
например, текстовое поле или кнопку связать с gpio:
pio3=1, pio3=0, n0.val=pio3
Прошу прощения.Я чайник.А можно подробнее расписать.Сделал все как написано.Но программу ругается на переменную t1.А так работает ровно одну минуту и тухнет
Надо создать таймер, например он называется tm1, в его настройках ставишь значение 60000(1000-1сек, соответственно 60000-это 1мин.
При наступлении таймера 60000, будет выполняться строки в таймере кода.
Для пяти минутного таймера, надо создать переменную, в неё будет записываться число, при каждом наступлении таймера записывается число +1, например таймер сработал 5 раз, соответственно в переменной будет число 5, как сделать: в коде таймера пишешь t1=t1+1, где t1 это переменная в которую записываем значение.
Для затухания создаём ещё один таймер tm2 со значением 100, в нём написать код затухания дисплея:
if (t1==5)
{
t1=0 //обнуляем значение
//Начинаем затемнять дисплей
while(dim>1
{
dim=dim-1
delay=10
}
}
Всем привет!
Создал Gauge, передаю ему значение z0.val
Все крутиться - все счастливы, но при переходе на другую страницу и возврате обратно значение обнуляется,
что правильно, для текстовых полей я писал так:
cov t8.txt,hdat.val,0
соответственно надо было создать hdat.val
а вот для z0.val, создав va2.val и написав
cov z0.val,va2.val,4
не прокатывает... Как правильно сделать?
СПАСИБО!!!
Правильно - объявить компоненту глобальной.
ой! А слона то я и не заметил...
Памяти совсем нет :)
СПАСИБО! заработало!!!
Привет, чтоб погасить яркость дисплея, можно сделать таймер на 5 минут и вписать туда строки:
Тогда по наступлению таймера яркость дисплея будет плавно угасать, а после перейдет на начальную страницу(если надо)
Привет! Тоже заморочился с этой задачей, но при создании таймера, на основной странице перестают работать все кнопки в Dbug
давайте еще раз.
Создаем на странице таймер, в него пишем
3. На странице во всех элементах, например в кнопке или рисунке написать (при нажатии на элемент, будет выполняться код, пока яркость не 100%, прибавляем +1 с задержкой в 10мс):
Что-то я, видимо, не дочитал...Передаю команды с Ардуино на Nextion. Например, изменить цвет текста. Все нормально работает, но я хочу словить это событие, чтобы производить дополнительные действия. Другими словами, мне нужно одной командой из Ардуино получать значения переменной и изменять цвет компонента. Как правильно это сделать?
Здравствуйте, уважаемые.
Подскажите, пожалуйста, алгоритм инициализации значений объектов, до отображения страницы. Есть набор датчиков, необходимо чтобы при появлении страницы значения были актуальны.
Код для Nextionа подобный этому:
while(va0.val==0)
{
doevents
}
установить нужные значения, а потом переключать страницу? не?
Она стартовая. Думаю, сделать через событие таймера.
Создаёшь глобальные переменные для датчиков. С ардуины отправляются данные по каждому датчику в ранее созданные переменные. Далее в preinitilize event присваиваем переменные, которые хранят самые последние значения с ардуины, к переменной, которая находится уже на самой странице.
Датчиков, условно говоря, много. Стартует дисплей, стартует, пусть ардуина. Ардуина гонит информацию в дисплей в глобальные переменные, много. К моменту окончания preinitilize event еще не все глобальные переменные получили значения, по этому может выскочить ерундакакаято. :)
Проблема в том, что (как прочитал) есть определенные ограничения на работу с переменными в момент инициализации. По этому дальше биться об инициализацию не стал, для себя решил следующим образом:
Стартует экран, в preinitilize event прячу все "нужные" элементы, вывожу прогресс бар, запускаю таймер. В событии таймера произвожу проверку все ли принято, или нет. Если еще нет - прорисовываю прогресс бар, если да - обработал принятые данные, рассовал их по элементам, прогресс бар убрал, "нужные" элементы показал, таймер остановил. Так можно обойтись без глобальных переменных.
Датчиков, условно говоря, много. Стартует дисплей, стартует, пусть ардуина. Ардуина гонит информацию в дисплей в глобальные переменные, много. К моменту окончания preinitilize event еще не все глобальные переменные получили значения, по этому может выскочить ерундакакаято. :)
Проблема в том, что (как прочитал) есть определенные ограничения на работу с переменными в момент инициализации. По этому дальше биться об инициализацию не стал, для себя решил следующим образом:
Стартует экран, в preinitilize event прячу все "нужные" элементы, вывожу прогресс бар, запускаю таймер. В событии таймера произвожу проверку все ли принято, или нет. Если еще нет - прорисовываю прогресс бар, если да - обработал принятые данные, рассовал их по элементам, прогресс бар убрал, "нужные" элементы показал, таймер остановил. Так можно обойтись без глобальных переменных.
В Preinitilize Event пишешь следующее:
Т.е. при нажатии на экран, посылается на ардуину запрос, чтоб она отправила данные с датчиков.
Обработка в ардуине выглядит так:
Далее ардуина прочитала запрос и переходит в функцию обработки полученного запроса:
Далее ардуина отправляет сообщение каждый раз когда надо:
Создаешь переменные (выбираешь тип String) для каждого датчика типа dat1.txt dat2.txt ...
Создаешь на дисплее текста t1 t2....
В параметрах каждого текста находишь параметр txt и туда пишешь например "Запрос" или на свое усмотрение, Этот текст будет появляться в случае, когда данные еще не получены, а не кракрязябра)
Далее создаешь таймер timer1, в его параметрах находишь tim и пишешь туда 100, т.е. каждую 0.1 секунду будет выполняться код в этом таймере.
В таймере пишешь:
Итак, мы получили данные по запросу с дисплея и вывели их на дисплей, чтоб получать обновленные данные дальше, можно создать еще один таймер timer2 и в его параметрах задать время для запроса с ардуины данных ИЛИ же в самой ардуине отправлять по заданной программе или если же данные с какого-либо датчика изменились например на 0.5.
В таймере timer2 можно тоже самое написать что и в Preinitilize Event.
как то так....
Спасибо за ответ. Для себя я реализовал, как описал выше. Без глобальных переменных и с одним таймером.
Но кому-нибудь может пригодится! :)
подскажите пожалуйста, в Nextion есть таймеры, а как они работают, по очереди, или одновременно, т.е. если один таймер установлен на 50 мс, а второй на 1500 мс, как они будут работать совместно ?
Там процессор быстрый, но одноядерный. Так что, можно сказать, что по-очереди. А совместно нормально должны работать, если в обработчике по полдня не висеть.
The Timer component is not expected to be a high precision interrupt driven component. It is however useful for queueing reoccurring event code after elapsed .tim has expired. As code is sequentially processed, it is very easy for the time to process the requested user event code to exceed the .tim intervals and therefore not interrupt driven (to avoid such stack overflows) and not high precision.
понятно, спасибо за столь подробное описание!
Здравствуйте!
Прошу подсказать как правильно организовать в дисплее страницу логов.
Есп32 по событию шлет в дисплей строку "время - событие", нужно отображать его в области дисплея построчно и как только область заполнена сдвигать список вверх. Хотя бы и с потерей верхней строки, а в идеале со сдвигом вверх и со слайдером. Чтобы можно было пролистывать все события.
Аналог окна лога компиляции в ардуино иде например.
Скорее всего только программно. Заносить данные в массив, а на экран выводить часть строк. Слайдером/кнопками указывать с какой строки начать показывать лог на экране.
Народ нужна помощь.
Есть 5 дюймовый экран Nextion, ползунок h0, что надо добавить чтобы при движении ползунка изменялась яркость и показывала значение в цифрах с %. Ни как не получается и в инете ни чего не нашел. Какой код писать и куда прописывать
Я над слайдером (ползунком) добавлял текстовое поле, допустим t0.
В событиях слайдера Touch Release Event и Touch Move прописал:
Это работает, если значение слайдера maxval=100 а minval=0. При других значениях требуется предварительное вычисление процентов в блоке else.
За яркость экрана отвечает системная переменная Nextion'а dim (задается в процентах от 0 до 100). https://nextion.tech/instruction-set/#s6
P.S. Можно без блока if - else (просто дернул из проекта, в блоке были вычисления).
Есть вопрос
Кому прописать?
Народ помогите
Есть 5 дюймовый nextion NX8048T050_011 сенсорный,DS3231, Arduino nano.Все работает.Заливаю прошивку на нано.На порт мониторе часы и дата есть.На экран не выходит.Пробывал прописывать через FLProg результат 0.Ни чего не понимаю.В программировании ноль пытаюсь найти примеры.Нет ни чего.Помогите написать программу для Nextion HMI и FLP.
Как можно помочь написать программу тому, кто в программировании ничего не понимает?
Вы уж определитесь, чего именно Вы хотите:
- чтобы Вам помогли чему-то научиться,
- рабочую программу.
Кто действительно соображает в программировании ему труда не составит помочь написать программу.А остальные только чешут языками и толку от них 0
Кто действительно соображает в программировании ему труда не составит помочь написать программу.
а нафига "тому, кто соображает" - помогать писать программу неграмотному лентяю. который к тому же хамит на форуме?
Кто действительно соображает в программировании ему труда не составит помочь написать программу.А остальные только чешут языками и толку от них 0
Помочь копать яму можно только тому, кто сам копает яму.
Если же человек сидит и ждет, пока ему кто-нибудь не выкопает, то единственный вид помощи - сесть рядом и помочь ему ждать.
Я даже не пытался хамить.Я высказал свою точку зрения.
Кто действительно хочет и может даёт вводную и как сделать.А про остальных молчу.Только показывают видимость что они в чем то соображают
Показывать видимость и я умею.А реальных предложений как это сделать от вас я не услышал.
А ямы копайте себе сами.И не надо засорять мусором
Не можете помочь сидите и смотрите форумы молча
Показывать видимость и я умею.А реальных предложений как это сделать от вас я не услышал.
А ямы копайте себе сами.И не надо засорять мусором
Не можете помочь сидите и смотрите форумы молча
не умеешь. "В программировании - ноль"
Да в программировании я не умею. Зато то мне не мешат конструировать собирать и паять аппаратуру.Обидно когда просишь помощь тебя просто посылаю далеко копать яму..А для того чтобы учится нужно с чего то начинать. А выход на сайте одна болтавня.Реальной помощи нет
И с чего ты предлагаешь начинать, с тупых вопросов на форуме? - начинать надо с чтения учебников
ты на форуме уже почти год - а все еще "в программировании ноль"? - значит все это время ты ходил сюда только за готовыми ответами, сам ни в чем разобраться не пытался. Вот и результат - "форум бесполезен"
ты какой "реальной помощи" ждешь? - готовый код? - ты выбрал для этого неудачный форум. тут так "помогать" не принято.