Re: Zeitschaltuhr mit Serialzeit Kategorie: Programmierung (von ChristianS - 9.04.2010 10:25) | ||
Als Antwort auf Zeitschaltuhr mit Serialzeit von ChristianS - 8.04.2010 8:47 | ||
| ||
Hallo zusammen, @Andreas: danke für die Antworten, aber das mit dem Schalter ist nicht ganz korrekt. Wird das Licht über die Zeitschaltuhr eingeschaltet, so deaktiviert man mit dem ersten Druck die Zeitschaltuhr und das Licht schaltet ab. Nun funktioniert der Taster wie ein ganz normaler Taster und das Licht kann ein/bzw. ausgetastet werden. Die Schalterfunktion hat einen autoaus-Mechanismus, der über einen Parameter aktiviert wird. (siehe Code). Dieser Mechanismus sorgt dafür, dass der Schalter nach 7200s sich selber abschaltet und das schalter_busy zurücksetzt. Die Zeitschaltuhr bleibt dann jedoch deaktiviert und wird erst am nächsten Tag (ich mache das morgens um 4Uhr, damit ich keine Sommer-/Winterzeitumstellungsprobleme bekomme) wieder aktiviert und mit den neuen tagesaktuellen Zeiten bestückt. Wird der Taster nun au�erhalb der Zeitschaltuhrdaten betätigt, sagen wir mal mittags um 14:00Uhr, hat dies kein Einfluss auf die Zeitschaltuhrdaten und der Schalter/Taster arbeitet wie beschrieben mit eben dieser autoaus-Funktion. @nitraM ich habe jetzt mal DeinenCode eingebaut. Das funktioniert auch supergut, allerdings hat die Sache doch noch einen Haken: Die Einschaltzeit des Zeitschalters wird duch den Sonnenuntergang +offset bestimmt. (der offset ist notwendig, da es bei SU teilweise noch zu hell ist, der Effekt ist zur Winterzeit anders, als zur Sommerzeit, deshalb benutze ich zwei verschiedene Offsets). Wertags wird gegen 21:00Uhr die Beleuchtung abgeschaltet. Jetzt wird es aber irgendwann so sein, dass der SU+Offset nach 21:00Uhr liegt. Dann funktioniert meine Routine nicht mehr, da dann der Abschnitt. if gartenlicht_on > gartenlicht_off // Schaltzeit über 0:00Uhr hinaus greift. Der darf allerdings nur kommen, wenn nach 0:00Uhr abgeschaltet wird und das ist an speziellen Tagen der Fall. Ich nehme man an, das ich komplett umdenken muss und mir eine eigene Uhr baue, die nicht um 0:00Uhr mit der Serialzeit 0 beginnt, sondern morgens um 04:00Uhr, dann habe ich das Problem nicht. Und Ausschaltzeiten nach 03:00Uhr gibt es auch nicht. Das ist aber auch wieder von hinten durch die Brust... function Gartenlicht () { byte Licht_per_zeitschaltuhr_an; // Zwischenspeicher byte Licht_ein; Licht_per_zeitschaltuhr_an = 0; // Variable wird immer zu Beginn gelöscht Licht_ein=0; if gartenlicht_on > gartenlicht_off // Schaltzeit über 0:00Uhr hinaus { gartenlicht_duration = 86400 - gartenlicht_on + gartenlicht_off; // Gesamteinschaltzeit ermitteln if gartenlicht_duration >= gartenlicht_offset // nur weiter prüfen wenn min. Einschaltzeit erreicht { if timeserial >= gartenlicht_on or timeserial < gartenlicht_off // prüfen auf Uhrzeit "ein" => wichtig _oder_ ! { Licht_per_zeitschaltuhr_an = 1; // wenn die Bedingung erfüllt => merken! } } else //wenn gartenlicht_duration<gartenlicht_offset { gartenlicht_on=-1; gartenlicht_off=-1; } } else { gartenlicht_duration = gartenlicht_off - gartenlicht_on; // Gesamteinschaltzeit ermitteln if gartenlicht_duration >= gartenlicht_offset // nur weiter prüfen wenn min. Einschaltzeit erreicht { if timeserial >= gartenlicht_on and timeserial < gartenlicht_off // prüfen auf Uhrzeit "ein" => wichtig _und_ ! { Licht_per_zeitschaltuhr_an = 1; // wenn die Bedingung erfüllt => merken! } } else { gartenlicht_on=-1; gartenlicht_off=-1; } } if Licht_per_zeitschaltuhr_an == 1 or Schalter(4,1) { if schalter_busy[4] and Licht_per_zeitschaltuhr_an == 1 { gartenlicht_off=-1; //Ausschaltzeit löschen gartenlicht_on=-1; Licht_ein=1; schalter_busy[4]=0; schalter_flag[4]=0; } Licht_ein=1; } else Licht_ein=0; if Licht_ein==1 max7311.set(0,Relais7,1); else max7311.set(0,Relais7,0); } Gru�, Christian. | ||
Antwort schreiben Antworten: Re: Zeitschaltuhr mit Serialzeit (von Andreas - 12.04.2010 9:45) Re: Zeitschaltuhr mit Serialzeit (von nitraM - 9.04.2010 11:33) |