Hallo,
ich bräuchte ein bissl Hilfe zum einfacheren programmieren des nachfolgenden Sketches.
Realisiert wurde mit einem
- ArduinoUno
-LCD 16/2
-DS1307RTC - 4-fach Relais Shield
eine einfache Terra-Steuerung.
Es funktioniert alles mehr oder weniger gut, mal gehts auch garnicht.
Elektrisch und elektronisch ist alles richtig angeschlossen es geht einfach nur ums programmieren.
Ich hätte gern folgendes einfacher und übersichtlicher, eventuell mit Variablen, programmiert.
Relais_1 08:00 Uhr AN
Relais_1 19:30 Uhr AUS
Relais_2 08:05 Uhr AN
Relais_2 19:35 Uhr AUS
Relais_3 08:10 Uhr AN
Relais_3 19:40 Uhr AUS
Relais_4 08:30 Uhr für 25 Sekunden AN
Relay_4 20:00 Uhr für 25 Sekunden AN die übrige Zeit ist Relais_4 AUS
Hier mein bisheriger CODE.....
#include <LiquidCrystal.h>
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
LiquidCrystal lcd(9, 8, 5, 4, 3, 2);
#define RELAY_ON 0
#define RELAY_OFF 1
#define Relay_1 10 // 50W Spot
#define Relay_2 11 // Tageslicht 150W
#define Relay_3 12 // LuckyReptile 70W
#define Relay_4 13 // Beregnungsanlage
void setup()
{
Serial.begin(9600); // initialisieren serielle Kommunikation
setSyncProvider(RTC.get); // holen Zeit von RTC(Uhr)
// Nur zur Kontrolle:
if(timeStatus()!= timeSet) // wenn Status geaendert
{
Serial.println("Synchronisation fehlgeschlagen"); // bei Fehler
}
else // sonst ...
{
Serial.println("Synchronisation erfolgreich"); // alles ok
}
lcd.begin(16, 2);
digitalWrite(Relay_1, RELAY_OFF);
digitalWrite(Relay_2, RELAY_OFF);
digitalWrite(Relay_3, RELAY_OFF);
digitalWrite(Relay_4, RELAY_OFF);
pinMode(Relay_1, OUTPUT);
pinMode(Relay_2, OUTPUT);
pinMode(Relay_3, OUTPUT);
pinMode(Relay_4, OUTPUT);
}
void loop()
{
digitalUhrAnzeige();
delay(500);
Relais1();
Relais2();
Relais3();
Relais4();
}
void digitalUhrAnzeige()
{
// digitale Anzeige der Zeit
lcd.setCursor(0, 0); // positionieren LCD-Cursor, 1. Zeile, 1. Spalte
printZiffernGenulltOhnePunkt(hour()); // rufen Subroutine auf
printZiffernGenulltmitPunkt(minute()); // rufen Subroutine auf
//printZiffernGenulltmitPunkt(second()); // rufen Subroutine auf
Serial.print(" "); // fuegen Freizeichen ein
lcd.print(" "); // fuegen Freizeichen ein
lcd.setCursor(0, 1);
printZiffernGenulltOhnePunkt(day()); // rufen Subroutine auf
Serial.print("."); // fuegen Freizeichen ein
lcd.print("."); // fuegen Freizeichen ein
printZiffernGenulltOhnePunkt(month()); // rufen Subroutine auf
Serial.print("."); // fuegen Freizeichen ein
Serial.println(year()); // Zeilenvorschub
lcd.print(".");
printZiffernGenulltOhnePunkt(year());
}
void printZiffernGenulltOhnePunkt(int zahl) // definieren Subroutine
{
// verschoenern Anzeige, indem wir ...
if(zahl < 10) // wenn kleiner als 10 ...
{
Serial.print(""); // fuehrende 0 einfuegen
lcd.print(""); // fuehrende 0 einfuegen
}
Serial.print(zahl); // Ausgabe auf serieller Konsole
lcd.print(zahl); // Ausgabe auf LCD
}
void printZiffernGenulltmitPunkt(int zahl) // definieren Subroutine
{
// verschoenern Anzeige, indem wir ...
Serial.print(":"); // trennende ":" einfuegen
lcd.print(":"); // trennende ":" einfuegen
if(zahl < 10) // wenn kleiner als 10 ...
{
Serial.print('0'); // fuehrende 0 einfuegen
lcd.print('0');
}
Serial.print(zahl); // Ausgabe auf serieller Konsole
lcd.print(zahl);
}
void Relais1() { // 50W Spot
if((hour()>=8 && minute()>=0) && (hour()<=19 && minute()<=30))
{
digitalWrite(Relay_1, RELAY_ON);
}
else
{
digitalWrite(Relay_1, RELAY_OFF);
}
}
void Relais2() { // Tageslicht 150W
if((hour()>=8 && minute()>=5) && (hour()<=19 && minute()<=35))
{
digitalWrite(Relay_2, RELAY_ON);
}
else
{
digitalWrite(Relay_2, RELAY_OFF);
}
}
void Relais3() { // LuckyReptile 70W
if((hour()>=8 && minute()>=10) && (hour()<=19 && minute()<=40))
{
digitalWrite(Relay_3, RELAY_ON);
}
else
{
digitalWrite(Relay_3, RELAY_OFF);
}
}
void Relais4() { //Beregnungsanlage
if(hour()==8 && minute()==30)
{
digitalWrite(Relay_4, RELAY_ON);
delay(25000);
digitalWrite(Relay_4, RELAY_OFF);
}
else
{
digitalWrite(Relay_4, RELAY_OFF);
}
if(hour()==20 && minute()==00)
{
digitalWrite(Relay_4, RELAY_ON);
delay(25000);
digitalWrite(Relay_4, RELAY_OFF);
}
else
{
digitalWrite(Relay_4, RELAY_OFF);
}
}