Ja, (int)millis() wandelt den Rückgabewert von millis() in ein int. Das Ergebnis ist sehr selten richtig.
Die richtige Bedingung (damit auch der Überlauf nach ca. 49 Tagen funktioniert):
// alle xxx_millis-Variablen unsigned long
if (aktuelle_millis - letzte_millis >= intervall) {
letzte_nillis = aktuelle_millis;
// tu was
}
Gruß Tommy