Weil das eine Funktion ist, die von mehreren Stellen aus aufgerufen wird.
Ich benutze die also immer wieder und schreibne den Code nicht jedes Mal neu.
Am Beispiel der Anzeige:
Ich setze mit static uint32_t myMillis = millis(); einen Ausgangswert fest.
Wenn jetzt der counter unter 14 und das erste scrollen -> nach links, abgefragt wird, übergebe ich der funktion tik die Startzeit und einen weiteren Wert, der in der Funktion verglichen wird.
In tik passiert jetzt der Vergleich der aktuellen Zeit mit der übergebenen Zeiot, ob der ist als der übergebene Wert.
Ist das nicht der Fall, weil millis()-übergebener Wert z.B. "nur" 200 ergibt, bekomme ich ein einen Rückgabvewert - false - der mich in der aufrufenden Funktion veranlasst einfach nichts zu machen.
Ist der errechnete Abstand aber größer als 400, bekomme ich true zurück.
Damit stimmt die Bedingung if (tik(myMillis, 400)) und da geht es weiter indem ich jetzt geskrollt wird und als letztes merke ich mir wieder die aktuelle Zeit - die Bedingung beginnt also wieder von vorn - bis 400ms vergangen sind.
Diese Funktion macht es auch im nächsten und übernächsten und im relais...