Страница 9 из 22
Панель Nextion
Добавлено: 06.03.2017{, 22:13}
Max
Slava-7eVeN писал(а):Попробовал сегодня на другом компьютере, результат тот же((( Какие еще мысли?
У меня сделано так:
Настройка в блоке:
Не смотрите на на вход knob, это просто дубль кнопки механической... Можно вообще сразу записывать в выход rel без переменных...
А это на стороне Nextion:
Программу обязательно запускаете от имени администратора.
Панель Nextion
Добавлено: 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 значения для того поля в котором введенное значение будет отображаться.
Панель Nextion
Добавлено: 07.03.2017{, 12:38}
Slava-7eVeN
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;
}
Панель Nextion
Добавлено: 07.03.2017{, 13:29}
Pixima
Slava-7eVeN, всё же ещё раз предлагаю, выложите оба проекта: для флпрог и панели. Попробую прошить Вашими проектами свое железо. Когда-то, мне это очень помогло!
Спасибо Олег, ещё раз.
Панель Nextion
Добавлено: 07.03.2017{, 13:44}
Slava-7eVeN
Pixima писал(а):Slava-7eVeN, всё же ещё раз предлагаю, выложите оба проекта: для флпрог и панели. Попробую прошить Вашими проектами свое железо. Когда-то, мне это очень помогло!Спасибо Олег, ещё раз.
Проблема решилась))) наконец то) Поставил версию portable 2.2 и ошибки прекратились и все работает прекрасно) спасибо всем за помощь.
P.S. Еще один маленький вопрос: у меня к примеру две страницы и на обоих есть кнопка Dual-state button, вот к примеру я на первой странице ее включил и если перехожу на вторую страницу кнопка на первой остается включенной, а хотелось бы что бы она отключалась. Спасибо
Панель Nextion
Добавлено: 07.03.2017{, 15:02}
igee
Кнопка остается включенной, так как ее свойство vscope в редакторе дисплея у вас global. Измените на local и состояние при переходах будет сбрасываться.
Добавлено (07.03.2017, 15:02)
---------------------------------------------
Вопрос автору программы. В этой ветке ранее упоминалось о переделке блоков с работы дисплеем. Я тут занимаюсь одним долгостроем, который как раз на Nextion, и сперва я делал проект на блоках предложенных FLProg, но позже вынужден был от них отказаться, т.к. во первых хромала с скорость работы программы, а во вторых почему то они использовали очень много памяти. При попытке выяснить как они работают я понял, что вы написали свою библиотеку для работы с дисплеем. Каким путем вы идете сейчас? Переделываете свою библиотеку или внедряете ту, что предлагают сами некстионовцы? Мне пришлось переделывать проект под их библиотеку и должен сказать, что она работает хорошо. Отклики моментальные, памяти расходуется меньше.
Панель Nextion
Добавлено: 07.03.2017{, 16:37}
Slava-7eVeN
igee писал(а):Кнопка остается включенной, так как ее свойство vscope в редакторе дисплея у вас global. Измените на local и состояние при переходах будет сбрасываться.
Спасибо)
Панель Nextion
Добавлено: 07.03.2017{, 21:02}
Max
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
Панель Nextion
Добавлено: 08.03.2017{, 01:00}
Олег
Эх Максим, заставил ты меня вспомнить то что давно забыл . Сделал рабочий пример в 38 версии, новую пока ставить не хочу. Не знаю изменился синтаксис или нет.
Панель Nextion
Добавлено: 08.03.2017{, 09:10}
Max
Цитата Олег () 200?'200px':''+(this.scrollHeight+5)+'px');">Эх Максим, заставил ты меня вспомнить то что давно забыл smile . Сделал рабочий пример в 38 версии, новую пока ставить не хочу. Не знаю изменился синтаксис или нет.
Олег, спасибо за труды! Ну понятно, что Вы собрали собственную клавиатуру, а в новой версии дается уже готовая клавиатура. И вот хотел с ней именно разобраться.
В принципе работает, только вот что моя версия программы пишет на этом примере:
Но отрабатывает в эмуляции. Если с готовой клавой не разберусь, то придется свою собирать... Там правда переменных куча разных...
И еще, при нажатии на цифровые кнопки при превышении разрядности, после сообщения "Недопустимое значение" выдает не читаемые символы:
Панель Nextion
Добавлено: 08.03.2017{, 10:33}
Олег
Max писал(а):В принципе работает, только вот что моя версия программы пишет на этом примере:
Пишет что сохранит бэкап файла, а сам файл переведет в новый формат, если в симуляции работает, значит перевел без проблем. Интересно, а что в коде после перевода в новый формат?
Max писал(а):И еще, при нажатии на цифровые кнопки при превышении разрядности, после сообщения "Недопустимое значение" выдает не читаемые символы:
Вспомнилось, как на первых IBM-ках на какой-то игре если слишком быстро начинал стучать по клаве то выплывало сообщение "Не суетись под клиентом" .
Переделал, я думаю вариант с кратковпеменным появлением надписи и очищением поля будут изящнее.
Панель Nextion
Добавлено: 08.03.2017{, 14:13}
Max
Олег писал(а):Пишет что сохранит бэкап файла, а сам файл переведет в новый формат,
Это я то понял.
Олег писал(а):если в симуляции работает, значит перевел без проблем. Интересно, а что в коде после перевода в новый формат?
Как уже писал, все работает за исключением этих не читаемых символов. Что интересно, я пытался в своей версии пробовать писать по русски, но в результате все слова конвертировались в знаки вопроса, типа такого ????? ??????. А вот у вас в примере, все нормально... Ваш пример возьму в работу в плане шрифтов.
Буду разбираться с универсальной клавиатурой. Ваш пример так же на вооружении.
Панель Nextion
Добавлено: 08.03.2017{, 14:43}
Олег
В Nextion очень мало шрифтов с кирилицей, Courier New Cyr, Learn Cyr, может и все. Но шрифты полный отстой, я во все кнопки и сообщения по событию изображения вставлял.
Панель Nextion
Добавлено: 08.03.2017{, 17:39}
igee
Я не знаю пробовали ли вы пользоваться, но есть такой инструмент:
zi font editor. Он завис в предрелизе, но вполне рабочий. При достаточном терпении и кропотливости с его помощью можно соорудить более-менее приемлемый шрифт). Вкратце там нужно выбрать кодировку,размер и количество генерируемых символов, затем сделать upper generate. После этого выбрать шрифт и сделать lower generate. Получится сгенереный шрифт, который можно увидеть в окне предпросмотра. Он на 50% будет кривоват и его надо будет подгонять вручную, но после подгонки вполне можно использовать.
Панель Nextion
Добавлено: 08.03.2017{, 18:22}
Олег
По мне так проще в Gimp или Photoshop сделать красивые кнопки, чем кривые шрифты рихтовать.
Панель Nextion
Добавлено: 09.03.2017{, 17:05}
Makenz[c
Олег,а как вы считаете реально сделать ограничение ввода для значений с запятой на Nextion?
Два знака после. Max 100.00 Например.
Панель Nextion
Добавлено: 09.03.2017{, 17:51}
Олег
Я так понимаю что вам именно по дробной части надо сравнивать? Если так, то тогда скорее всего только через контроллер. Переменную string со значением передается в контроллер, там преобразование string-float, потом float компаратором сравнивается с разрешенным диапазоном и контроллер уже решает печать это или нет.
Панель Nextion
Добавлено: 09.03.2017{, 18:26}
Makenz[c
Жаль,хотел ресурсы контроллера сэкономить. Я так и думал,превысил порог,запрет на вывод и запись в EEPROM. Еще прикидывал сделать с двух окон(используя твой пример,первое окно до запятой,второе после),потом через сложение строк ,конвертация в float и потом только на дисплей и в память. Но это тоже ресурсы контроллера. Все ровно спасибо, успокоил,буду делать через сравнение,раз других вариантов нема.
Панель Nextion
Добавлено: 10.03.2017{, 09:31}
igee
На самом деле варианты есть. Вам нужно запрограммировать экран цифровой клавиатуры, который вы используете на Nextion. То есть во первых вам надо отследить точку при вводе, а во вторых посчитать количество символов введенных после точки. И при условии "если введена точка" + "если количество символов после точки<2" вы разрешаете ввод символа. Если условие не выполнено - то ничего. И тогда пользователь просто не сможет ввести дополнительные символы. Я так ограничиваю количество знакомест вводимых пользователем в каждом конкретном случае.
Панель Nextion
Добавлено: 10.03.2017{, 10:54}
Олег
Насколько я понял Makenz[c, ему надо сравнивать значение, а не количество символов, то есть если >100.09, то выключаем, например.
А количество знаков для txt ограничивается в настройках в поле txt_maxl или что-то типа этого.
Makenz[c, если устраивает два поля, то попробуйте с помощью вложенных if сделать.