Esta como volatile unsigned que no se que termina siendo.
Volatile se usa cuando una variable es compartida con rutinas de interrupcción.
Todas las variables que se usen con millis() deben ser unsigned long.
Otro tema.
analogReference(INTERNAL); // mover al setup()
se coloca en el setup a menos que por alguna razón hagas cambios en el loop pero no es tu caso.