Проблема с Nextion
- Войдите на сайт для отправки комментариев
Вс, 19/03/2017 - 14:43
Всем привет, у меня есть проблема с кодом.
Я использую плату 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 платы на дисплей слалась температура, а с дисплея на плату управление реле.
Ну могу предложить это скетч . http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...
Совместите его с отправкой данных на Nextion.
делай нет вот и может просто не успеваешь увидеть . у тебя меню закрывает все это дело.
Можно подробней?
подробнее все просто.
цикл loop колотит с тактовой частотой. 16Мгц твой глаз не успевает. а скорее всего даже некстион не успевает получить сигнал как ты его уже дергаешь и по-новой выдаешь меню.
посути надо или меню сделать с пунктом выдача температуры или после выдачи температуры делать delay(1000) т.е. 1 сек ждать а не обновлять в цикле
24myNextion.setComponentText("t0", String(t));25delay(1000);2627myNextion.setComponentText("t1", String(h));28delay(1000);там жже было а у себя не поставили
У меня такая же проблема, все работает пока не начинаю передавать данные на дисплей.
Когда идет передача на дисплей через 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); }