función millis(), hasta cuando almacena valores?

Hola estaba implementando un trozito de código para que arduino hiciese algo cada x segundos de la siguiente forma:

int variable = 5000;
void setup(){}
void loop(){
if (millis()%variable==0){
Do(Something);
}
}

El caso es qe me está funcionando perfectamente durante los 600 segundos que lo he estado monitorizando, pero mi pregunta es, que pasa cuando el valor de millis() es demasiado grande????? Se resetea arduino, empieza a contar desde cero...???

Gracias de antemano :slight_smile:

El valor millis() se desborda a los 50 días o así, puedes verlo en la Reference de la función. A ti lo que se te está desbordando es la variable "variable" porque la has puesto como int. Ponla como unsigned long.

gracias @cheyenne!

mmm, variable nunca se desborda en ese programa, es constante, está bien como int y mejor como const int
Cuando llega al límite (4,294,967,295) empieza de cero otra vez.

Aparte, si lo que quieres es realizar una acción cada 5 segundos, necesitarás suerte para que te funcione de forma fiable.

Cheyenne:
El valor millis() se desborda a los 50 días o así, puedes verlo en la Reference de la función. A ti lo que se te está desbordando es la variable "variable" porque la has puesto como int. Ponla como unsigned long.

variable es de tipo int (rango de -32768 a 32767) , por lo que sí que puede valer 5000. Otro tema es que al utilizar la operación resto (%) mezclando tipos de datos pueda pasar cualquier cosa.

@piratadelestrecho: Lo que intentas hacer es:

setup()
{
  inicio = millis();
}
loop()
{
  ...
  if(millis()-inicio >= 5000) // Han pasado 5 segundos
  {
    ...
    inicio = millis();
  }
}

Este código entra en el if cada 5 segundos

Cierto, me colé, no es que se desborde "variable" ya que sólo se usa como una constante, el problema será mezclar unsigned long y int en una operación. Probablemente se solucione poniendo "variable" a tipo unsigned long. Sin embargo es más sencillo y fiable hacerlo como indica @jorgepl.