ich möchte eine Zeitschaltuhr betreiben. (Ich weiß da gibt es eine Menge Themen). Alleerdings möchte ich das die RTC (DS3231) regelmäßig von der Funkzeit synchronisiert wird. Dank eines im Netz gefundenen Sketches funktioniert dieses auch schon. Nun hab ich mir gedacht, ich nutze einfach die TimeAlarm Libraries und stelle Zeiten ein bei dem x-verschiedene Sachen zu verschiedenen Zeiten ausgeführt werden. Leider funktioniert das nicht und es schaltet gar nichts. Nach dem ich jetzt seit geraumer Zeit auf den Code starre und eine Menge gescheiterter Versuche unternommen habe, möchte ich euch nun um Hilfe bitten. Eventuell könnt ihr ja meinen Knoten lösen.
Das stimmt. Da hatte sich schon der erste Fehler eingeschlichen. Habe jetzt unter Setup ebenfalls Pin 12 als output deklariert ( pinMode(ledPin1, OUTPUT); ) .Aber das behebt den Fehler nicht. ledPin1 ist der der Zeitgessteuert schalten soll. ledPin ist quasi die Satusanzeige für den korrekten Empfang und das setzen der RTC mit dem Funkzeitsignal. Die LED leuchtet 45 Sekunden im Dauermodus sobald das richtige Signal empfangen wurde und die RTC gesetzt wurde. Bei Fehler leuchtet die LED im Viertelsekundentakt.
Hallo Danke für deine Unterstützung. Nach dem Hinweis das ich LEDPin nicht als Output deklariert habe, hab ich den Code nocheinmal überarbeitet. Die TimeAlarms Librarie habe ich rausgehauen. Jetzt funktioniert es genauso wie es soll. Es gibt eine "An-Zeit" und eine "Aus-Zeit" bei der alles wieder ausgeschaltet wird. Das ganze ist nicht sehr elegant aber meines Erachtens nach gut zu verstehen. Hier mein neuer Code mit mehr Kommentaren:
#include <DCF77.h>
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
#define DCF_PIN 2
#define DCF_INTERRUPT 0
time_t time;
DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT, false);
int ledPinStatusDCF = 13; //DCF77 Statusanzeige
int ledPin1 = 12 ; //Test Zwitschalter 1
//------Schalter 1 VOn Uhrzeit1 On bis Uhrzeit1 Off
int OnStunde1 = 11;
int OnMinute1 = 4;
int OffStunde1 = 11;
int OffMinute1 = 10;
//------Schalter 1 Vn Uhrzeit2 On bis Uhrzeit2 Off
int OnStunde2 = 11;
int OnMinute2 = 19;
int OffStunde2 = 11;
int OffMinute2 = 23;
//------
void setup() {
pinMode(ledPinStatusDCF, OUTPUT);
pinMode(ledPin1, OUTPUT);
Serial.begin(9600);
DCF.Start();
setSyncProvider(RTC.get);
}
void loop() {
time_t DCFtime = DCF.getTime();
if (DCFtime!=0) {
tmElements_t tm;
breakTime(DCFtime, tm);
if (RTC.write(tm)) {
Serial.println("RTC erfolgreich gesetzt!"); //DCF77 Empfang gut und RTC gesetzt -> LED leuchtet für 45 Sekunden
digitalClockDisplay(DCFtime);
digitalWrite(ledPinStatusDCF, HIGH);
delay(45000);
digitalWrite(ledPinStatusDCF, LOW);
} else {
delay(250);
}
} else {
digitalWrite(ledPinStatusDCF, HIGH); //Fehler bei DCF77 Empfang -> LED blinkt
delay(250);
digitalWrite(ledPinStatusDCF, LOW);
delay(250);
}
time_t t = now();
int aktminute=minute(t); //aktuelle Minute setzen
int akthour=hour(t); //aktuelle Stunde setzen
if ((akthour == OnStunde1)&&(aktminute==OnMinute1))
{
digitalWrite(ledPin1, HIGH);
}
if ((akthour = OffStunde1)&&(aktminute==OffMinute1))
{
digitalWrite(ledPin1, LOW);
}
if ((akthour == OnStunde2)&&(aktminute==OnMinute2))
{
digitalWrite(ledPin1, HIGH);
}
if ((akthour = OffStunde2)&&(aktminute==OffMinute2))
{
digitalWrite(ledPin1, LOW);
}
}
// Hilfsfunktion für serielle Ausgabe
void digitalClockDisplay(time_t _time){
tmElements_t tm;
breakTime(_time, tm);
Serial.println("");
Serial.print("Zeit: "); Serial.print(tm.Hour);
Serial.print(":"); printDigits(tm.Minute);
Serial.print(":"); printDigits(tm.Second);
Serial.print(" Datum: "); Serial.print(tm.Day);
Serial.print("."); Serial.print(tm.Month);
Serial.print("."); Serial.println(tm.Year+1970);
}
// Hilfsfunktion für Formatierung
void printDigits(int digits){
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
Wie könnte ich die "An-Zeiten" und die "Aus-Zeiten" schöner abfragen sowie die IF-Abfragen einfacher? Werde mich wohl mit Arrays richtig beschäftigen müssen, oder?