Ich moechte in einer if Abfrage in einer Stunde moechte Ich alle 5 minuten und 0 Sekunden eine
abfrage machen
Gibt es da eine kurzform oder muss Ich das 12 mal schreiben
If (second() == 0 && minute() == 0 )
If (second() == 0 && minute() == 5 )
If (second() == 0 && minute() == 10 )
Du könntest den 0-Sekundendurchgang in einer if-Abfrage machen und den entsprechenden Minutentakt mit switch/case realisieren? Soll jedesmal das gleiche passieren oder bei 5, 10, 15, ... Minuten etwas anderes? Im ersten Fall könntest du dann nämlich auch Modulo verwenden, also if (minute%5==0){}.
Oder nimm die Sekunden ab Mitternacht ( oder ab 1.1.2000 oder ab 1.1.1970 oder was du da hast )
und alle 300 ist es genau 5, 10, 15 ... Minuten und 0 sek.
Dass dafür die Modulo-Division (utime % 300) erfunden wurde, hast du schon mitgekriegt, stimmts
Die Sekunden seit Mitternacht kriegt man durch % 86400L und darauf kannst du dir auch Tagesgrenzen setzen:
unsigned long utime = RTC.now().unixtime(); // oder wie immer das deine RTC library macht
unsigned long sec = utime % 86400;
if (sec >= 4*3600L && sec <= 22*3600L && sec %300 == 0) {
// alle 5 Minuten zwischen 05:00 und 21:00
}
Ich hab eine, die heisst RTC\rtclib.h und behauptet sie wäre aus http://news.jeelabs.org/code/
( Was aber "404 Not Found" liefert )
Die liefert eine class RTC_DS1307 mit der Funktion now(), was ein DateTime Objekt liefert, das die Methode unixtime kennt.
Jetzt könnte ich natürlich suchen, wo ich die wirklich her habe (-> GitHub - adafruit/RTClib: A fork of Jeelab's fantastic RTC Arduino library )
aber eigentlich sollten alle RTC libraries, die mehr machen als eine kleine Verpackung der Wire.h zu sein, irgendwie die Anzahl Sekunden seit Anfang der Zeitrechnung zurückliefern.
Was bei Sommerzeit-Umschaltung passiert, oder auf welche Zeitzone der 01.01.2000 00:00 sich bezieht, ist ja eh eine ganz andere Frage...