Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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)