Re: Zeitschaltuhr mit Serialzeit Kategorie: Programmierung (von ChristianS - 8.04.2010 19:05) | |
Als Antwort auf Re: Zeitschaltuhr mit Serialzeit von nitraM - 8.04.2010 14:02
| |
> > Hallo, > > ich habe da offensichtlich einen Knoten im Kopf, vielleicht kann jemand helfen: > > > > Ich habe diverse Zeitschaltuhren programmiert. Dafür habe ich die 24h in 86400s eingeteilt. Jetzt > > möchte ich eine Beleuchtung um 21:00Uhr abends einschalten (75600) und um 22:00 Uhr(79200) > > wieder aus. Das ist auch kein Problem. > > > > if aktuellZeit>=75600 and timeserial <=79200 > > schalte_ein > > > > wenn ich nun aber das Licht nachts um 02:00Uhr ausschalten möchte, funktioniert meine Zeitschaltuhr > > nicht mehr...hat jemand eine Idee, wie man das elegant abfackeln kann? > > > > derzeit mache ich das so: > > ich gucke, ob die Ausschaltzeit kleiner ist als die Einschaltzeit, ist das der Fall, addiere ich 86400s > > auf die Ausschaltzeit, warte dann bis Mitternacht und ziehe die 86400 wieder ab. Das geht zwar, ist > > aber nicht sehr elegant, zumal ich mir dann andere Mechanismen verbaue: > > > > z.B. > > Die Einschaltzeit richtet sich nach dem Sonnenuntergang. Wenn nun der SU kurz vor der Ausschaltzeit > > liegt, dann würde die Beleuchtung nur sehr kurz eingeschaltet. Das ist Kappes. Deshalb fange ich das > > ab, indem ich eine Mindesteinschaltzeit von 20min. festlege, ansonsten bleibt alles dunkel. > > > > Es wäre schön, wenn jemand den Knoten im Kopf lösen könnte > > > > Gru� > > Christian > > > > > Hallo Christian > > wie wäre es so: > > > if tein > taus // Schaltzeit über 0:00Uhr hinaus > { einschaltzeit = 86400 - tein + taus; // Gesamteinschaltzeit ermitteln > if einschaltzeit >= min_einschaltzeit // nur weiter prüfen wenn min. Einschaltzeit erreicht > {if time >= tein or time < taus // prüfen auf Uhrzeit "ein" => wichtig _oder_ ! > { einschalten... > } > } > } > else > { einschaltzeit = taus - tein; // Gesamteinschaltzeit ermitteln > if einschaltzeit >= min_einschaltzeit // nur weiter prüfen wenn min. Einschaltzeit erreicht > {if time >= tein and time < taus // prüfen auf Uhrzeit "ein" => wichtig _und_ ! > { einschalten... > } > } > > > nitraM Hallo nitraM, danke für die Antwort, aber das kann ich so nicht machen. Ich darf nur an einer Stelle einschalten, sonst kriege ich das Ausschalten nicht hin. Es gibt da noch einen Taster, der die ganze Automatik bei der ersten Betätigung aushebelt, aber nur während der "Zeitschalter-ein"-Phasen. Ansonsten arbeitet der Taster wie ein Schalter mit einer auto-aus-Funktion nach zwei Stunden. Die setzt dann das "busy" wieder zurück und das Licht geht aus. Man muss das irgendwie mit eiener Anweisung hinkriegen: if(timeserial>=gartenlicht_on and timeserial<=gartenlicht_off) or Schalter(4,1) { if schalter_busy[4] and timeserial>=gartenlicht_on gartenlicht_off=-1; //Ausschaltzeit löschen max7311.set(0,Relais7,1); } else { max7311.set(0,Relais7,0); } Der Teil hier ist das, was unsauber ist, aber mir fällt nix Besseres ein. { int einschaltdauer; if gartenlicht_on > gartenlicht_off // Schaltzeit nach 0:00Uhr hinaus einschaltdauer = 86400 - gartenlicht_on + gartenlicht_off; else einschaltdauer = gartenlicht_off - gartenlicht_on; if einschaltdauer< gartenlicht_offset*2 //Einschaltzeit zu kurz { gartenlicht_off=-1; gartenlicht_on=-1; } else gartenlicht_on=su+gartenlicht_offset; //Einschaltzeit=Sonnenuntergang +Offset if gartenlicht_off < gartenlicht_on and !schalter_flag[4] // ...und Schalter war niemals an gartenlicht_off=gartenlicht_off+86400; //addiere 24h if midnight and gartenlicht_off > 86400 //siehe oben { midnight=0; gartenlicht_on=0; gartenlicht_off=gartenlicht_off-86400; } Danke und Gru�, Christian | |
Antwort schreiben Antworten: Re: Zeitschaltuhr mit Serialzeit (von nitraM - 8.04.2010 20:08) Re: Zeitschaltuhr mit Serialzeit (von ChristianS - 8.04.2010 21:05) |