der komplette code
#include "DCF77.h"
#include <TimeLib.h>
#define DCF_PIN 2
#define DCF_INTERRUPT 0
#define POWER 7
time_t time;
DCF77 DCF = DCF77(DCF_PIN, DCF_INTERRUPT);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Nextion.h>
#include <RTClib.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 4
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT_Unified dht(DHTPIN, DHTTYPE);
#include <RTClib.h>
RTC_DS3231 rtc;
unsigned long prev = 0;
const unsigned long Motor = 30000; // 30 sekunden für Motorlauf
const unsigned long Cool = 10000;
int ReedPin = 8;
int Relais1pin = 2;
int Relais2pin = 3;
int myStunde, myMinute, mySekunde, Temp, Uzeiger ;
int F_auf = 15; // Temperatur zum öffnen
int F_zu = 10; // Temperatur zum Schliessen
int Timer = 0;
int Reed = HIGH;
NexPage page0 = NexPage(0, 0, "page0");
NexPage page1 = NexPage(1, 0, "page1");
NexPage page2 = NexPage(2, 0, "page2");
NexPage page3 = NexPage(3, 0, "page3");
//-----------------------------------------
NexButton bSetup = NexButton(0, 2, "bSetup");
NexButton bAuf = NexButton(0, 3, "bAuf");
NexButton bZu = NexButton(0, 4, "bZu");
NexButton bBackE = NexButton(3, 2, "bBackE");
NexButton bUhr = NexButton(3, 3, "bUhr");
NexButton bTemp = NexButton(3, 4, "bTemp");
NexButton bStunde = NexButton(1, 5, "bStunde");
NexButton bMinute = NexButton(1, 6, "bMinute");
NexButton bSekunde = NexButton(1, 7, "bSekunde");
NexButton bBack1 = NexButton(1, 2, "bBack1");
NexButton bPlus1 = NexButton(1, 3, "bPlus1");
NexButton bMinus1 = NexButton(1, 4, "bMinus1");
NexButton bTHigh = NexButton(2, 5, "bTHigh");
NexButton bTLow = NexButton(2, 6, "bTLow");
NexButton bBack3 = NexButton(2, 2, "bBack3");
NexButton bPlus2 = NexButton(2, 3, "bPlus2");
NexButton bMinus2 = NexButton(2, 4, "bMinus2");
//----------------------------------------------
NexNumber nexStunde = NexNumber(0, 9, "nexStunde");
NexNumber nexMinute = NexNumber(0, 10, "nexMinute");
NexNumber nexSekunde = NexNumber(0, 11, "nexSekunde");
NexNumber nexTemp = NexNumber(0, 12, "nexTemp");
NexNumber nexThigh = NexNumber(2, 7, "nexThigh");
NexNumber nexTlow = NexNumber(2, 8, "nexTlow");
char buffer[10] = {0};
NexTouch *nex_Listen_List[] =
{
&bSetup,
&bAuf,
&bZu,
&bBackE,
&bUhr,
&bTemp,
&bStunde,
&bMinute,
&bSekunde,
&bBack1,
&bPlus1,
&bMinus1,
&bTHigh,
&bTLow,
&bBack3,
&bPlus2,
&bMinus2,
&page0,
&page1,
&page2,
&page3,
NULL
};
void motor_aus () {
digitalWrite (Relais1pin, 1);
digitalWrite (Relais2pin, 1);
}
void motor_links() {
digitalWrite (Relais1pin, 0);
digitalWrite (Relais2pin, 1);
Serial.println("schliessen");
Serial.println(Relais1pin, Relais2pin);
}
void motor_rechts () {
digitalWrite (Relais1pin, 1);
digitalWrite (Relais2pin, 0);
Serial.println("oeffnen");
}
void showTime() {
char h[20] = {0};
char m[20] = {0};
char s[20] = {0};
DateTime now = rtc.now();
myStunde = now.hour();
myMinute = now.minute();
mySekunde = now.second();
itoa(myStunde, h, 10);
nexStunde.setValue(myStunde);
itoa(myMinute, m, 10);
nexMinute.setValue(myMinute);
itoa(mySekunde, s, 10);
nexSekunde.setValue(mySekunde);
}
void showTemp() {
// Get temperature event and print its value.
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println("Error reading temperature!");
}
else {
Serial.print("Temperature: ");
Serial.print(event.temperature);
Serial.println(" *C");
Temp = (event.temperature);
}
nexTemp.setValue(Temp);
}
void bSetupPopCallback(void *ptr) {
page3.show();
}
void bBackECallback(void *ptr) {
page0.show();
}
//=================== Uhr stellen =========
void bUhrPopCallback(void *ptr) { // Maske wird aufgerufen
Funk();
}
//========= Ende Uhr stellen
void bTempPopCallback(void *ptr) {
page2.show();
nexThigh.setValue(F_auf);
nexTlow.setValue(F_zu);
}
void bTHighPopCallback(void *ptr) {
Uzeiger = 1;
}
void bTLowPopCallback(void *ptr) {
Uzeiger = 2;
}
void bPlus2PopCallback(void *ptr) {
if (Uzeiger == 1) F_auf++;
if (Uzeiger == 2) F_zu++ ;
nexThigh.setValue(F_auf);
nexTlow.setValue(F_zu);
}
void bMinus2PopCallback(void *ptr) {
if (Uzeiger == 1) F_auf--;
if (Uzeiger == 2) F_zu-- ;
nexThigh.setValue(F_auf);
nexTlow.setValue(F_zu);
}
void bBack3PopCallback(void *ptr) {
Uzeiger = 0;
page0.show();
}
void Funk() {
time_t DCFtime = DCF.getTime();
if (DCFtime != 0) {
setTime(DCFtime);
rtc.adjust(DateTime(year(), month(), day(), hour(), minute(), second()));
}
}
void setup() {
pinMode(7, OUTPUT);
digitalWrite(7, LOW);
DCF.Start();
dht.begin();
rtc.begin();
Uzeiger = 0;
bSetup.attachPop(bSetupPopCallback, &bSetup);
bUhr.attachPop(bUhrPopCallback, &bUhr);
bSekunde.attachPop(bSekundePopCallback, &bSekunde);
bTemp.attachPop(bTempPopCallback, &bTemp);
bBackE.attachPop(bBackECallback, &bBackE);
bBack1.attachPop(bBack1PopCallback, &bBack1);
bStunde.attachPop(bStundePopCallback, &bStunde);
bMinute.attachPop(bMinutePopCallback, &bMinute);
bMinus1.attachPop(bMinus1PopCallback, &bMinus1);
bPlus1.attachPop(bPlus1PopCallback, &bPlus1);
bTHigh.attachPop(bTHighPopCallback, &bTHigh);
bTLow.attachPop(bTLowPopCallback, &bTLow);
bMinus2.attachPop(bMinus2PopCallback, &bMinus1);
bPlus2.attachPop(bPlus2PopCallback, &bPlus2);
bBack3.attachPop(bBack3PopCallback, &bBack3);
pinMode (ReedPin, INPUT_PULLUP);
pinMode (Relais1pin, OUTPUT); // Relais als Output
pinMode (Relais2pin, OUTPUT); // Relais als Output
digitalWrite (Relais1pin, HIGH);
digitalWrite (Relais2pin, HIGH);
// Initialize device.
Serial.println("DHTxx Unified Sensor Example");
// Print temperature sensor details.
sensor_t sensor;
dht.temperature().getSensor(&sensor);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
Funk();
}
nexInit();
}
void loop() {
nexLoop(nex_Listen_List);
Reed = digitalRead(ReedPin);
showTime();
showTemp();
if (Temp <= F_zu && Reed == HIGH) {
motor_aus();
motor_links();
Timer = 1;
}
if (Temp >= F_auf && Reed == LOW) {
Serial.println ("oeffnen");
motor_aus();
motor_rechts();
Timer = 1;
}
if (Timer == 1 && (millis() - prev) >= Motor) {
prev = millis();
motor_aus();
Timer = 2;
}
if (Timer == 2 && (millis() - prev) >= Cool) {
prev = millis();
Timer = 0;
}
Serial.print("Reed=");
Serial.println(Reed);
Serial.print("Timer =");
Serial.println(Timer);
Serial.println("------------------------------------------------------");
delay(1000);
}