Проблема с Nextion

Goldberg
Offline
Зарегистрирован: 19.03.2017

Всем привет, у меня есть проблема с кодом.
Я использую плату arduino uno, дисплей nextion, реле, датчик DHT11.

У меня есть рабочий код для управление реле с дисплея. Всё работает. 
Код:

/*
 * Control de Ocho relays mediante Arduino Nano y pantalla NEXTION
 */
#include <SoftwareSerial.h>
#include <Nextion.h>

#define SI !1 
#define NO !0

byte rele[] = {4,5,6,7,8,9,2,3}; //Relay 1,2,3,4,5,6,7,8
const int ledPin = 13;    //LED pin
const byte ReceivePin = 11;
const byte TransmtPin = 10;
int i;
int recv; int trxv;
String message;

SoftwareSerial nextion(ReceivePin, TransmtPin);
Nextion myNextion(nextion, 9600);

boolean button1State = 0; boolean button2State = 0; boolean button3State = 0; boolean button4State = 0;
boolean button5State = 0; boolean button6State = 0; boolean button7State = 0; boolean button8State = 0;

void setup()
{
  Serial.begin(9600);
  myNextion.init();
  
 pinMode(ledPin, OUTPUT);
  for (i = 0; i < 8; i++) 
   { pinMode((rele[i]),OUTPUT); digitalWrite((rele[i]),NO); }

  while (!Serial) {};

  } 

void loop() 
{
  // put your main code here, to run repeatedly:

  message = myNextion.listen(); //check for message
  if (message !="") { Serial.println(message);}
if (message == "65 1 2 0 ffff ffff ffff") {digitalWrite((rele[0]),button1State); button1State = !(button1State); }
if (message == "65 1 3 0 ffff ffff ffff") {digitalWrite((rele[1]),button2State); button2State = !(button2State); }
if (message == "65 1 4 0 ffff ffff ffff") {digitalWrite((rele[2]),button3State); button3State = !(button3State); }
if (message == "65 1 5 0 ffff ffff ffff") {digitalWrite((rele[3]),button4State); button4State = !(button4State); }
if (message == "65 2 2 0 ffff ffff ffff") {digitalWrite((rele[4]),button5State); button5State = !(button5State); }
if (message == "65 2 3 0 ffff ffff ffff") {digitalWrite((rele[5]),button6State); button6State = !(button6State); }
if (message == "65 2 4 0 ffff ffff ffff") {digitalWrite((rele[6]),button7State); button7State = !(button7State); }
if (message == "65 2 5 0 ffff ffff ffff") {digitalWrite((rele[7]),button8State); button8State = !(button8State); }

   
}
// Fin Loop
// Inicia los Relays en NO
// for (i = 0; i < 8; i++) // Prueba los Relays del 1 a 8 - Quitar de la compilacion para el uso normal
// { digitalWrite((rele[i]),SI); delay(50);  digitalWrite((rele[i]),NO); delay(50); }





И есть другой код который подаёт значения температурного датчика на дисплей.
Код:

#include <SoftwareSerial.h>
#include <Nextion.h>
#include "DHT.h"

#define DHTPIN 5
#define DHTTYPE DHT11   // DHT 11 
DHT dht(DHTPIN, DHTTYPE);

SoftwareSerial nextion(2, 3);// 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();
dht.begin();
}

void loop() {

  float h = dht.readHumidity();
  float t = dht.readTemperature();

  myNextion.setComponentText("t0", String(t));
  delay(1000);

  myNextion.setComponentText("t1", String(h));
  delay(1000);
  
}

 



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

Вот пример кода который пока выходит, с ним у меня перестают работать реле:

 

#include <SoftwareSerial.h>
#include <Nextion.h>
#include "DHT.h"

#define SI !1 
#define NO !0
#define DHTPIN 5
#define DHTTYPE DHT11   // DHT 11 
DHT dht(DHTPIN, DHTTYPE);



byte rele[] = {4,15,6,7,8,9,2,3}; //Relay 1,2,3,4,5,6,7,8
const int ledPin = 13; //Led
int i;
int recv; int trxv;
String message;
const byte ReceivePin = 11;
const byte TransmtPin = 10;

SoftwareSerial nextion(ReceivePin,TransmtPin);
Nextion myNextion(nextion,9600);

boolean button1State = 0; boolean button2State = 0; boolean button3State = 0; boolean button4State = 0;
boolean button5State = 0; boolean button6State = 0; boolean button7State = 0; boolean button8State = 0;


void setup() {

  Serial.begin(9600);
  myNextion.init();
  dht.begin();


pinMode(ledPin, OUTPUT); 
  for (i = 0; i < 8; i++) 
   { pinMode((rele[i]),OUTPUT); digitalWrite((rele[i]),NO); }

   while (!Serial) {};
}

void loop() {

  message = myNextion.listen(); //check for message
if (message !="") { Serial.println(message);}
if (message == "65 1 2 0 ffff ffff ffff") {digitalWrite((rele[0]),button1State); button1State = !(button1State); }
if (message == "65 1 3 0 ffff ffff ffff") {digitalWrite((rele[1]),button2State); button2State = !(button2State); }
if (message == "65 1 4 0 ffff ffff ffff") {digitalWrite((rele[2]),button3State); button3State = !(button3State); }
if (message == "65 1 5 0 ffff ffff ffff") {digitalWrite((rele[3]),button4State); button4State = !(button4State); }
if (message == "65 2 2 0 ffff ffff ffff") {digitalWrite((rele[4]),button5State); button5State = !(button5State); }
if (message == "65 2 3 0 ffff ffff ffff") {digitalWrite((rele[5]),button6State); button6State = !(button6State); }
if (message == "65 2 4 0 ffff ffff ffff") {digitalWrite((rele[6]),button7State); button7State = !(button7State); }
if (message == "65 2 5 0 ffff ffff ffff") {digitalWrite((rele[7]),button8State); button8State = !(button8State); }
else{
  float t = dht.readTemperature();
  myNextion.setComponentText("t0", String(t));
  message="1";
}
  
}

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

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну могу предложить это скетч . http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...

Совместите его с отправкой данных на Nextion.

arDubino
Offline
Зарегистрирован: 12.01.2017

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

Goldberg
Offline
Зарегистрирован: 19.03.2017

Можно подробней?

arDubino
Offline
Зарегистрирован: 12.01.2017

подробнее все просто.

цикл loop колотит с тактовой частотой. 16Мгц твой глаз не успевает. а скорее всего даже некстион не успевает получить сигнал как ты его уже дергаешь и по-новой выдаешь меню.

посути надо или меню сделать с пунктом выдача температуры или после выдачи температуры делать delay(1000) т.е. 1 сек ждать а не обновлять в цикле

arDubino
Offline
Зарегистрирован: 12.01.2017
24   myNextion.setComponentText("t0", String(t));
25   delay(1000);
26  
27   myNextion.setComponentText("t1", String(h));
28   delay(1000);

там жже было а у себя не поставили

denis707
Offline
Зарегистрирован: 09.09.2013

У меня такая же проблема, все работает пока не начинаю передавать данные на дисплей.

Когда идет передача на дисплей через listen получаю кучу мусора.

Подскажите куда копать и вообще есть возможность обрабатывать нажатия и одноврененно отправлять динамические данные Задержка исключается, т. к. Если кнопка залипнет во включённом состоянии может случится авария. С задержкой конечно лучше работает, но мусор вместо кодов проскакивает всё равно.

#include <SoftwareSerial.h>
#include <EEPROM.h>
#include <Nextion.h>

int FL, FR, RL, RR, PotFL, PotFR, PotRL, PotRR, Temp1, Presure1, val1, val2, val3, val4;
int LevHiFL, LevHiFR, LevHiRL, LevHiRR, LevLoFL, LevLoFR, LevLoRL, LevLoRR;
int LevFL, LevFR, LevRL, LevRR;
String message1;
SoftwareSerial nextion(2, 3);// 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

boolean messureState = false;
//boolean button2State;

void setup() {
  Serial.begin(9600);
  nextion.begin(9600);
//  Serial.println("EEPROM GET");
//  FL=EEPROM.read(1);
//  FR=EEPROM.read(2);
//  RL=EEPROM.read(3);
//  RR=EEPROM.read(4);
//  Serial.println("FL" + FL);
//  Serial.println("FR" + FR);
//  Serial.println("RL" + RL);
//  Serial.println("RR" + RR);
  myNextion.init(); // send the initialization commands for Page 0    
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}



void loop() {
  String message = myNextion.listen(); //check for message
     
  if (message != ""){
     Serial.println(message);
     }//else{ 
     PotFL  =   analogRead(A0);//FL pot
     PotFR  =   analogRead(A1);//FR pot
     PotRL  =   analogRead(A2);//RL pot
     PotRR  =   analogRead(A3);//RR pot
     Temp1  =   analogRead(A4);//temperature
     Presure1 = analogRead(A5);//pressure
     //myNextion.setComponentValue("n6", PotFL);
     //myNextion.setComponentValue("n7", PotFR);
     //myNextion.setComponentValue("n8", PotRL);
     //myNextion.setComponentValue("n9", PotRR);
     //myNextion.setComponentValue("n4", Presure1);
     //myNextion.setComponentValue("n5", Temp1);
     //delay(10);
     //}
 
   //EEPROM READ----------------------------------------------
  if (message == "65 3 2 0 ffff ffff ffff"){
    FL=EEPROM.read(1),myNextion.setComponentValue("n0", FL);
    FR=EEPROM.read(2),myNextion.setComponentValue("n1", FR);
    RL=EEPROM.read(3),myNextion.setComponentValue("n2", RL);
    RR=EEPROM.read(4),myNextion.setComponentValue("n3", RR);
  }
  //EEPROM WRITE---------------------------------------------
  if (message == "65 2 1 0 ffff ffff ffff"){
    EEPROM.write(1, FL),EEPROM.write(2, FR);
    EEPROM.write(3, RL),EEPROM.write(4, RR);
  }
  if (message == "65 5 1 0 ffff ffff ffff"){
    EEPROM.write(11, LevHiFL),EEPROM.write(12, LevHiFR);
    EEPROM.write(13, LevHiRL),EEPROM.write(14, LevHiRR);
    EEPROM.write(15, LevLoFL),EEPROM.write(16, LevLoFR);
    EEPROM.write(17, LevLoRL),EEPROM.write(18, LevLoRR);
    EEPROM.write(21, LevFL),EEPROM.write(22, LevFR);
    EEPROM.write(23, LevRL),EEPROM.write(24, LevRR);
  }
  
  
  //BUTTON UP ------------------------------------------------
  if (myNextion.getComponentValue(4)==1) FL=UP(val1,"n0");//, Serial.println(FL);message == "65 2 6 0 ffff ffff ffff"
  if (message == "65 2 9 0 ffff ffff ffff") FR=UP(val2,"n1");//, Serial.println(FR);
  if (message == "65 2 c 0 ffff ffff ffff") RL=UP(val3,"n2");//, Serial.println(RL);
  if (message == "65 2 d 0 ffff ffff ffff") RR=UP(val4,"n3");//, Serial.println(RR);
// BUTTON DOWN-----------------------------------------
  if (message == "65 2 7 0 ffff ffff ffff") FL=DOWN(FL,"n0");//, Serial.println(FL);
  if (message == "65 2 8 0 ffff ffff ffff") FR=DOWN(FR,"n1");//, Serial.println(FR);
  if (message == "65 2 a 0 ffff ffff ffff") RL=DOWN(RL,"n2");//, Serial.println(RL);
  if (message == "65 2 b 0 ffff ffff ffff") RR=DOWN(RR,"n3");//, Serial.println(RR);
  //MANUAL BUTTON UP ------------------------------------------------
  if (message == "65 4 4 1 ffff ffff ffff") ManualUP(4);
  if (message == "65 4 5 1 ffff ffff ffff") ManualUP(5);
  if (message == "65 4 6 1 ffff ffff ffff") ManualUP(6);
  if (message == "65 4 1 1 ffff ffff ffff") ManualUP(7);
  //MANUAL BUTTON DOWN ----------------------------------------------
  if (message == "65 4 7 1 ffff ffff ffff") ManualDOWN(4);
  if (message == "65 4 8 1 ffff ffff ffff") ManualDOWN(5);
  if (message == "65 4 9 1 ffff ffff ffff") ManualDOWN(6);
  if (message == "65 4 a 1 ffff ffff ffff") ManualDOWN(7);
  //RESET MANUAL BUTTON ---------------------------------------------
  if (message == "65 4 4 0 ffff ffff ffff"||message == "65 4 7 0 ffff ffff ffff") Off(4);
  if (message == "65 4 5 0 ffff ffff ffff"||message == "65 4 8 0 ffff ffff ffff") Off(5);
  if (message == "65 4 6 0 ffff ffff ffff"||message == "65 4 9 0 ffff ffff ffff") Off(6);
  if (message == "65 4 1 0 ffff ffff ffff"||message == "65 4 a 0 ffff ffff ffff") Off(7);

  //BOLEAN OPERATION ------------------------------------------------
//  if (message == "65 3 1 0 ffff ffff ffff"||message == "65 3 4 0 ffff ffff ffff") messureState=true;
//  if (message == "65 1 2 0 ffff ffff ffff"||message == "65 5 1 0 ffff ffff ffff") messureState=false;

 

  
}


int DOWN(byte num, String val) {
   // int result;
    num=constrain(myNextion.getComponentValue(val), 1, 98);
    num--;
    myNextion.setComponentValue(val, num);
    return num;
}

int UP(int num, String val) {
    num=constrain(myNextion.getComponentValue(val), 1, 98);
    num++;
    myNextion.setComponentValue(val, num);
    return num;
}

int ManualUP(int pin){
  digitalWrite(13,HIGH);
  digitalWrite(pin,HIGH);
}

int ManualDOWN(int pin){
  digitalWrite(12,HIGH);
  digitalWrite(pin,HIGH);
}

void Off(int pin){
  digitalWrite(12,LOW);
  digitalWrite(13,LOW);
  digitalWrite(pin,LOW);
}