Nextion и Ардуино

akhmed
Offline
Зарегистрирован: 04.12.2017

Здравствуйте! Подскажите, пожалуйста, в чем может быть причина или ошибка. Только начал работать с дисплеями и только учусь. 

  ..... 

  monitoring.init();//инициализация дисплея 

   .....

   String message = monitoring.listen();//считываю события дисплея
   if (message == "65 2 3 1 ffff ffff ffff")//если нажата кнопка с id 3 на странице 2 
   {j=monitoring.getComponentValue("n0");//считать значение с цифровой переменной n0 (находится на page 2)
    monitoring.setComponentValue("n2",j);}//присвоить значение j цифровой переменной n2 (находится на page 1)
Не понимаю пока в чем ошибка, у каждого объекта nextion свое уникальное имя, имена "n0" и "n2" кроме как на своих страницах нигде не фигурируют. Это объекты "number". 
   
Попробовал вставить в тело условия еще и Serial.print("!"), не печатает. Значит отсюда следует, что не выполняется условие вообще. Почему? Само условие введено вроде верно. Кнопка, которую мы должны нажать, обычная, не двухпозиционная, сделана объектом "button". Все объекты глобальные. Подскажите пожалуйста. Библиотека вроде nextion_master
b707
Offline
Зарегистрирован: 26.05.2017

Попробуйте перечитать, что вы написали - совершенно ничего не понятно. Вы даже не сказали. в чем, сопсна. проблема.

Желательно, чтобы вы при следующем вопросе выложили скетч целиком и сделали это по правилам форума (см прикрепленную тему вверху страницы).

akhmed
Offline
Зарегистрирован: 04.12.2017
#include <SoftwareSerial.h>
#include <Nextion.h>
 
SoftwareSerial nextion(2, 3);
Nextion monitoring(nextion, 9600);
int j;

void setup ()
{
  Serial.begin(9600);
  monitoring.init();
}

void loop ()
{
   String message = monitoring.listen();
   if (message == "65 2 3 1 ffff ffff ffff") // и так пробовал 65 02 03 01 FF FF FF
   {j=monitoring.getComponentValue("n0");
   Serial.println("!");
   monitoring.setComponentValue("n2",j);}
}

 

akhmed
Offline
Зарегистрирован: 04.12.2017

В nextion editor есть несколько страниц. На page 2 собственно находится кнопка "button" b13 с id 3 и цифровая переменная "number" n0. Хочу чтобы после нажатия кнопки (65 2 3 1 ffff ffff ffff) значение с n0 перешло на n2 на другой правда странице page 1. Почему условие не выполняется вообще, так как я сужу по отсутствию в мониторе последовательного порта строку "!"

b707
Offline
Зарегистрирован: 26.05.2017

вставьте вывод в монитор переменной message между строками 16 и 17 и посмотрите, какая на самом деле мессадж у вас приходит

akhmed
Offline
Зарегистрирован: 04.12.2017

Спасибо за ответ, но я вообщем ничего не менял, а на следующий день условие стало выполняться чудесным образом. Но не так как надо. Дело в том, что в n0 выводится число от 1 до 6, которое уменьшается или увеличивается, когда пользователь нажимает на кнопку "-" или "+". На дисплеи все работает при нажатии на "-" число уменьшается, при нажатии на "+" число увеличивается и так в диапазоне от 0 до 6. После нажатии кнопки "65 2 3 1 ffff ffff ffff" это число должно запомнться и перенестись на другую страницу в другую переменную и там уже с ней пользователь будет работать. Так вот - число вводится, кнопка нажимается, порт это показывает флажком "!" , показание должно теперь считаться с n0 и записаться в n2. Но при добавлении строки Serial.println(j) я вижу, что снимается почему всегда "-1" в независимости от того какое число вводит пользователь в n0. И n2 соответственно показывает "-1". Почему, подскажите пожалуйста. "-1" вообще нельзя ввести в n0, там стоит условие именно диапазон от 0 до 6. 

akhmed
Offline
Зарегистрирован: 04.12.2017

Подскажите ещё пожалуйста что нибудь даёт вообще введение в nextion строка get... Например, сейчас добавил на кнопку строку get n0.val, но результат работы программы не изменился. По прежнему выдаёт "-1". Или подскажите ещё есть ли аналог getComponentValue для текста? Или вообще лучше выполнить задачу не через number или text, а через value. Но как тогда значение value передать в ардуино?
.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Ну ведь кучу в сети примеров по работе с Nextion, реально - кучу. И документация у разработчика есть. Но кто это читать будет, если можно заспамить вопросами форум? Вопрос риторический...

akhmed
Offline
Зарегистрирован: 04.12.2017

Спасибо большое, у вас здесь лучший форум. Такой отзывчивости редко встретишь на других площадках для общения. А админу предлагаю сделать надпись, большую такую, "новичкам, у которых есть желание, но нет опыта, НЕ ПИСАТЬ И НЕ СПАМИТЬ". И вас никто бесить не будет, да и форум почище станет

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Ахмед, тут не любят ленивцев, которые не в силах оторвать жопу и спросить у гугля вещи, которые выложены просто тоннами. Не любят и халявщиков, которым только дай. Ты из каких будешь?

alex_r61
alex_r61 аватар
Offline
Зарегистрирован: 20.06.2012

akhmed пишет:
Спасибо большое, у вас здесь лучший форум. Такой отзывчивости редко встретишь на других площадках для общения. А админу предлагаю сделать надпись, большую такую, "новичкам, у которых есть желание, но нет опыта, НЕ ПИСАТЬ И НЕ СПАМИТЬ". И вас никто бесить не будет, да и форум почище станет

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

http://arduino.ru/forum/apparatnye-voprosy/nextion-displei

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

akhmed пишет:
Спасибо большое, у вас здесь лучший форум. Такой отзывчивости редко встретишь на других площадках для общения. А админу предлагаю сделать надпись, большую такую, "новичкам, у которых есть желание, но нет опыта, НЕ ПИСАТЬ И НЕ СПАМИТЬ". И вас никто бесить не будет, да и форум почище станет

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

Не рады новичкам, у которых есть желание что-то получить нахаляву, а также тем, которые считают своим долгом объяснить завсегдатаям, для чего нужен форум, и как на нем следует общаться.

akhmed
Offline
Зарегистрирован: 04.12.2017

в том то и дело, что решение на свою проблему я не нашел, кроме как попробовать другую библиотеку, но думал, что здесь помогут менее кардинальным советом. А то, что вы увидели во мне лентяя, это ваше дело. То, что я выложил выше - это лишь ведь кусочек кода. Все задачи, которые перед собой ставил - нашел и сделал, и все работает. И дисплей получает у меня данные с ардуино и датчиков, и показывает их в красивом интерфейсе, и интерфейс сделан многофункциональным и приятным для глаза.

единственное с чем я все таки решил спустя неделю мучений обратиться восприняли в штыки и обкидали камнями. Ну не нашел я решения. Ни в документациях, ни в примерах, ни в хваленом гугле. Неделю он мне показывает "-1". Что на дисплеи, что в мониторе последовательного порта. 

все таки придется использовать судя по всему другую библиотеку и воздерживаться впредь от вопросов, дабы не выглядеть глупцом

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014
uint8_t getStateCheck()
{
  sendCommand("get sys0"); //запрашиваем значение переменной sys0
  while (!HMISerial.available()); //ждем пока ответят
  delay(10);
  if (nexSerial.read() == 0x71) displayCheck = nexSerial.read();
  while (HMISerial.available() > 0) //подчищаем за собой
  {
    nexSerial.read();
  }
  return displayCheck;
}

Чтение 1 байта запрошенной переменной

https://www.itead.cc/wiki/Nextion_Instruction_Set#get:_Get_variable.2Fco...

Делалось на скорую руку, поэтому блокирующая и небезопасная, в случае если дисплей отключен или не отвечает.

 

крокодил
Offline
Зарегистрирован: 05.09.2019

Примеров в интернета много но рабочих примеров 0.

Мне помогли вот эти урок по Дисплею Nextion.

https://portal-pk.ru/news/212-122---displei-nextion-urok-2-podklyuchaem-i-peredaem-dannye-na.html

 

Описано все понятно и примеры есть!

 

brokly
brokly аватар
Онлайн
Зарегистрирован: 08.02.2014

Некрофил ? Скрытая реклама ?