Problemas con digitalWrite

Buenas tardes,

estoy dando mis primeros pasos con Arduino para realizar unos proyectos. Mi problema consiste en que tengo un programa en el cual se cumple un proceso y que ante una parada de emergencia debe realizar cierta rutina, es por eso que a pesar de que el proceso cumple, no puedo utilizar el delay.

Mi problema surge cuando cuento tiempo con la funcion millis, dado que al ir pasando de estados no me apaga las salidas que deben apagar, a pesar de que ya verifique de que pasa por ese estado. que puede esta pasando?

Adjunto el soft. Muchas gracias

 void(*resetFunc)(void)=0;
int pulMarcha = 2;
int Stop = 3;

int valvGas = 6;
int valvCerveza = 7;
int valvAireacion = 8;
int Piston = 9; 

bool flag = LOW;
unsigned long tiempoAhora = 0;
int estado = 0;

void setup() {
	// put your setup code here, to run once:
	pinMode(pulMarcha,INPUT);
	pinMode(Stop,INPUT);
	pinMode(valvGas,OUTPUT);
	pinMode(valvCerveza,OUTPUT);
	pinMode(valvAireacion,OUTPUT);
	pinMode(Piston,OUTPUT);

  Serial.begin(9600);
	
	digitalWrite(valvGas,HIGH);
	digitalWrite(valvCerveza,HIGH);
	digitalWrite(valvAireacion,HIGH);
	digitalWrite(Piston,HIGH);

 attachInterrupt(digitalPinToInterrupt(Stop),paradaEmergencia,FALLING); 
 
 
}

void loop() {
	
	  interrupts();

    while (flag == LOW)
		{if (digitalRead(pulMarcha) == LOW || estado != 0)
		{
			
			digitalWrite(Piston,LOW);
			digitalWrite(valvAireacion,LOW);
			digitalWrite(valvGas,LOW);
      if (estado == 0)
      {
        estado = 1; 
        tiempoAhora=millis();        
      }
			if(millis() - tiempoAhora > 5000 && estado == 1)
        {
			    digitalWrite(valvAireacion,HIGH);
          estado = 2;
          tiempoAhora=millis();
        }
			if(millis() - tiempoAhora > 5000 && estado == 2)
        {
			    tiempoAhora=millis();
			    digitalWrite(valvGas,HIGH);
			    digitalWrite(valvCerveza,LOW);
          estado = 3;
        }
			if(millis() - tiempoAhora > 1000 && estado == 3)
			  {
			    tiempoAhora=millis();
			    digitalWrite(valvAireacion,LOW);
          estado = 4;
			  }
			if(millis() - tiempoAhora > 10000 && estado == 4)
			  {
			    tiempoAhora=millis();
			    digitalWrite(valvCerveza,HIGH);
          estado = 5;
			  }
			if(millis() - tiempoAhora > 1000 && estado == 5)
        {
			    tiempoAhora=millis();
			    digitalWrite(Piston,HIGH);
			    digitalWrite(valvAireacion,HIGH);
          estado = 0; 
        }

		}
   } 
  if (flag == HIGH)
   {
     delay(3000);
     digitalWrite(Piston,LOW);
     digitalWrite(valvAireacion,LOW);
     resetFunc();
   }

}

void paradaEmergencia ()
{
  
  digitalWrite(valvGas,HIGH);
  digitalWrite(valvCerveza,HIGH);
  digitalWrite(valvAireacion,LOW);
  flag = HIGH;
}

En que momento inicia tu proceso ? digo porque:

int estado = 0;
if (digitalRead(pulMarcha) == LOW || estado != 0) {
     ...
}

Por aquí nunca lo hará. Lo pregunto porque se ve que tu código es incompleto ya que no esta función resetFunc().

void(*resetFunc)(void)=0;

Otra duda: que hay en pulMarcha (2) ? es un interruptor o es un pulsador ? esta con una resistencia pullup ? porque no usaste:

pinMode(pulMarcha, INPUT_PULLUP);

PD: Si en todos los if() hay tiempoAhora = millis(); mejor sacalo afuera.

Me hiciste ver bien el flujo con lo de sacar afuera el millis(). El problema eran los primeros digitalWrite. funciona perfecto. Gracias