Дисплей Nextion: азы. Arduino, ESP8266.

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 9 авг 2016.

Метки:
  1. DIYMan

    DIYMan Гуру

    У вас явно что-то нездоровое происходит. Попробуйте как я сказал - пустой проект для Nextion с парой страниц и переключением между ними по кнопкам, никаких выводов в порт от Nextion в событиях, просто - переключение между страницами. Закачайте в дуньку тестовую прошивку, а в Nextion - тестовый проект, и посмотрите - будет ли такая дичь в порту.
     
  2. Sadesign

    Sadesign Нерд

    Нет, на простых проектах такого нет. Определил, что вредят мот конструкции типа:

    mySerial.print((String)"va55.val=1"+char(255)+char(255)+char(255));

    Так я присваиваю значения переменным, которые в Nextion. Если такие строчки заменить на библиотечный вариант типа:

    myNextion.setComponentValue ("val55", 1);

    то в порт обратно уже ничего не лезет. Но библиотечная функция зато сама тормозная до предела, что тоже не вариант. А вот почему при отправке моего варианта:

    mySerial.print((String)"va55.val=1"+char(255)+char(255)+char(255));

    я получаю такое в порте, мне непонятно. Причем, на всех страницах, кроме той, на которой находится эта переменная val55.
     
  3. DIYMan

    DIYMan Гуру

    Вывод у вас, конечно, дикий :) Замените вот это
    Код (C++):
    mySerial.print((String)"va55.val=1"+char(255)+char(255)+char(255));
    на хотя бы вот это:
    Код (C++):
    mySerial.print(F("va55.val=1"));
    mySerial.write(0xFF);
    mySerial.write(0xFF);
    mySerial.write(0xFF);
    И вроде вы говорили про аппаратный UART - что за mySerial? ;)
     
  4. Sadesign

    Sadesign Нерд

    Эту чудесную запись я скопировал из какого-то урока. Так и учимся - обратным ходом. Сначала пишем чушь, потом, благодаря советам, разбираемся, почему так нельзя делать. )
    Но зато появилась ясность в моей проблеме. Итог такой:

    1. Нельзя обращаться к переменной, если она в Nextion отсутствует в принципе или находится на неактивном экране и при этом не является глобальной.
    2. Нельзя обращаться к переменной на неактивной странице просто по имени, даже если переменная глобальная и имя уникально. Обязательно прописывать полный путь, включая страницу: "Page0.va1.val=1". Причем, запись с пробелами "Page0. va1.val = 1" работать не будет.
    В обоих указанных случаях дисплей начинает отправлять в порт сообщения (вероятно, об ошибке) и тормозит Ардуино.

    Возможно, для многих это очевидно, но мне пришлось разбираться с этим. За помощь спасибо! )
     
  5. ИгорьК

    ИгорьК Давно здесь

    - Я писал о правилах обращения к переменным.
    - Отключите вывод дисплея сообщений об ошибках.
     
  6. Sadesign

    Sadesign Нерд

    Это ж нужно 0 поставить в системной переменной? А где почитать про то, как изменять эти системные переменные? Или подскажите.
     
  7. ИгорьК

    ИгорьК Давно здесь

    Help от Nextion IDE вам в помощь.
     
  8. skalinas

    skalinas Нерд

    Подскажите, с ардуино можно переключать экраны на дисплее, пример?
     
  9. vvr

    vvr Инженерище

    или почитайте ветку с начала или вас могут послать))))
     
  10. Sadesign

    Sadesign Нерд

    Да. Для этого можно отправить в порт такую строчку:

    Serial.print (F("page page1")); Serial.write(0xFF); Serial.write(0xFF); Serial.write(0xFF);

    где Serial это используемый Вами порт, а page1 - страница, на которую хотите перейти.
     
    skalinas нравится это.
  11. Sadesign

    Sadesign Нерд

    Подскажите, почему конструкция

    Serial.print (F ("page0.t1.txt=55") ); Serial.write(0xFF); Serial.write(0xFF); Serial.write(0xFF);

    не выводит "55" в текстовое поле t1? Что не так?
     
  12. ИгорьК

    ИгорьК Давно здесь

    Должна выводить. Ой, чушь спорол :-(((( Чтобы понято что не так запускайте эмулятор дисплея на компьютере, соединяйте с ардуино и смотрите что не нравится эмулятору.
     
    Последнее редактирование: 27 дек 2017
  13. Sadesign

    Sadesign Нерд

    Тут у меня сложности. Windows для Nextion Editor запущен на Mac и в упор не хочет видеть Ардуино. )
    Просто пытаюсь вывести часы - библиотечная функция

    myDisplay.setComponentText("t1", String (time.gettime("H:i:s")));

    выводит их без проблем, но хочется избавиться от библиотек. Поэтому пытаюсь вывести хотя бы элементарный текст для начала. Но что-то никак пока. ) Хотя переменные и данные в числовые поля у меня отправляются нормально. А вот с текстовыми пока не очень. )
     
  14. DIYMan

    DIYMan Гуру

    Двойных кавычек нет:
    Код (C++):
    Serial.print (F ("page0.t1.txt=\"55\"") ); Serial.write(0xFF); Serial.write(0xFF); Serial.write(0xFF);
     
    Sadesign нравится это.
  15. ИгорьК

    ИгорьК Давно здесь

    Правильно! Не читайте тему сначала! Спрашивайте что в ней написано заново!
     
  16. ИгорьК

    ИгорьК Давно здесь

  17. Sadesign

    Sadesign Нерд

    О, вот так работает, спасибо! ) Теперь буду пробовать вместо "55" вставить time.gettime("H:i:s")

    В руководстве по Ардуино нет ничего ни про F(), ни про слэши с двойными квычками. Видно, надо Си изучать. )
     
  18. Sadesign

    Sadesign Нерд

    Почему ж не освежить-то? )
     
  19. ИгорьК

    ИгорьК Давно здесь

  20. Sadesign

    Sadesign Нерд

    Э..э..( Вот так пробую:

    String timeNow = time.gettime ("H:i:s");
    Serial.print (F ("t1.txt="+timeNow) ); Serial.write(0xFF); Serial.write(0xFF); Serial.write(0xFF);

    Получаю ошибку:

    Arduino: 1.8.0 (Mac OS X), Плата:"Arduino Nano, ATmega328P"
    Ошибка компиляции для платы Arduino Nano.