Forum: Mikrocontroller und Digitale Elektronik Zeitschaltuhr


von Gary (Gast)


Lesenswert?

Hallo Forum !

ich Bastle mir gerade mit einem Mega8 und DS1307 eine Zeitschaltuhr für 
meine Fische :)

Das mit einschalten und ausschalten funktioniert soweit super! Aber ich 
hab das Problem dass die Software nur zur exakten Zeit schaltet 
(06:00:00) . Wie kann ich es machen das auch zwischen der Zeit 
geschaltet wird --> 6Uhr ein  14Uhr , wenn das Gerät mit Strom versorgt 
wird soll es berechnen können das es zwischen der Zeit ist und 
einschalten muss.  Kann man die Zeit auf eine Gesamtsumme berechnen so 
wie Excel ? Wie berechnet Excel das?


danke!

von ??????????? (Gast)


Lesenswert?

Was willst du? Beschreib das mal in klarem Deutsch.

von Gary (Gast)


Lesenswert?

ich möchte gerne das die Software erkennt (nach Stromausfall) dass die 
Zeit(aktuell) in der Prog.Zeit (Von-Bis) ist und auch einschaltet. Nicht 
nur an fixen Punkten/Zeiten

so hab ich es jetzt-->

//Einschalten
if (time_hh==0x06 && time_mm==0x00 && time_ss==0x00)
    {licht==1;}

//Ausschalten
if (time_hh==0x08 && time_mm==0x00 && time_ss==0x00)
    {licht==0;}

von heinzhorst (Gast)


Lesenswert?

Gary schrieb:
> eine Zeitschaltuhr für
> meine Fische :)

12:45 Uhr Fisch ein.
18:30 Uhr Fisch aus.

:)

Wird Zeit, das Wochenende ist.

von Karl H. (kbuchegg)


Lesenswert?

Gary schrieb:
> ich möchte gerne das die Software erkennt (nach Stromausfall) dass die
> Zeit(aktuell) in der Prog.Zeit (Von-Bis) ist und auch einschaltet. Nicht
> nur an fixen Punkten/Zeiten

Wenn die aktuelle Uhrzeit hinter der Einschaltzeit liegt, aber vor der 
Ausschaltzeit, soll deine Lampe brennen.

>
> so hab ich es jetzt-->
>
> //Einschalten
> if (time_hh==0x06 && time_mm==0x00 && time_ss==0x00)
>     {licht==1;}

damit fragst du ab, ob ein Zeitpunkt vorliegt.
Du willst aber wissen, ob die aktuelle Zeit GRÖSSER/GLEICH als die 
Einschaltzeit und KLEINER/GLEICH als die Ausschaltzeit ist. Denn du 
willst wissen, ob die gerade aktuelle Uhrzeit im Zeitintervall liegt in 
dem definitionsgemäss deine Aquariumbeleuchtung brennen soll.

Hinweis: Das ganze vereinfacht sich, wenn man nicht in Stunden und 
Minuten rechnet, sondern in Minuten seit Mitternacht. Dann hat man 
einfach ein paar Zahlenwerte, die man einfach vergleichen kann und muss 
nicht auf Stunden/Minuten Sonderfälle abfragen. Und die Sekunden kann 
man wohl getrost ignorieren.


Machst du doch im realen Leben auch nicht anders.
Wenn es heißt: Du mußt zwischen 9:35 und 14:28 deine Mittagspause nehmen 
und es ist nach einem Blick auf die Uhr 11:28, kannst du dann deine 
Mittagspause nehmen?
Ja, kannst du. Denn 11 Uhr ist größer als 9 Uhr und kleiner als 14 Uhr.
Also liegst die aktuelle Zeit im zugelassenen Intervall. In deinem Fall 
brennen dann eben die Lampen.

Etwas weniger auf Excel schielen und dafür lieber nach Beispielen 
suchen, wie du selbst genau die gleiche Aufgabenstellung jeden Tag mit 
links meisterst. Dann dabei beobachten (oder darüber nachdenken) was 
genau du in so einem Fall dann eigentlich machst. Du wirst erstaunt 
sein, wieviele Programmier-'Probleme' du jeden Tag ohne darüber 
nachzudenken aus dem Handgelenk heraus löst, die, wenn du sie als 
Programmierproblem bekommst, dich vor scheinbar unüberwindliche Probleme 
stellen.

von Dirk J. (dirk-cebu)


Lesenswert?

Vergeude Deine Zeit nicht mit so etwas, sondern kauf Dir eine digitale 
Schaltuhr für 5€ aus dem Baumarkt, dann wäre das Problem schon längst 
gelöst.

von hans (Gast)


Lesenswert?

Leg eine sortierte Liste der Schaltpunkte an,
verwende am besten Integer bestehend aus
Stunden * 256 + Minuten  (geht so als Union)
und dem Schaltzustand der danach bestehen soll
(Licht ein/aus).

Dort suchst du dann nach dem Start deinen gültigen
Startwert (der nächste Integerwert ist größer als
die aktuelle Uhrzeit -> dein nächster Schaltpunkt).
Dann weist du auch was du schalten must.

hans

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.