Nextion. Код блока отправки параметра в дисплей.

В данный форум Вы можете заносить найденные Вами ошибки.При добавления ошибки пожалуйста приложите файлик error.log который находится в папке с установленной программой
Ответить
igee
Рядовой
Сообщения: 57
Зарегистрирован: 08.06.2016{, 09:15}
Репутация: 0
Откуда: Санкт-Петербург

Nextion. Код блока отправки параметра в дисплей.

#1

Сообщение igee » 06.11.2016{, 14:27}

На странице №1 дисплея Nextion есть кнопка ВКЛ-ВЫКЛ. Если я ее нажимаю ее картинка (crop) изменяется на ВКЛ. Если нажимаю еще раз - становится ВЫКЛ. Очень просто. Допустим у меня в дисплее эти картинки под номерами 7 и 8.
Проболема в том, что когда я перехожу на страницу №1 в дисплее, картинка (crop) кнопки ВКЛ-ВЫКЛ меняется на ту, что под номером 0.
Вот схема.

А вот код, который получается при компилировании:

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

void loop()
{

   if(_trgt4)
   {_swi12=8;}
   else
   {_swi12=7;}
   bool  _tmp4 = nextion_TouchEv7_Q;
   if (_tmp4)  { if (! _trgt4I) _trgt4 = ! _trgt4; }
   _trgt4I = _tmp4;
   
if (nextion_TouchEv7_Q) { if (! _nextionSetAttr27_oldState ) {_nextionSetAttr27_oldState = 1; _nextionSetAttr27_isNU = 1; _nextionSaveDataPICC_P1_E5 =  _swi12 ;}} else {_nextionSetAttr27_oldState = 0;}
   // -----------------------------------------------------------------------------------------------------------------
if (nextionAskPageNamper(100) == 1)
   {
          if (_nextionSetAttr27_isNU)
          {
                 _nextionCommandTempString = String("Page1.OnOff.picc=") + String(_nextionSaveDataPICC_P1_E5);
                 nextionSendCommand(_nextionCommandTempString.c_str(), 100);  nextionAck(100);
                 _nextionCommandTempString = "ref OnOff";
                 nextionSendCommand(_nextionCommandTempString.c_str(), 100);  nextionAck(100);
                 _nextionSetAttr27_isNU = 0;
          }
   } else {_nextionSetAttr27_isNU = 1; }
// -----------------------------------------------------------------------------------------------------------------

   if(nextion_TouchEv7_Q) {_nextionCommandTempString = "get Manual.P1up.val";} else {_nextionCommandTempString = "get Manual.P1dn.val";}
...............
В коде я выделил пунктиром кусок, который по идее должен был бы находиться внутри события нажатия кнопки, а не в свободном полёте.
Получается, что программа в каждом цикле спрашивает номер страницы и когда я зайду на первую, где есть моя кнопка, тут же начнет проверять переменную_nextionSetAttr27_isNU, а ей в блоке объявления переменных  присвоен ноль. То есть выполняется else, где ей присваивается 1, а в следующем цикле выполняется if со значением этой переменной - 1, где идет отправка в дисплей значения номера картинки (_nextionSaveDataPICC_P1_E5) кнопки OnOff. А так как номер мы задаем переключателем, который находится внутри блока if нажатия кнопки (сразу над пунктиром), то получается, что у переменной _nextionSaveDataPICC_P1_E5 значение 0. То есть логично, что перейдя на page 1  я увижу изменение crop-а картинки на номер 0.

Поправьте если я где ошибся, потому, что если не ошибся - то это баг одного из ключевых блоков работы с дисплеем Nextion.
Вложения
0738353.jpg
Последний раз редактировалось igee 06.11.2016{, 14:30}, всего редактировалось 1 раз.

Ответить

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