Super dankeschön, geht ja echt schnell:)
hier die Relais:
https://www.reichelt.de/entwicklerboards-relais-modul-16-channel-12-v-debo-relais-16ch-p282567.html?CCOUNTRY=445&LANGUAGE=de
// ***************************************************************
// Rolladen Steuerung
// RTC DS3231 + LCD 2004
// Arduino Mega2560
// ***************************************************************
// Libs
// ***************************************************************
#include <OneWire.h>
#include <DallasTemperature.h>
//DS18b20 connected to A1
#define DS18B20 A1
OneWire ourWire(DS18B20);
DallasTemperature sensors(&ourWire);
# include <SimpleDHT.h>
int SENSOR_DHT22 = A2;
// Sensor einen Namen zuweisen (dht22)
SimpleDHT22 dht22(SENSOR_DHT22);
# include <RTClib.h>
# include <LiquidCrystal_I2C.h>
// Name des RTC-Moduls
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 20, 4);
// EINSTELLUNGEN +++++++++++++++++++++++++++++++++++++++++++++++++
// Einstellungen: Schaltbedingungen ------------------------------
// Und_Oder = 1 ==> ODER Verknüpfung
// Und_Oder = 2 ==> UND Verknüpfung
int Und_Oder = 2;
// Einstellungen Schaltpunkt 1 Hochfahren ------------------------
int Schwelle_1 = 300; // Wert analog am A0
int Stunden_1 = 7; // Uhrzeit Stunden
int Minuten_1 = 10; // Uhrzeit Minuten
// Einstellungen Schaltpunkt 2 Runterfahren ----------------------
int Schwelle_2 = 400; // Wert analog am A0
int Stunden_2 = 7; // Uhrzeit Stunden
int Minuten_2 = 11; // Uhrzeit Minuten
// Einstellungen Relais-Schaltdauer in Millisekunden -------------
int Relais_Zeit = 5000;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
String Ausgabe;
bool Doppelpunkt_Takter = false;
unsigned long MillisAktuell = 0;
unsigned long Relais_Millis = 0;
int Schalter = 53;
//für den Handbetrieb
int S1 =22; // Handschalter Rolladen 1 hoch
int S2 =23; // Handschalter Rolladen 1 runter
int S3 =24; // Handschalter Rolladen 2 hoch
int S4 =25; // Handschalter Rolladen 2 runter
int S5 =26; // Handschalter Rolladen 3 hoch
int S6 =27; // Handschalter Rolladen 3 runter
int S7 =28; // Handschalter Leinwand weiss hoch
int S8 =29; // Handschalter Leinwand weiss runter
int S9 =30; // Handschalter Leinwand schwarz hoch
int S10 =31; // Handschalter Leinwand schwarz runter
int S11 =32; // alle Rolladen hoch
int S12 =33; // alle Rolladen runter
int S13 =34; // Leinwand 16:9
int S14 =35; // Leinwand 21:9
int S15 =36; // Leinwände hoch (Kino Ende)
// Relais
int KF1 =2; // Rolladen 1 hoch
int KF2 =3; // Rolladen 1 runter
int KF3 =4; // Rolladen 2 hoch
int KF4 =5; // Rolladen 2 runter
int KF5 =6; // Rolladen 3 hoch
int KF6 =7; // Rolladen 3 runter
int KF7 =8; // Leinwand weiss hoch
int KF8 =9; // Leinwand weiss runter
int KF9 =10; // Leinwand schwarz hoch
int KF10 =11; // Leinwand schwarz runter
// Auto
int Auto_hoch[] = { KF1, KF3, KF5 };
int Auto_runter[] = { KF2, KF4, KF6 };
int Helligkeitssensor = A0;
int Eingangsspannung;
int Schaltpunktliste_1 [] = {0,0,0,0};
int Schaltpunktliste_2 [] = {0,0,0,0};
// Funktion Status -----------------------------------------------
int Status (int Liste[]=3) {
int Wert = 0;
if ((Liste [0] == 1) or (Liste [1] == 1)) {
Liste [2] = 1; }
if (((Liste [0] + Liste [1]) == 2) && (Und_Oder == 2)) {
Liste [2] = 2; }
return Wert = Liste [2]; }
// SETUP ---------------------------------------------------------
const int Potentiometer = A0; //Potentiometer
int val = 0;
//const int Aussentemp = A1; //18B20
//int atemp = 0;
String Datum_Uhrzeit_Aktuell;
void setup()
{
//start reading
sensors.begin();
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
rtc.begin();
// LCD initialisieren
lcd.init();
lcd.backlight();
MillisAktuell = Relais_Millis = millis();
pinMode(KF1, OUTPUT);
pinMode(KF2, OUTPUT);
pinMode(KF3, OUTPUT);
pinMode(KF4, OUTPUT);
pinMode(KF5, OUTPUT);
pinMode(KF6, OUTPUT);
pinMode(KF7, OUTPUT);
pinMode(KF8, OUTPUT);
pinMode(KF9, OUTPUT);
pinMode(KF10, OUTPUT);
pinMode(Schalter, INPUT_PULLUP);
pinMode(S1, INPUT_PULLUP);
pinMode(S2, INPUT_PULLUP);
pinMode(S3, INPUT_PULLUP);
pinMode(S4, INPUT_PULLUP);
pinMode(S5, INPUT_PULLUP);
pinMode(S6, INPUT_PULLUP);
pinMode(S7, INPUT_PULLUP);
pinMode(S8, INPUT_PULLUP);
pinMode(S9, INPUT_PULLUP);
pinMode(S10, INPUT_PULLUP);
pinMode(S11, INPUT_PULLUP);
pinMode(S12, INPUT_PULLUP);
pinMode(S13, INPUT_PULLUP);
pinMode(S14, INPUT_PULLUP);
pinMode(S15, INPUT_PULLUP);
// Einstellungen aktuelle Zeit +++++++++++++++++++++++++++++++++++
// Kommentar-Markierung // entfernen, Zeit einstellen:
// (Jahr,Monat,Tag,Stunde,Minute,Sekunde) und übertragen.
// Anschließend mit // als Kommentar markieren und wieder übertragen.
// keine führende 0 setzen
rtc.adjust(DateTime(2021, 12, 15, 7, 9, 55));
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
// HAUPTPROGRAMM -------------------------------------------------
void loop()
{
// Zeit auslesen und anzeigen ----------------------------------
// Anzeige LCD
String Stunde, Minute;
// aktuelle Zeit lesen
DateTime aktuell = rtc.now();
Ausgabe = String(aktuell.hour());
if (aktuell.minute() < 10) {
Ausgabe = Ausgabe + "0"; }
Ausgabe = Ausgabe + String(aktuell.minute())+ String(aktuell.second());
Serial.println (" ");
Serial.println ("Zeit");
Serial.print (Ausgabe);
Serial.println (" ");
Serial.println ("Helligkeitssensor");
Serial.print (val);
Serial.println (" ");
Serial.print("Aussentemperatur (°C): ");
Serial.println (sensors.getTempCByIndex(0)); //für Analog (geht aber nicht) da 1Wire Digital signal(atemp);
Eingangsspannung = analogRead (Helligkeitssensor);
if ((aktuell.hour() == Stunden_1) && (aktuell.minute() == Minuten_1)) {
Schaltpunktliste_1 [0] = 1; }
if (Eingangsspannung < Schwelle_1) {
Schaltpunktliste_1 [1] = 1; }
// Schaltpunkt 1 ------------------------------------------------
if ((Status (Schaltpunktliste_1) == Und_Oder) && (Schaltpunktliste_1 [3] == 0)) {
Schaltpunktliste_1 [3] = 1;
digitalWrite (Auto_hoch, HIGH);
Relais_Millis = millis(); }
if ((Schaltpunktliste_1 [3] == 1) && ((Relais_Millis + Relais_Zeit) < millis())) {
Schaltpunktliste_1 [3] = 2;
digitalWrite (Auto_hoch, LOW);
for (int i=0; i<4; i++) {
Schaltpunktliste_2 [i] = 0; } }
// Schaltpunkt 2 ------------------------------------------------
if ((aktuell.hour() == Stunden_2) && (aktuell.minute() == Minuten_2)) {
Schaltpunktliste_2 [0] = 1; }
if (Eingangsspannung > Schwelle_2) {
Schaltpunktliste_2 [1] = 1; }
if ((Status (Schaltpunktliste_2) == Und_Oder) && (Schaltpunktliste_2 [3] == 0)) {
Schaltpunktliste_2 [3] = 1;
digitalWrite (Auto_runter, HIGH);
Relais_Millis = millis(); }
if ((Schaltpunktliste_2 [3] == 1) && ((Relais_Millis + Relais_Zeit) < millis())) {
Schaltpunktliste_2 [3] = 2;
digitalWrite (Auto_runter, LOW);
for (int i=0; i<4; i++) {
Schaltpunktliste_1 [i] = 0; } }
// Zeit per Hand rücksetzen
if (digitalRead (53) == LOW) {rtc.adjust(DateTime(2021, 12, 15, 7, 9, 55));}
//---------------------------------- Analogwert auf LCD anzeigen
// lcd.setCursor(8,0);
val = analogRead(Potentiometer);
// if (val<1000) lcd.print(' ');
// if (val<100) lcd.print(' ');
// if (val<10) lcd.print(' ');
// lcd.print(val);
//----------------------------------
//atemp = analogRead(Aussentemp);
float Temperatur;
float Luftfeuchtigkeit;
// Daten lesen
dht22.read2(&Temperatur, &Luftfeuchtigkeit, NULL);
// . duch , ersetzen
String AnzeigeTemperatur = String(Temperatur);
AnzeigeTemperatur.replace(".", ",");
String AnzeigeLuftfeuchtigkeit = String(Luftfeuchtigkeit);
AnzeigeLuftfeuchtigkeit.replace(".", ",");
// Anzeige LCD
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Temp.: ");
lcd.setCursor(6, 1);
lcd.print(AnzeigeTemperatur + " C");
lcd.setCursor(0, 2);
lcd.print("Luftf.: ");
lcd.setCursor(8, 2);
lcd.print(AnzeigeLuftfeuchtigkeit + " %");
// Wochentag, Datum und Zeit anzeigen
lcd.setCursor(0, 0);
/*
Wochentag anzeigen
0 = Sonntag
1 = Montag
...
6 = Samstag
*/
switch (aktuell.dayOfTheWeek())
{
case 0:
lcd.print("So");
break;
case 1:
lcd.print("Mo");
break;
case 2:
lcd.print("Di");
break;
case 3:
lcd.print("Mi");
break;
case 4:
lcd.print("Do");
break;
case 5:
lcd.print("Fr");
break;
case 6:
lcd.print("Sa");
break;
}
lcd.setCursor(3, 0);
lcd.print(aktuell.day());
lcd.print(".");
switch (aktuell.month())
{
case 1:
lcd.print("1");
break;
case 2:
lcd.print("2");
break;
case 3:
lcd.print("3");
break;
case 4:
lcd.print("4");
break;
case 5:
lcd.print("5");
break;
case 6:
lcd.print("6");
break;
case 7:
lcd.print("7");
break;
case 8:
lcd.print("8");
break;
case 9:
lcd.print("9");
break;
case 10:
lcd.print("10");
break;
case 11:
lcd.print("11");
break;
case 12:
lcd.print("12");
break;
}
lcd.print(".");
lcd.print(aktuell.year());
lcd.setCursor(15, 0);
// wenn Stunden < 10 -> führende 0 setzen
if (aktuell.hour() < 10) lcd.print("0");
lcd.print(aktuell.hour());
lcd.print(':');
// wenn Minuten < 10 -> führende 0 setzen
if (aktuell.minute() < 10) lcd.print("0");
lcd.print(aktuell.minute());
lcd.setCursor(0, 3);
lcd.print("Aussentemp.:" );
//read temperature and output via LCD
sensors.requestTemperatures();
lcd.setCursor(12,3);
lcd.print(sensors.getTempCByIndex(0));
lcd.setCursor(17,3);
lcd.print( " C" );
// 60 Sekunden Pause
delay(2000);
}
// **************************************************************
Grüße
Michael