Re: mit Uhrzeiten rechnen Kategorie: Programmierung (von Rene Schulz - 23.12.2011 19:22) | ||
Als Antwort auf Re: mit Uhrzeiten rechnen von ChristianS - 24.08.2011 21:02 | ||
| ||
Hallo Christian und Andre, ich habe eben den Code gefunden und denke er könnte mir auch Helfen. Wo müsste man den Einfügen, wenn ich folgenden Thread habe? Mein Problem ist jeweils die Ausschaltzeit, Rel2 sollte nur für 45 Sekunden schlie�en und ich muss nun irgendwie 15 Sekunden von angegebener Zeit abziehen. thread regen { byte port; byte Rel; byte day, hour, min, second; long time; stports.init(); lcdext.init(); /*******************************************/ /******** ANSTEUERUNG LCD *************/ /*******************************************/ lcdext.line(2); lcdext.print(" TERRA: REGEN"); sleep 500; lcdext.clear(); /*******************************************/ /*********** Zeitschaltuhr Regen ***********/ /********Es wird jeden Tag geschaltet*******/ /*******************************************/ loop { min = system.minute(); wait system.minute() != min; time = system.hour()*100 + system.minute(); day = system.dow(); /**************************************************************/ /******** Zeitdefinition Stunden Minuten Sekunden *************/ /*** Ein 07:30:00 und 17:00:00 Aus 07:30:45 und 17:00:45 ******/ /**************************************************************/ if (time >= 0730 and time <= 0731) or (time >= 1700 and time <= 1701) stports.setRel(2,1); else stports.setRel(2,0); }; release; }; Danke Gru� Rene > > Hallo Christian, > > > > > ich noch mal. Jetzt möchte ich einfach eine beliebige Anzahl von Minuten abziehen. Ich habe mal > > > versucht die Funktion umzubauen. In Excel scheint es zu funzen. > > > > > > > > > function subTime(int time, int minutes) returns int > > > { > > > minutes= (time%100) - minutes; > > > return ((time/100 + minutes/60)%24)*100 + ((minutes*-1)%60); > > > } > > > > > > > Für die Subtaktion brauchst Du einen Ansatz. Das einfachste ist, denen Zeitwert > > in einen Time-Serial umzuwandeln. > > > > function subTime(int time, int minutes) returns int > > { > > time=(((time/100)*60 + (time%100) - minutes; > > return (time/60)*100 + (time%60); > > } > > > > Genaugenommen ist das sogar die bessere Variante, auch für die Addition: > > > > function addTime(int time, int minutes) returns int > > { > > time=((time/100)*60 + (time%100) + minutes; > > return ((time/60)%24)*100 + (time%60); > > } > > > > Hier kannst Du auch negative Werte angeben, so da� nur eine Funktion benötigt wird. > > Allerdings gibt's noch ein kleines Problem. Den Tageswechsel bei einer Subtraktion. > > Wenn Du nun von 0:30 Uhr 60 Minuten abziehst, erhälst Du -30 statt 23:30. > > Hier kommt man um eine If-Abfrage (fast) nicht herum: > > > > function addTime(int time, int minutes) returns int > > { > > time=((time/100)*60 + (time%100) + minutes; > > if time<0 time=1440+time; > > return ((time/60)%24)*100 + (time%60); > > } > > > > Man kann natürlich immer 1440 Minuten hinzuaddieren. Dann spart man > > sich die If-Abfrage. Durch die Moduludivision werden diese ggf. wieder ausgefiltert. > > > > MfG André H. > > Hallo André, > Die Lösung mit nur einer Funktion ist klasse und funktioniert super. Besten Dank für die > ausführlichen Erläuterungen. Ich glaub´ jetzt habe ich es verstanden. > Jetzt kann ich mich dem nächsten Problem stellen.... > > PS: Eine Klammer hinter dem Gleichheitszeichen ist zu viel :-) > > Gru�, > ChristianS | ||
Antwort schreiben Antworten: |