Не приходят данные от nextion

Vasilisk
Offline
Зарегистрирован: 22.09.2017
#include <SoftwareSerial.h>
#include <Nextion.h>

SoftwareSerial nextion(17, 16);// Nextion TX to pin 2 and RX to pin 3 of Arduino

Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps

void setup() {
  Serial.begin(9600);
  myNextion.init();

}

void loop() {
  String message = myNextion.listen(); //check for message
  if(message != ""){ // if a message is received...
    Serial.println(message); //...print it out
  }
  
}

При этом данные на экран отправляются. Т.е. подключено все верно. Сама прошивка экрана тоже должна быть исправной. В симуляторе все работает и данные отправляются.

Порт тоже работает и другие данные от ардуины приходят. Что не так? Прошу помочь.

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

В свое время почему то тоже конструкция с message не хотела работать. Я пошёл другим путем - при нажатии кнопки меняется её составляющая var которая по умолчанию стоит 0, например кнопка b1 (её имя в едиторе). Я использовал функцию считывания переменной setComponenVariable("b1") и смотрел не равна ли она нулю. Точно не помню, но по моему все точно описал, все работала. Причину почему не работает listen корректно я так и не выяснил

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

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

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Какая Андуина используется? Софтверный сериал не на любые пины можно вешать.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Ардуина мега. Делаю станок, и управление им соответственно. В данном случае начал кнопку включения прописывать и вот в это уткнулся. Температуру с датчика на экран выводит нормально.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Это к теме , конечно, не относится, но
зачем на меге юзать софтварный сериал???

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Потому, что не хватает знаний, что бы юзать не софтовый.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Vasilisk пишет:

Потому, что не хватает знаний, что бы юзать не софтовый.


http://arduino.ru/Serial/Begin

Пример для Ардуино Мега:

// Arduino Mega пример использования всех 4 последовательных портов
// (Serial, Serial1, Serial2, Serial3),
// с разными скоростями:

void setup(){
Serial.begin(9600);
Serial1.begin(38400);
Serial2.begin(19200);
Serial3.begin(4800);

Serial.println("Hello Computer");
Serial1.println("Hello Serial 1");
Serial2.println("Hello Serial 2");
Serial3.println("Hello Serial 3");
}

The Arduino Mega has three additional serial ports:
Serial1 on pins 19 (RX) and 18 (TX),
Serial2 on pins 17 (RX) and 16 (TX),
Serial3 on pins 15 (RX) and 14 (TX).

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

На Меге 16 и 17 нельзя использовать под RX если память не изменяет.

trembo дело говорит! Кк это знаний не хватает,вы ж его уже используете в 9 и 17 строках. У Меги таких 4ре, пишите Serial1..3 и вперед

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Я вообще нечего не понял.

1) Как в этой строчке обойтись без совтового порта?

SoftwareSerial nextion(15, 1);// Nextion TX to pin 2 and RX to pin 3 of Arduino

2) 

Not all pins on the Mega and Mega 2560 support change interrupts, so only the following 
can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64),
A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).

Зачем тогда на плате они подписаны, если их нельзя использовать?!

В общем я сделал так::

SoftwareSerial nextion(15, 1);// Nextion TX to pin 2 and RX to pin 3 of Arduino

Написанно же выше, что 15 можно. Я вообще запутался.

В общем температуру все так же выводит, но команды не считываются.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Все еще не понимаю, но подключил пины 10 и 11. Прогресс на лицо:

Сейчас буду искать, как это исправить.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

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

 

Осталось только непонятным, как задействовать

Плата Arduino Mega имеет три дополнительных последовательных порта: Serial1 на портах 19 (RX) и 18 (TX), 
Serial2 на портах на портах 17 (RX) и 16 (TX), Serial3 на портах на портах 15 (RX) и 14 (TX)

Если Nextion требует софт порт

SoftwareSerial nextion(10, 11);

 

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

Vasilisk пишет:

Если Nextion требует софт порт

Кто вам это внушил? с Nextion можно общаться через аппаратный UART, любой. SoftwareSerial юзать вовсе необязательно, тем более что у Arduino Mega аж 4 аппаратных UART.

MaksVV
Offline
Зарегистрирован: 06.08.2015
Vasilisk пишет:
Осталось только непонятным, как задействовать.... Плата Arduino Mega имеет три дополнительных последовательных порта: Serial1 на портах 19 (RX) и 18 (TX), Serial2 на портах на портах 17 (RX) и 16 (TX), Serial3 на портах на портах 15 (RX) и 14 (TX)
 
Скетч из первого поста
Строку 01 и 04 убрать или закоментировать 
 
Если хотим ,например, использовать Serial1 , то строку 06 исправить на 
Nextion myNextion(Serial1, 9600);

 

 
Vasilisk
Offline
Зарегистрирован: 22.09.2017

Я просто не знаю, как записать иначе. Во всех уроках записано так.

Появилась вот такая ошибка. Вроде как помехи какие-то. Экран подключен к той же земле, что и плата. Кто знает, в чем ошибка?

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Чем выше скорость и больше кнопок, тем больше ошибок. Я так понимаю, это из-за плохого контакта на макетной плате. Придется припаивать к плате намертво? (

Vasilisk
Offline
Зарегистрирован: 22.09.2017

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

no matching function for call to 'Nextion::Nextion(HardwareSerial&, long int)'

 

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

Vasilisk пишет:

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

no matching function for call to 'Nextion::Nextion(HardwareSerial&, long int)'

внутри файла библиотеки Nextion.h закомментируйте строчку:

#define USE_SOFTWARE_SERIAL

svorog
Offline
Зарегистрирован: 27.04.2017

Здравствуйте! извиняюсь что влазию в чужую тему, но вроде бы тема очень похожа. Подскажите пожалуйста. На экран nextion для t0 и t1 вывожу две переменные encoder0Pos и encoder1Pos, хотел бы обнулять значения по нажатию сенсорных кнопок. ​использовал все советы из этой темы, перешел к железному сериалу, закаментировал библиотеку, код компиляцию проходит, однако не работает, пытаюсь использовать код ниже, предполагаю работу следующим образом: прочитали сообщение от экрана если сообщение сообветствует "65 00 05 ff ff ff" то обнулили первую переменную, если "65 00 06 ff ff ff", то обнуляем вторую, на деле же просто обнуляет значение без нажатия кнопок, подскажите в чем ошибка?

#include <Nextion.h>
#define nextion Serial3
Nextion myNextion(Serial3, 9600);

void setup () {
  Serial3.begin(9600);
  myNextion.init();

void loop() {
 SendData("t0.txt",X);
 SendData("t1.txt",Y);
  
   String message = myNextion.listen(); 
  if (message = "65 00 05 ff ff ff") {
   encoder0Pos =0;
    }
 
    if (message = "65 00 06 ff ff ff"){ 
   encoder1Pos=0;

  }
}