
Zitat von
i_make_it
Was noch zu berücksichtigen ist, ist das millis natürlich irgendwann überläuft und dann einmal der aktuelle Wert kleiner sein kann als der in der Variablen gespeicherte.
Diesen Fehlerfall sollte man noch abfangen, denn sonst funktioniert das Programm sollange bis millis das erste mal den Maximalwert erreicht und danach nicht mehr, da millis ja nie mehr um den Grenzwert größer werden kann als der gespeicherte Wert.
Also:
Code:
if (cur1micros > prev1micros) prev1micros = 0;
müsste noch zum Code dazu.
Wenn man nur mit Zeitdifferenzen rechnet, braucht man das nicht.
Das
Code:
if (cur1micros - prev1micros >= toggleinterval) { //alle 10ms umschalten
rechnet auch bei einem Überlauf richtig.
Ich klau einfach mal hier die Zahlen, da hat es schon einer vorgerechnet
http://forum.arduino.cc/index.php/topic,85706.0.html
4294967290 - 4294967280 = 10
4294967291 - 4294967280 = 11
4294967292 - 4294967280 = 12
4294967293 - 4294967280 = 13
4294967294 - 4294967280 = 14
4294967295 - 4294967280 = 15 (jetzt kommt der Überlauf)
0 - 4294967280 = 16
1 - 4294967280 = 17
2 - 4294967280 = 18
3 - 4294967280 = 19
Lesezeichen