nextion (часть 5)

В данный форум Вы можете заносить найденные Вами ошибки.При добавления ошибки пожалуйста приложите файлик error.log который находится в папке с установленной программой
Ответить
findeler
Рядовой
Сообщения: 76
Зарегистрирован: 16.07.2016{, 08:31}
Репутация: 0
Откуда: Рязань

nextion (часть 5)

#1

Сообщение findeler » 21.08.2016{, 12:38}

не работает процедура получения значения переменной из nextion.

То есть передаётся всегда = 0 хотя её значение в самом nextion меняется.

Дурит, анализ нажатия кнопок. (непонятно как работает,).
Получить информацию о изображении тоже не возможно. (всегда ноль)

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

софт для nextion 0.37
flprog 1.14 Пятнадцатая версия вообще не даёт работать, но об этом писал ранее.

сам код.
void loop()
{
if(_isTimer(_nextionGetValue1_StartTime, 500)){ _nextionGetValue1_StartTime = millis(); _nextionGetValue1_isNU = 1; }
if(_nextionGetValue1_isNU){_nextionCommandTempString = "get main.key_gvs_press.val";
nextionSendCommand(_nextionCommandTempString.c_str(), 0);
_nextionTempLissen = nextionListen(0);
if(_nextionTempLissen.code = 'q') {_nextionGetValue1_outputValue = _nextionTempLissen.number;};
_nextionGetValue1_isNU = 0;}
digitalWrite(13, (_nextionGetValue1_outputValue) == (1L));
digitalWrite(9, (_nextionGetValue1_outputValue) == (0L));

}

Добавлено (21.08.2016, 11:12)
---------------------------------------------
Вот код чтения и записи. Запись работает, чтение нет.

//Чтение
if(_isTimer(_nextionGetValue1_StartTime, 500)){ _nextionGetValue1_StartTime = millis(); _nextionGetValue1_isNU = 1; }
if(_nextionGetValue1_isNU){_nextionCommandTempString = "get main.key_gvs_press.val";
nextionSendCommand(_nextionCommandTempString.c_str(), 0);
_nextionTempLissen = nextionListen(0);
if(_nextionTempLissen.code = 'q') {_nextionGetValue1_outputValue = _nextionTempLissen.number;};
_nextionGetValue1_isNU = 0;}
digitalWrite(13, (_nextionGetValue1_outputValue) == (1L));
digitalWrite(9, (_nextionGetValue1_outputValue) == (0L));

//Запись
if (1) { if (! _gen2I) { _gen2I = 1; _gen2O = 1; _gen2P = millis(); } } else { _gen2I = 0 ; _gen2O= 0;}
if (_gen2I) { if ( _isTimer ( _gen2P , 10000 )) { _gen2P = millis(); _gen2O = ! _gen2O;}}
if (_gen2O) { if (! _nextionSetAttr2_oldState ) {_nextionSetAttr2_oldState = 1; _nextionSetAttr2_isNU = 1; _nextionSaveDataVAL_P0_E6 = 0 ;}} else {_nextionSetAttr2_oldState = 0;}if (_nextionSetAttr2_isNU) {_nextionCommandTempString = String("main.key_gvs_press.val=") + String(_nextionSaveDataVAL_P0_E6);
nextionSendCommand(_nextionCommandTempString.c_str(), 0); nextionAck(0);
_nextionSetAttr2_isNU = 0; }

Добавлено (21.08.2016, 11:54)
---------------------------------------------
Покопал дальше.
if(_nextionTempLissen.code = 'q') {_nextionGetValue1_outputValue = _nextionTempLissen.number;};

условие _nextionTempLissen.code = 'q' выполняется. Но данных нет. (_nextionTempLissen.number=0)

Добавлено (21.08.2016, 12:38)
---------------------------------------------
Проблема не зависит от версии nextion editor 0.33 0.35 0.36 0.37
И не зависит от версии flprog 1.12 1.14 1.15

переменную пишет, но не читает.

Добавлено (21.08.2016, 12:38)
---------------------------------------------
Куда копать ?
Вложения
gl1_2.flp
(79.64 КБ) 52 скачивания
Последний раз редактировалось findeler 21.08.2016{, 11:14}, всего редактировалось 1 раз.

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

nextion (часть 5)

#2

Сообщение Олег » 21.08.2016{, 13:06}

findeler писал(а):не работает процедура получения значения переменной из nextion.
А если периодичность опроса увеличить?

findeler
Рядовой
Сообщения: 76
Зарегистрирован: 16.07.2016{, 08:31}
Репутация: 0
Откуда: Рязань

nextion (часть 5)

#3

Сообщение findeler » 22.08.2016{, 08:17}

Олег писал(а):А если периодичность опроса увеличить?
Не помогает, я пробовал от нуля до 1000 мс дело в коде функции.

Добавлено (22.08.2016, 08:17)
---------------------------------------------
Итак, ошибка в коде блока.

Костыль выглядит так.

if(_isTimer(_nextionGetValue1_StartTime, 500)){ _nextionGetValue1_StartTime = millis(); _nextionGetValue1_isNU = 1; }
if(_nextionGetValue1_isNU){_nextionCommandTempString = "get main.va0.val";
nextionSendCommand(_nextionCommandTempString.c_str(), 0);
//
delay(100);
//
_nextionTempLissen = nextionListen(0);
if(_nextionTempLissen.code = 'q') {_nextionGetValue1_outputValue = _nextionTempLissen.number;};
_nextionGetValue1_isNU = 0;}
digitalWrite(9, (_nextionGetValue1_outputValue) == (5L));
digitalWrite(8, (_nextionGetValue1_outputValue) == (0L));
digitalWrite(7, (_nextionGetValue1_outputValue) == (100));

В код добавлена задержка после команды отправки некстион и чтения значений оттуда. (100 мс это значение от фанаря, буду подбирать минимальное). Да и delay если будет больше 5-6 мс нужно будет заменить на проверку таймера.
Последний раз редактировалось findeler 22.08.2016{, 08:18}, всего редактировалось 1 раз.

Ответить

Вернуться в «Новые»