Arduino, activar salida por tiempo de entrada

Hola a todos. A ver si me pueden echar una mano con mi pregunta.
Quiero que se active el pin de salida 6, pero después de que el pin de entrada 7 lleve en HIGH 20 segundos.
El pin 7 se activa con un switch en el pin 13.
Estoy ocupando la función millis() y he logrado que funcione, pero cuando se reinicia el bucle, ya no funciona.
Creo debe haber una forma de reiniciar la función millis al final de cada bucle.
Muchas gracias de antemano.
C++:
int periodo = 500;

int periodo2 = 20000;

byte temp = 0; //estado del temporizador, 1= activo 0= inactivo

unsigned long tiempoAnterior = 0;

unsigned long tiempoAnterior2 = 0;



void setup() {

    pinMode(7,OUTPUT);

    pinMode(13,INPUT);

    pinMode(6,OUTPUT);

}

void loop() {

    

    

  unsigned long currentMillis=millis();

  if (digitalRead(13)==1) {

    

      tiempoAnterior=millis();

      temp = 1;

      digitalWrite(7,HIGH);

    

      if ((unsigned long)(currentMillis-tiempoAnterior2)>=periodo2){

      

        digitalWrite(6,HIGH);

    tiempoAnterior2=currentMillis;

    }

  

    }

          

  if((millis()-tiempoAnterior>=periodo)&&temp==1){

      digitalWrite(7,LOW);

      delay(2000);

      digitalWrite(6,LOW);

      temp = 0;

    

    }


}
 
Para este tipo de cosas "secuenciales", te recomiendo usar máquinas de estado, es sencillo y después el código se lee fácilmente.
 
Atrás
Arriba