Панель Nextion

Использование дисплеев и обсуждение пользовательских блоков к ним
Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Панель Nextion

#161

Сообщение Max » 06.03.2017{, 22:13}

Slava-7eVeN писал(а):Попробовал сегодня на другом компьютере, результат тот же((( Какие еще мысли?
У меня сделано так:


Настройка в блоке:

Не смотрите на на вход knob, это просто дубль кнопки механической... Можно вообще сразу записывать в выход rel без переменных...

А это на стороне Nextion:



Программу обязательно запускаете от имени администратора.
Вложения
0666728.jpg
1886904.jpg
9285378.jpg
Последний раз редактировалось Max 06.03.2017{, 22:18}, всего редактировалось 1 раз.

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

Панель Nextion

#162

Сообщение Олег » 06.03.2017{, 23:30}

Олег писал(а):cov Temp1P1.txt,Disp.val,3if(Disp.val>Max.val)
{
  Temp1P1.txt="Недопустимое значение"}

cov Temp1P1.txt,Disp.val,3
if(Disp.val<Min.val)
{
  Temp1P1.txt="Недопустимое значение"}
Надо писать  для поля Show, а код для Min и Max значения для того поля в котором введенное значение будет отображаться.

Slava-7eVeN
Рядовой
Сообщения: 12
Зарегистрирован: 05.03.2017{, 00:26}
Репутация: 0
Откуда: Москва

Панель Nextion

#163

Сообщение Slava-7eVeN » 07.03.2017{, 12:38}

Max писал(а):У меня сделано так:
Сделал все как Вы описали и все равно получаю вот такие ошибки(((

C:\Users\seven\AppData\Local\Temp\flprog\pr3\pr3.ino: In function '_nextionLissenStruct nextionListen(byte)':

C:\Users\seven\AppData\Local\Temp\flprog\pr3\pr3.ino:91:27: warning: left shift count >= width of type

temp.number = (cmd[4] << 24) | (cmd[3] << 16) | (cmd[2] << 8) | (cmd[1]);

^

C:\Users\seven\AppData\Local\Temp\flprog\pr3\pr3.ino:91:44: warning: left shift count >= width of type

temp.number = (cmd[4] << 24) | (cmd[3] << 16) | (cmd[2] << 8) | (cmd[1]);

На всякий случай выкладываю скетч, который и выбивает ошибки указанные выше



Код: Выделить всё

struct _nextionLissenStruct{
char code;
String result;
long number;
};
_nextionLissenStruct _nextionTempLissen;
bool _nextionGetValue1_outputValue;
long _nextionGetValue1_StartTime;
bool _nextionGetValue1_isNU = 0;
void setup()
{
Serial.begin(9600);
pinMode(4, OUTPUT);

nextionSendCommand("", 0);
nextionSendCommand("page 0", 0);
_nextionGetValue1_StartTime = millis();
}
void loop()
{String _tempVariable_String;

//Плата:1
if(_isTimer(_nextionGetValue1_StartTime, 5000)){ _nextionGetValue1_StartTime = millis(); _nextionGetValue1_isNU = 1; }
if(_nextionGetValue1_isNU){_tempVariable_String = "get page0.bt0.val";
_nextionTempLissen = nextionSendCommand(_tempVariable_String.c_str(), 0);
if(_nextionTempLissen.code = 'q') {_nextionGetValue1_outputValue = _nextionTempLissen.number;};
_nextionGetValue1_isNU = 0;}
digitalWrite(4, _nextionGetValue1_outputValue);

}
bool _isTimer(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }
struct _nextionLissenStruct nextionSendCommand(const char* cmd, byte port )
{
while (Serial.available()){Serial.read(); }
Serial.print(cmd);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);
return nextionListen(port);
}
struct _nextionLissenStruct nextionListen( byte port )
{
byte _bite;
byte _end = 0xff;
byte cmd[100];
int index = 0;
_nextionLissenStruct temp;
temp.result = "";
temp.code = 'z';
temp.number = 0;
int countEnd = 0;
delay(50);
long startTime = millis();
while(! (countEnd==3)) {
while(Serial.available()>0){
if(Serial.available()>0){
_bite = Serial.read();
cmd [index]= _bite;
index++;
if(_bite == _end){countEnd++;}
if(countEnd == 3){break;}
}}
if(_isTimer(startTime, 100)) {return temp;}
}
  switch (cmd[0]) {
  case 0x66:
  temp.code = 'f';
  temp.result = String(cmd[1], DEC);
   return temp;
   break;
  case 0x70:
      temp.code = 'p';
   for (int i = 1; i < index - 3; i++) {
   temp.result += char(cmd[i]);}
   return temp;
   break;
case 0x71:
      temp.code = 'q';
   temp.number = (cmd[4] << 24) | (cmd[3] << 16) | (cmd[2] << 8) | (cmd[1]);
   return temp;
   break;
  default:
   return temp;
   break;
  }   
  return temp;
}
int nextionAskPageNamper(byte port)
{
int result;
_nextionLissenStruct temp;
temp =  nextionSendCommand("sendme",port);
  if((temp.code == 'f')&&(temp.result != "")){result = temp.result.toInt();} else {result = -1;}
return result;
}
Последний раз редактировалось Slava-7eVeN 07.03.2017{, 12:55}, всего редактировалось 1 раз.

Pixima
Рядовой
Сообщения: 68
Зарегистрирован: 30.01.2016{, 11:51}
Репутация: 0

Панель Nextion

#164

Сообщение Pixima » 07.03.2017{, 13:29}

Slava-7eVeN, всё же ещё раз предлагаю, выложите оба проекта: для флпрог и панели. Попробую прошить Вашими проектами свое железо. Когда-то, мне это очень помогло!
Спасибо Олег,  ещё раз.

Slava-7eVeN
Рядовой
Сообщения: 12
Зарегистрирован: 05.03.2017{, 00:26}
Репутация: 0
Откуда: Москва

Панель Nextion

#165

Сообщение Slava-7eVeN » 07.03.2017{, 13:44}

Pixima писал(а):Slava-7eVeN, всё же ещё раз предлагаю, выложите оба проекта: для флпрог и панели. Попробую прошить Вашими проектами свое железо. Когда-то, мне это очень помогло!Спасибо Олег,  ещё раз.

Проблема решилась))) наконец то) Поставил версию portable 2.2 и ошибки прекратились и все работает прекрасно) спасибо всем за помощь.

P.S. Еще один маленький вопрос: у меня к примеру две страницы и на обоих есть кнопка Dual-state button, вот к примеру я на первой странице ее включил и если перехожу на вторую страницу кнопка на первой остается включенной, а хотелось бы что бы она отключалась. Спасибо

igee
Рядовой
Сообщения: 57
Зарегистрирован: 08.06.2016{, 09:15}
Репутация: 0
Откуда: Санкт-Петербург

Панель Nextion

#166

Сообщение igee » 07.03.2017{, 15:02}

Кнопка остается включенной, так как ее свойство vscope в редакторе дисплея у вас global. Измените на local и состояние при переходах будет сбрасываться.

Добавлено (07.03.2017, 15:02)
---------------------------------------------
Вопрос автору программы. В этой ветке ранее упоминалось о переделке блоков с работы дисплеем. Я тут занимаюсь одним долгостроем, который как раз на Nextion, и сперва я делал проект на блоках предложенных FLProg, но позже вынужден был от них отказаться, т.к. во первых хромала с скорость работы программы, а во вторых почему то они использовали очень много памяти. При попытке выяснить как они работают я понял, что вы написали свою библиотеку для работы с дисплеем. Каким путем вы идете сейчас? Переделываете свою  библиотеку или внедряете ту, что предлагают сами некстионовцы? Мне пришлось переделывать проект под их библиотеку и должен сказать, что она работает хорошо. Отклики моментальные, памяти расходуется меньше.
Последний раз редактировалось igee 07.03.2017{, 15:02}, всего редактировалось 1 раз.

Slava-7eVeN
Рядовой
Сообщения: 12
Зарегистрирован: 05.03.2017{, 00:26}
Репутация: 0
Откуда: Москва

Панель Nextion

#167

Сообщение Slava-7eVeN » 07.03.2017{, 16:37}

igee писал(а):Кнопка остается включенной, так как ее свойство vscope в редакторе дисплея у вас global. Измените на local и состояние при переходах будет сбрасываться.

Спасибо)

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Панель Nextion

#168

Сообщение Max » 07.03.2017{, 21:02}

igee писал(а):Вопрос автору программы. В этой ветке ранее упоминалось о переделке блоков с работы дисплеем. Я тут занимаюсь одним долгостроем, который как раз на Nextion, и сперва я делал проект на блоках предложенных FLProg, но позже вынужден был от них отказаться, т.к. во первых хромала с скорость работы программы, а во вторых почему то они использовали очень много памяти. При попытке выяснить как они работают я понял, что вы написали свою библиотеку для работы с дисплеем. Каким путем вы идете сейчас? Переделываете свою библиотеку или внедряете ту, что предлагают сами некстионовцы? Мне пришлось переделывать проект под их библиотеку и должен сказать, что она работает хорошо. Отклики моментальные, памяти расходуется меньше.
Да, я тоже заметил, что генерируемый блоками код тяжеловесный. Несколько блоков и память уже почти на 1/3 заполнилась. Еще думаю, что часть причины в новом IDE, т.к. после перехода на новый IDE простые проекты неоправданно потяжелели...

Добавлено (07.03.2017, 21:02)
---------------------------------------------
Олег писал(а):page6.Max.val=110
page6.Min.val=0
page 6
Значит вышеуказанное надо писать для переменной куда вписывается значение набранное на виртуальной клавиатуре?

А вот это условие:
cov Temp1P1.txt,Disp.val,3
if(Disp.val>Max.val)
{
Temp1P1.txt="Недопустимое значение"}

cov Temp1P1.txt,Disp.val,3
if(Disp.val<Min.val)
{
Temp1P1.txt="Недопустимое значение"}

надо вписывать в переменную show в виртуальной клавиатуры?

Однако, посмотрел что похоже не переменная show принимает данные, а переменная input, которая не видима (одна из переменных в нижней строке).

К тому же эта клавиатура используется для всех переменных, где надо набирать значения.

Код клавиатуры (страница клавиатуры раздел "Preinitialize Event") по умолчанию :

if(p[loadpageid.val].b[loadcmpid.val].type==54)
{
cov p[loadpageid.val].b[loadcmpid.val].val,input.txt,0
inputlenth.val=input.txt_maxl
}else
{
input.txt=p[loadpageid.val].b[loadcmpid.val].txt
inputlenth.val=p[loadpageid.val].b[loadcmpid.val].txt_maxl
if(p[loadpageid.val].b[loadcmpid.val].type==116)
{
show.pw=p[loadpageid.val].b[loadcmpid.val].pw
}
}
show.txt=input.txt
Последний раз редактировалось Max 07.03.2017{, 22:21}, всего редактировалось 1 раз.

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

Панель Nextion

#169

Сообщение Олег » 08.03.2017{, 01:00}

Эх Максим, заставил ты меня вспомнить то что давно забыл  . Сделал рабочий пример в 38 версии, новую пока ставить не хочу. Не знаю изменился синтаксис или нет.
Вложения
test_maxim.hmi
(59.65 КБ) 63 скачивания

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Панель Nextion

#170

Сообщение Max » 08.03.2017{, 09:10}

Цитата Олег () 200?'200px':''+(this.scrollHeight+5)+'px');">Эх Максим, заставил ты меня вспомнить то что давно забыл smile . Сделал рабочий пример в 38 версии, новую пока ставить не хочу. Не знаю изменился синтаксис или нет.
Олег, спасибо за труды! Ну понятно, что Вы собрали собственную клавиатуру, а в новой версии дается уже готовая клавиатура. И вот хотел с ней именно разобраться.

В принципе работает, только вот что моя версия программы пишет на этом примере:


Но отрабатывает в эмуляции. Если с готовой клавой не разберусь, то придется свою собирать... Там правда переменных куча разных...

И еще, при нажатии на цифровые кнопки при превышении разрядности, после сообщения "Недопустимое значение" выдает не читаемые символы:

Вложения
8722381.jpg
8660647.jpg
Последний раз редактировалось Max 08.03.2017{, 09:11}, всего редактировалось 1 раз.

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

Панель Nextion

#171

Сообщение Олег » 08.03.2017{, 10:33}

Max писал(а):В принципе работает, только вот что моя версия программы пишет на этом примере:
 Пишет что сохранит бэкап файла, а сам файл переведет в новый формат, если в симуляции работает, значит перевел без проблем. Интересно, а что в коде после перевода в новый формат?
Max писал(а):И еще, при нажатии на цифровые кнопки при превышении разрядности, после сообщения "Недопустимое значение" выдает не читаемые символы:
Вспомнилось, как на первых IBM-ках на какой-то игре если слишком быстро начинал стучать по клаве то выплывало сообщение "Не суетись под клиентом"  .
Переделал, я думаю вариант с кратковпеменным появлением надписи и очищением поля будут изящнее.
Вложения
3162490.hmi
(59.75 КБ) 63 скачивания
Последний раз редактировалось Олег 08.03.2017{, 18:21}, всего редактировалось 1 раз.

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Панель Nextion

#172

Сообщение Max » 08.03.2017{, 14:13}

Олег писал(а):Пишет что сохранит бэкап файла, а сам файл переведет в новый формат,
Это я то понял.
Олег писал(а):если в симуляции работает, значит перевел без проблем. Интересно, а что в коде после перевода в новый формат?
Как уже писал, все работает за исключением этих не читаемых символов. Что интересно, я пытался в своей версии пробовать писать по русски, но в результате все слова конвертировались в знаки вопроса, типа такого ????? ??????. А вот у вас в примере, все нормально... Ваш пример возьму в работу в плане шрифтов.

Буду разбираться с универсальной клавиатурой. Ваш пример так же на вооружении.

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

Панель Nextion

#173

Сообщение Олег » 08.03.2017{, 14:43}

В Nextion очень мало шрифтов с кирилицей, Courier New Cyr, Learn Cyr, может и все. Но шрифты полный отстой, я во все кнопки и сообщения по событию изображения вставлял.

igee
Рядовой
Сообщения: 57
Зарегистрирован: 08.06.2016{, 09:15}
Репутация: 0
Откуда: Санкт-Петербург

Панель Nextion

#174

Сообщение igee » 08.03.2017{, 17:39}

Я не знаю пробовали ли вы пользоваться, но есть такой инструмент: zi font editor. Он завис в предрелизе, но вполне рабочий. При достаточном терпении и кропотливости с его помощью можно соорудить более-менее приемлемый шрифт). Вкратце там нужно выбрать кодировку,размер и количество генерируемых символов, затем сделать upper generate. После этого выбрать шрифт и сделать lower generate. Получится сгенереный шрифт, который можно увидеть в окне предпросмотра. Он на 50% будет кривоват и его надо будет подгонять вручную, но после подгонки вполне можно использовать.

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

Панель Nextion

#175

Сообщение Олег » 08.03.2017{, 18:22}

По мне так проще в Gimp или Photoshop сделать красивые кнопки, чем кривые шрифты рихтовать.

Makenz[c
Рядовой
Сообщения: 7
Зарегистрирован: 23.03.2016{, 18:30}
Репутация: 0

Панель Nextion

#176

Сообщение Makenz[c » 09.03.2017{, 17:05}

Олег,а как вы считаете реально сделать ограничение ввода для значений с запятой на Nextion?
Два знака после. Max 100.00 Например.

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

Панель Nextion

#177

Сообщение Олег » 09.03.2017{, 17:51}

Я так понимаю что вам именно по дробной части надо сравнивать? Если так, то тогда скорее всего только через контроллер. Переменную string со значением передается в контроллер, там преобразование string-float, потом float компаратором сравнивается с разрешенным диапазоном и контроллер уже решает печать это или нет.

Makenz[c
Рядовой
Сообщения: 7
Зарегистрирован: 23.03.2016{, 18:30}
Репутация: 0

Панель Nextion

#178

Сообщение Makenz[c » 09.03.2017{, 18:26}

Жаль,хотел ресурсы контроллера сэкономить. Я так и думал,превысил порог,запрет на вывод и запись в EEPROM. Еще прикидывал сделать с двух окон(используя твой пример,первое окно до запятой,второе после),потом через сложение строк ,конвертация в float и потом только на дисплей и в память. Но это тоже ресурсы контроллера. Все ровно спасибо, успокоил,буду делать через сравнение,раз других вариантов нема.

igee
Рядовой
Сообщения: 57
Зарегистрирован: 08.06.2016{, 09:15}
Репутация: 0
Откуда: Санкт-Петербург

Панель Nextion

#179

Сообщение igee » 10.03.2017{, 09:31}

На самом деле варианты есть. Вам нужно запрограммировать экран цифровой клавиатуры, который вы используете на Nextion. То есть во первых вам надо отследить точку при вводе, а во вторых посчитать количество символов введенных после точки. И при условии "если введена точка" + "если количество символов после точки<2"  вы разрешаете ввод символа. Если условие не выполнено - то ничего. И тогда пользователь просто не сможет ввести дополнительные символы. Я так ограничиваю количество знакомест вводимых пользователем в каждом конкретном случае.

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

Панель Nextion

#180

Сообщение Олег » 10.03.2017{, 10:54}

Насколько я понял Makenz[c, ему надо сравнивать значение, а не количество символов, то есть если >100.09, то выключаем, например.
А количество знаков для txt ограничивается в настройках в поле txt_maxl или что-то типа этого.

Makenz[c, если устраивает два поля, то попробуйте с помощью вложенных if сделать.

Ответить

Вернуться в «Дисплеи и индикаторы»