Problema con Contador Desfasado

Hola, tengo el siguiente problema, estoy haciendo un contador de segundos el cual tengo asociado a millis() y cada vez que pasa un segundo se incrementa en +1 el DIGITO

void setup() {
  TIEMPO1 = millis();
}

void loop() {

  TIEMPO2 = millis();
  if (TIEMPO2 > TIEMPO1 + 1000) { //si TIEMPO2 supera a TIEMPO1 por un segundo
    TIEMPO1 = millis();           //se actualiza TIEMPO1
    DIGITO++;                     //y se suma +1 a DIGITO
    if (DIGITO > 9999) {
      DIGITO = 0;
    }
  }
}

Este es mi código, el problema es que pasado unos 30 segundos, de la nada el DIGITO se incrementa en unos +20 y queda desfasado del tiempo real.

Ya comprobé con unos Serial.print y al parecer el problema es en el primer IF que se ejecuta varias veces en dados momentos, haciendo que el DIGITO incremente su valor, pero no logro entender porqué, ya que al ejecutarse el IF, el TIEMPO1 debería de actualizar su valor, haciendo que tenga que pasar un segundo para que se vuelva a ejecutar.

Prueba esto:

unsigned long TIEMPO = 0;
int DIGITO = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  if ((millis() - TIEMPO) >= 1000) { 
    DIGITO++;
    if (DIGITO > 9999) {
      DIGITO = 0;
    }
    Serial.println(DIGITO);
    TIEMPO = millis();
  }
}
1 Like

Postea tu código completo.

Seguramente tu problema tiene que ver con la forma en que las variables fueron declaradas, pero solo podemos adivinarlo…

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.