Ich möchte die Sekunden seit den Programmstart zählen und wiederkehrend etwas tun. Diese soll nicht fortlaufend zählen, sondern bei 59 Sekunden wieder auf 0 springen. Eine RTC ist installiert.
Beispiel:Das Programm startet um 22:25:21. D.h. bis 22:25:59 ist es einfach, da über normale Subtraktion machbar und "42 Sekunden" vergangen. Ab 22:26:00 bis 22:26:20 fällt mir keine Lösung ein, die eben von 43 bis 59 Sekunden vergangen sagt.
Irgendwie sehe ich gerade den Wald vor lauter Bäumen nicht:-(
Hoffe ich konnte mein Problem so schildern, das es halbwegs verständlich ist.
Ja schon, dachte nur das ich eben mit der RTC synchron halte und nur eben den Offset habe. Es soll eben nach 55 Sekunden vom Programmstart etwas passieren und nicht wenn die RTC 55 Sekunden ausgibt.
Dachte nur das ich eine Zeit direkt an die RTC binden kann und das über den I2C mitbekomme. Auch wenn es darum geht, das Aktionen immer alle 10 min ausgeführt werden oder eben alle 2 Stunden.
Bei Interrupts hören die Kenntnisse leider auf und wie ich in der Dokumentation gelesen habe kann ich am Pin A3(Taktausgang meiner RTC) auch nicht Pulse zählen.
in der beschreibung Deiner RTC ist auf seite 8 beschrieben, wie man SQW einstellt. stelle es auf 1 hertz. dann kommt bei A3 vom shield (k. A. ob das auch A3 vom arduino ist), jede sekunde ein HIGH. das zählst Du mit.
wenn Du jetzt alle 123 sekunden etwas machen willst, dann nimmst Du den mitgezählten wert % 123. wenn bei dieser rechnung null rauskommt, ist Dein mitgezählter wert ohne rest durch 123 teilbar:
A3 ist auch der Pin vom Arduino Uno, also einer der analogen Eingänge. Hatte in der Doku gelesen, das nur die Pins 2 und 3 Interrupt Pins sind aber wenn du sagst ich brauche kein Interrupt ist das ja positiv.
Du baust Dir die Uhrzeit zu einer Sekundenzahl zusammen. Bsp. 22:21:30 Uhr
22 * 60 * 60 = 79200 Sekunden
plus
21 * 60 = 1260 Sekunden
plus
30
kommste auf 80490 Sekunden
Das machste noch mit der anderen Vergleichsuhrzeit und hast Deine Differenz in Sekunden.
Dann ziehste immer die letzte Uhrzeit als neue Rechenreferenz nach, so wie man das mit millis() auch machen würde.
Wenn Du einen Sekunden oder Minutenzähler brauchst der von der RTC kommt, mußte Bescheid sagen. Was haste denn für eine RTC? Es würde aber mit obiger Methode auch ausreichend sein, wenn Du halbwegs regelmäßig die RTC ausliest und dann die neue Sekundendifferenz bildest.
Wie gesagt ist Punkt 8 auf Seite 6 relevant. Jumper 1 muss dafür gesetzt sein. Und auf Seite 8 steht auch wie man in der Library die Frequenz einstellt.
Was Doc_Arduino sagt stimmt aber auch. Man kann auch die RTC ständig auslesen und schauen ob sich die Sekunden geändert haben
Braucht mehr Rechenzeit, aber das ist hier nicht so schlimm
Kommt eben immer darauf an was man für einen Aufwand betreiben möchte und ob man Rechenzeit frei hat.
Ein auslesen aller einer Sekunde, aller 1000 millis(), sollte keine Rolle spielen, denke ich auch.
Hat man höchstens eine Ungenauigkeit von einer Sekunde.
Ansonsten muß man mit mehr Aufwand die RTC für sich arbeiten lassen.