ich habe obiges Display und nutze die nextion library V0.9.0 GitHub - itead/ITEADLIB_Arduino_Nextion
Anzeige tut genau das was sich soll 1. Schirm buttons gehen normal rückmeldung im serielle Monitor :
fortlaufen recvRetCommandFinished ok - alles schön
im 2. Schirm gehen die Buttons nur sporadisch rückmeldung im seriellen Monitor:
fortlaufen recvRetCommandFinished err - nach 2-3 mal drücken gehen die buttons zwar es gibt aber trozdem die Fehlermeldung habt ihr eine Idee was das sein könnte
#include <doxygen.h>
#include <NexButton.h>
#include <NexCheckbox.h>
#include <NexConfig.h>
#include <NexCrop.h>
#include <NexDualStateButton.h>
#include <NexGauge.h>
#include <NexGpio.h>
#include <NexHardware.h>
#include <NexHotspot.h>
#include <NexNumber.h>
#include <NexObject.h>
#include <NexPage.h>
#include <NexPicture.h>
#include <NexProgressBar.h>
#include <NexRadio.h>
#include <NexRtc.h>
#include <NexScrolltext.h>
#include <NexSlider.h>
#include <NexText.h>
#include <NexTimer.h>
#include <Nextion.h>
#include <NexTouch.h>
#include <NexUpload.h>
#include <NexVariable.h>
#include <NexWaveform.h>
#include "Arduino.h"
#include <DHT_U.h>
#include <DHT.h>
#define DHTPIN 3
#define DHTTYPE DHT22
DHT_Unified dht(DHTPIN, DHTTYPE);
// 1.Seite
NexPage Home = NexPage(0, 0, "Home");
NexButton bAuf = NexButton(0, 2, "bAuf");
NexButton bZu = NexButton(0, 6, "bZu");
NexButton bTemp = NexButton(0, 7, "bTemp");
NexText tZeit = NexText(0, 2, "tZeit");
NexText tTemp = NexText(0, 4, "tTemp");
NexText tStatus = NexText(0, 3, "tStatus");
//2.Seite
NexPage Temp = NexPage(1, 0, "Temp");
NexButton bHome = NexButton(1, 6, "bHome");
NexButton bHigh = NexButton(1, 7, "bHigh");
NexButton bLow = NexButton(1, 8, "bLow");
NexButton bPlus = NexButton(1, 9, "bPlus");
NexButton bMinus = NexButton(1, 10, "bMinus");
NexNumber nHigh = NexNumber(1, 4, "nHigh");
NexNumber nLow = NexNumber(1, 5, "nLow");
#include <Adafruit_Sensor.h>
#include <TimeLib.h>
#include <Ethernet2.h>
#include <EthernetUdp2.h>
#include <SPI.h>
char buffer[10] = {0};
char buffer_temp[10] = {0};
char buffer_hour[10] = {0};
char buffer_temperature[10] = {0};
NexTouch *nex_Listen_List[] =
{
&bAuf, &bZu, &bTemp, &bHome, &bHigh, &bLow, &bPlus, &bMinus, NULL
};
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// NTP Servers:
IPAddress timeServer(132, 163, 4, 101); // time-a.timefreq.bldrdoc.gov
const int timeZone = 1; // Central European Time
EthernetUDP Udp;
unsigned int localPort = 8888; // local port to listen for UDP packets
unsigned long prev = 0;
int myStunde, myMinute, mySekunde, myJahr, myTag, myMonat, MStatus, REED, TStatus;
int F_Auf = 18;
int F_Zu = 10;
#define Relais1Pin 5
#define Relais2Pin 6
#define ReedPin 2
const unsigned long Motor = 6000; // 60 sekunden für Motorlauf
const unsigned long Cool = 2000;
void setup()
{
// Serial.begin(9000);
MStatus = 0;
TStatus = 0;
pinMode(Relais1Pin, OUTPUT);
pinMode(Relais2Pin, OUTPUT);
pinMode(ReedPin, INPUT_PULLUP);
digitalWrite(Relais1Pin, HIGH);
digitalWrite(Relais2Pin, HIGH);
dht.begin();
nexInit();
if (Ethernet.begin(mac) == 0) {
// no point in carrying on, so do nothing forevermore:
while (1) {
Serial.println("Failed to configure Ethernet using DHCP");
delay(10000);
}
}
Udp.begin(localPort);
Serial.println("waiting for sync");
setSyncProvider(getNtpTime);
setSyncInterval(3600); // jede Stunde wiederholen
bAuf.attachPop(bAufPopCallback, &bAuf);
bZu.attachPop(bZuPopCallback, &bZu);
bTemp.attachPop(bTempPopCallback, &bTemp);
bHome.attachPop(bHomePopCallback, &bHome);
bHigh.attachPop(bHighPopCallback, &bHigh);
bLow.attachPop(bLowPopCallback, &bLow);
bPlus.attachPop(bPlusPopCallback, &bPlus);
bMinus.attachPop(bMinusPopCallback, &bMinus);
}
time_t prevDisplay = 0; // when the digital clock was displayed
void loop()
{
sensors_event_t event;
dht.temperature().getEvent(&event);
if (timeStatus() != timeNotSet) {
if (now() != prevDisplay) { //update the display only if time has changed
prevDisplay = now();
digitalClockDisplay();
}
}
REED = digitalRead(ReedPin);
if (REED == HIGH) tStatus.setText("Fenster offen");
else tStatus.setText("");
dtostrf(event.temperature, 6, 2, buffer_temperature);
tTemp.setText(buffer_temperature);
if (myStunde < 20 && myStunde > 7) {
if (REED == LOW && event.temperature > F_Auf && MStatus == 0)
{
MStatus = 2;
digitalWrite(Relais1Pin, LOW);
if ((millis() - prev) >= Motor && MStatus == 2 ) {
prev = millis();
MStatus = 1;
Motor_halt();
}
if (REED == HIGH && event.temperature < F_Zu && MStatus == 0)
{
MStatus = 2;
digitalWrite(Relais2Pin, LOW);
if ((millis() - prev) >= Motor && MStatus == 2 ) {
prev = millis();
MStatus = 1;
Motor_halt();
}
if ((millis() - prev) >= Cool && MStatus == 1) {
prev = millis();
MStatus = 0;
}
}
}
nexLoop(nex_Listen_List);
delay(500);
}
}
void digitalClockDisplay() {
// digital clock display of the time
myStunde = hour();
itoa(myStunde, buffer, 10);
strcat(buffer, ":");
myMinute = minute();
itoa(myMinute, buffer_temp, 10);
if (myMinute < 10)
{
strcat(buffer, "0");
}
strcat(buffer, buffer_temp);
strcat(buffer, ":");
mySekunde = second();
itoa(mySekunde, buffer_temp, 10);
if (mySekunde < 10) strcat(buffer, "0");
strcat(buffer, buffer_temp);
tZeit.setText(buffer);
myTag = day();
myMonat = month();
myJahr = year();
}
}
void Motor_halt()
{
digitalWrite(Relais1Pin, HIGH);
digitalWrite(Relais2Pin, HIGH);
}
void bAufPopCallback(void *ptr)
{
Serial.println ("bAuf");
digitalWrite(Relais1Pin, LOW);
MStatus = 2;
}
void bZuPopCallback(void *ptr)
{
Serial.println ("bZu");
digitalWrite(Relais2Pin, LOW);
MStatus = 2;
}
void bTempPopCallback(void *ptr)
{
Serial.println ("bTemp");
Temp.show();
nHigh.setValue(F_Auf);
nLow.setValue(F_Zu);
delay(500);
}
void bHomePopCallback(void *ptr)
{
Serial.println ("bHome");
bLow.setText("Low");
bHigh.setText("High");
TStatus = 0;
Home.show();
}
void bHighPopCallback(void *ptr)
{
bHigh.setText("High *");
bLow.setText("Low");
Serial.println ("bHigh");
TStatus = 1;
}
void bLowPopCallback(void *ptr)
{
bLow.setText("Low *");
bHigh.setText("High");
Serial.println ("bPlus");
TStatus = 2;
Serial.println("Low");
}
void bPlusPopCallback(void *ptr)
{
Serial.println ("bPlus");
if (TStatus == 1) F_Auf++;
else F_Zu++;
nHigh.setValue(F_Auf);
nLow.setValue(F_Zu);
}
void bMinusPopCallback(void *ptr)
{
Serial.println ("bMinus");
if (TStatus == 1) F_Auf--;
else F_Zu-- ;
nHigh.setValue(F_Auf);
nLow.setValue(F_Zu);
}