Hallo,
das folgende Teilprogramm soll später in ein größeres Projekt eingegliedert werden.
Zweck:
Ich möchte mehrere Relays zeitgesteuert in einer bestimmten festen Reihenfolge ansteuern.
D.h. wenn das RTC bei sekunde 0 ist, möchte ich den counterTimer starten sodass die Relay ansteuerung ab diesem Zeitpunkt unabhängig von der RTC sekundenzeit ist. Also das RTC zählt dann nach 60 sekunden wieder von 0 an. Mein counterTimer jedoch zählt unabhängig weiter, also z.b. 75 sekunden lang, bis dieser wieder auf 0 gesetzt wird.
Es wird also ein ,,Event´´ ausgelöst (bei RTC sekunde 0) mit dem ich dann mein Relays-Ablauf triggern kann.
Soweit so gut.
Mir ist jedoch aufgefallen das es eine Abweichung beim hochzählen der Sekunden vom RTC, im Vergleich zum counterTimer mit millis() gibt.
Ich dachte eigentlich das das RTC 3231 so genau ist das ich mich darauf verlassen kann. (Zumindest in so kleinen Zeiträumen wie bei mir sowiso).
Später soll das Event natürlich nicht jede Sekunde 0 gestartet werden, es werden weitere Bedingungen verwendet die das Event dann nur starten wenn ich möchte UND die RTC Sekunden auf 0 sind. Im folgenden also nur als Testaufbau.
Hauptfrage:Wiso zählt der counterTimer langsamer hoch, als die RTC sekunden
Wie kann ich dieses Problem kompensieren 
Im Seriellen Monitor ist eindeutig zu erkennen das der counterTimer nacheilt.
//counterUPTimer
unsigned long previousTimer = 0;
int counterTimer = 0;
long intervalTimer = 1000; //
//RTC
#include <DS3231.h>
DS3231 rtc(SDA, SCL);
Time t;
int x = 0;
void setup() {
Serial.begin(9600);
rtc.begin();
}
void loop() {
if (t.sec == 1) {
x = 1;
}
if (x == 1) {
counterUPTimer();
}
t = rtc.getTime();
Serial.print(" sec:");
Serial.print(t.sec, DEC);
Serial.print(" x:");
Serial.print(x);
Serial.print(" counterTimer:");
Serial.println(counterTimer);
}
void counterUPTimer() {
unsigned long currentTime = millis();
if (currentTime - previousTimer > intervalTimer) {
previousTimer = currentTime;
counterTimer++;
}
if (counterTimer == 75) {
counterTimer = 0;
x = 0;
}
}
Wie immer, vielen Dank für Rückmeldungen aller Art !