Go Down

Topic: Zeitschaltuhr funktion (Read 2326 times) previous topic - next topic

superduper

Hallo Zusammen

habe ein kleines problem mit einer zeitschalt-funktion.
irgendwie geht mir das nicht in den kopf ! das licht schaltet wilkürlich
wenn die zeit über 23.59 leuft also 0 uhr.

danke

Code: [Select]


int light_start_hours = 10;
int light_start_minutes = 30;

int light_stop_hours = 4;
int light_stop_minutes = 30;


int light_start;
light_start = light_start_hours * 100 + light_start_minutes;

int light_stop;
light_stop = light_stop_hours * 100 + light_stop_minutes;

int current_time;
current_time = hours * 100 + minutes;

if (current_time >= light_start || current_time <= light_stop) {digitalWrite(licht1_2, HIGH);} else {digitalWrite(licht1_2, LOW);}

uwefed

Hab ich da was verschlafen?
Seit wann haben Stunden 100 Minuten?
Grüße Uwe

superduper

Hi

Glaube das sollte schon stimmen so Military Time.

4 uhr = 0400
13 uhr = 1300

und so weiter.

gruss

uwefed

hallo mark@yeshosting.net

Ich habe immer geglaubt, daß die Miliärs in den USA (zumindest in den Silmen über Militär) die Stunden und Minuten im Format:
Stunde hundert - Minuten im 24 Stunden Format (ohne Doppelpunkt oder Zusatz der Wörter Minuten oder Stunden)  benutzen, also

19 Uhr dreißig ist 1930 (zulu - Time) verwenden.

Ich hatte es nicht so verstanden, daß die Stunde darum nicht 60 sondern 100 Minuten haben.

Ich kann sagen, daß bei meinem Militärdienst in Italien dieses Zeitformat nicht verwendet wurde.

Ich weiß nicht woher Du die Zeit bekommst. Wenn von einer RTC oder GPS, RDS, DCF77 haben die Stunden 60 Minuten.
Wenn die Stunden 60 Minuten haben und Du mit 100 Minuten rechnest ohne umzurechnen ( 30 min = 50) nehmen die Minuten nie die Werte von 60 bis 99 an.

Wie gesagt ich kann mich irren.

Grüße Uwe

superduper

#4
Feb 03, 2011, 10:55 am Last Edit: Feb 03, 2011, 07:24 pm by superduper Reason: 1
Hallo Uwe

bekomme die zeit via RTC im 24 h format.
also stundenausgabe = 0 - 23.
minutenausgabe 0 - 59.
meine rechnung.
z.b stunden 13, minuten 40

stunden * 100 + minuten = 1340

das problem ist jetzt aber das ich die zeit zwischen z.b 1300 und 0400 schalten will, und mit diesem satz komme ich nicht weiter.
if (1800 >= 1400 || 1800 <= 0400) {digitalWrite(licht1_2, HIGH);} else {digitalWrite(licht1_2, LOW);}

hier ist der haken 1800 <= 0400 !! wie lös ich das weil ja de zeit nach 2359 wieder kleiner als 1800 also 0000 ist.

gruss


uwefed

Hallo superduper

Ich löchere Dich weiter mit den gleichen Fragen: wieso hat Deinen Stunde 100 Minuten? Gebe Dir aber eine Lösung:
Quote
if (1800 >= 1400 || 1800 <= 0400) {digitalWrite(licht1_2, HIGH);} else {digitalWrite(licht1_2, LOW);}


Sagen wir Startzeit ist in der Variablen "start" und   Endzeit in der Variablen "ende". Die aktuelle Zeit ist "jetzt."

Code: [Select]
if (( (start < ende) && (jetzt >= ende) ) || ( (start >= ende) && (jetzt < start) && (jetzt >= ende)   )
{ //licht aus}
else
{ //licht an}


Wenn Du noch kontrollierst ob das Licht aus oder an ist, brauchst Du den Ausgang nur 1 mal setzen.

Dieser Kode schaltet das Licht jeden Tag ein und aus.

Jetzt zu meinem penetranten wiederholen:  ;)

Sagen wir die Startzeit ist 19:40 und die Einschaltdauer 1Stunde 30 Minuten.
Das ergibt mit Deiner rechenweise eine  Startzeit 1940 und eine Stopzeit 2070. Der obengenannte Kode funktioniert; Wenn Du aber  (jetzt == ende) schreibst Schaltet sich das licht nie aus da die Zeit bis 2059 kommt und dann bei 2100 weiterläuft.
Benutze wie alle Normalsterblichen eine 60-Minuten-Stunde, wandle Zähle die Zeit in Minuten und alles funktioniert besser.

Viele Grüße Uwe



Go Up