Страница 1 из 1

nextion (часть 5)

Добавлено: 21.08.2016{, 12:38}
findeler
не работает процедура получения значения переменной из 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)
---------------------------------------------
Куда копать ?

nextion (часть 5)

Добавлено: 21.08.2016{, 13:06}
Олег
findeler писал(а):не работает процедура получения значения переменной из nextion.
А если периодичность опроса увеличить?

nextion (часть 5)

Добавлено: 22.08.2016{, 08:17}
findeler
Олег писал(а):А если периодичность опроса увеличить?
Не помогает, я пробовал от нуля до 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 мс нужно будет заменить на проверку таймера.