Chris72622:
Wenn Modulo "0" ist, weil z.B. 1000ms vergangen sind, wird dann so lange der auszuführende Code ausgeführt, bis Modulo nicht mehr "0" ergibt?
Eine if-Abfrage wird nur einmal ausgeführt.
Generell macht man das so (jedenfalls in der Loop):
unsigned long previousMillis = 0;
void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > 1000)
{
previousMillis = currentMillis;
....
}
}
Der Code von jurs in deinem Thread ist eine Abwandlung davon, weil es statt dessen in einer Funktion gemacht wird und man den Wert der Sekunden speichern will. "millis()/1000" inkrementiert jede Sekunde. Wenn sich dieser Wert ändert ist also eine Sekunde vergangen.
Ansonsten ist es das gleiche Prinzip: Zeit einlesen -> mit alter Zeit vergleichen -> wenn Intervall abgelaufen ist, alter Zeit die neue Zeit zuweisen
Die Modulo-Divsion darin ist dazu da um auf gerade und ungerade Zahlen abzufragen