aber egal wie lange das Ding läuft, deine "Formel" geht aus meiner Sicht immer nach hinten los
Dann hast Du sie nicht verstanden.
Damit das nicht so lange läuft, habe ich den Mechanismus mal im Kleinen abgebildet (mit einer 8 bit Zahl):
unsigned char aktuelleMillis = 0, letzteMillis = 0, dauer = 10;
int cnt = 0;
void setup() {
Serial.begin(115200);
Serial.println("Start");
Serial.println("Initialwerte:");
Serial.print("Dauer = "); Serial.println(dauer);
Serial.print("letzte = "); Serial.println(letzteMillis);
Serial.print("aktuell"); Serial.print('\t'); Serial.print("Diff.");
Serial.print('\t'); Serial.println("letze");
}
void loop() {
if (cnt <= 300) { // Damit das nicht ewig läuft
if ((unsigned char)(aktuelleMillis - letzteMillis) >= dauer) {
// tu was
Serial.print(aktuelleMillis);
Serial.print('\t'); Serial.print((unsigned char)(aktuelleMillis - letzteMillis));
Serial.print('\t'); Serial.print(letzteMillis); Serial.println("\tAktion");
letzteMillis = aktuelleMillis;
}
else {
Serial.print(aktuelleMillis); Serial.print('\t');
Serial.println((unsigned char)(aktuelleMillis - letzteMillis));
}
aktuelleMillis++;
cnt++;
}
}
Lass es mal laufen und schaue Dir die Ausgaben an.
Gruß Tommy