Minutenzeiten validieren

xorg1990

New member
Hallo Freunde, ich bin ja kaum noch hier im Forum unterwegs aber ab und zu mal muss ich eben doch vorbei schauen.
Ich bin ja zur Zeit gesundheitlich etwas angeschlagen. Nee, keine Corinna/Carola oder wie auch immer. Habe mir den Bizeps abgerissen.

Der Bizeps an sich ist mir egal. Ich bekomme aber Psychisch eine auf die Fresse, da seit einem Jahr Leistungsport jeden Tag 3 Stunden und jetzt -APRUPTER STOP. Der Schultermuskel abriss damals hat mich 2 Jahre beschäftigt.

Nun gut kommen wir zum Thema.

Ich bin auf einem Mikrocontroller zu Gange und lese in der loop die Minuten Zeiten aus einem DS3231 RTC Chip.
Ich benötige aber für die Pumpe eine 3 Minütige Einschaltverzögerung.

Der Code schaut erst mal so aus

Code:
timeWhenPumpStart = 100;

loop{
 DateTime now = RTC.now();
    uint8_t m = now.minute();

if(digitalRead(schwimmerPin) && timeWhenPumpStart == 100){
   timeWhenPumpStart = m+3
}

if(m == timeWhenPumpStart ){//pumpe ein
timeWhenPumpStart = 100;
}

}

Ja alles schön und gut aber wenn m 59 ist und ich 3 aufradier bin ich bei 62. Dann wird aber die m == timeWhenPumpStart Bedingung nie true.

Ich könnte jetzt einen if Baum einbasteln.

if m==57 {
timeWhenPumpStart = 0;
}else if(m==58){
imeWhenPumpStart = 1;
}..usw.

Das funktioniert aber spätesten dann nicht mehr wenn ich den User die Einschaltverzögerung einstellen lassen möchte.

Gibt es da eine Mathematik, das ich wenn die Addition großer ist als 59 wider bei 0 raus komme. Wie bei einem Überlauf?
 

kkapsner

Super Moderator
@mikdoe: das ist kein JavaScript und bei Microcontrollern gibt es sowas wie setTimeout meistens nicht.

@xorg: wie hesst schon gesagt hat, gibt es modulo (https://de.wikibooks.org/wiki/C-Programmierung:_Ausdrücke_und_Operatoren#Rest_%), aber ich würde da eher mit dem UNIX-Timestamp arbeiten und dann da einfach immer 3*60 draufaddieren und mit > vergleichen (den initialen Vergleich zum setzten könntest du ja dann mit 0 machen). Dadurch wird das ganze einfacher und auch genauer. In deinem Fall hast du ja nur im besten Fall 3 Minuten Verzögerung. Wenn es z.B. 12:00:59 ist würde sich die Pumpe ja schon um 12:03:00 einschalten.

Auch könntest du damit beliebig große Verzögerungen haben - jetzt hast du ja ein Maximum von 59 Minuten.
 

xorg1990

New member
tsseh schrieb:
Jau, ist mir den Nächten Tag auch eingefallen.

kkapsner schrieb:
Wenn es z.B. 12:00:59 ist würde sich die Pumpe ja schon um 12:03:00 einschalten.
Oha, da hast du recht.

Du glaubst ja garn nicht was für ein Krampf das ist mit Datums's und Uhrzeiten zu arbeiten auf einem Mikrocontroller.

Pumpe ein-/aus -schalt Zeit, Analuf Verzögerung, dann Druck und Durchflussmenge messen im gegeben Intervall.
Pumpen Strom Messen , Motor Temperatur ermitteln.
 
Oben