[Solucionado] Apagado definitivo de led con temporizador

Buenas tardes a todos hize la programacion para apagar un led despues de 12 segundos sin que se volviera a prender y me funciona bien cuando es directo, mi problema es que cuando le pongo una condicional ya no me funciona, necesito su ayuda. Gracias.

codigo funcionando sin condicional:

int led8=8;
int estadoled = HIGH;
long tiempoanterior = 0;
long espera = 12000; //apagar led despues de 12 segundos

void setup() {
 pinMode(led8,OUTPUT);
}

void loop() {
digitalWrite(led8,estadoled);
 if(millis() - tiempoanterior > espera) {
    tiempoanterior = millis();   
    estadoled = LOW;
  }
}

Codigo con la condicional IF no funciona:

int led8=8;
int estado=0;
int estadoled = HIGH;
long tiempoanterior = 0;
long espera = 12000; //apagar led despues de 12 segundos

void setup() {
  Serial.begin(38400);
  pinMode(led8,OUTPUT);
}

void loop() {
 if(Serial.available()>0){
  estado = Serial.read();
 }
 if(estado=='1'){
  digitalWrite(led8,estadoled);
   if(millis() - tiempoanterior > espera) {
    tiempoanterior = millis();   
    estadoled = LOW;
   }
 }
  
}

Hola, se que no es la solución más elegante, pero creo que es la más sencilla. ¿Por qué no pones que se active y se desactive en el setup? Así te dejarías de bucles, simplemente pondrias high, delay y low y ya no se enciende hasta que no se reinicie.

Gracias por responder plogar, necesito usar ese bucle if porque es el codigo que mando desde mi celular al modulo bluetooth y luego al arduino y que es el numero 1. Entonces al recibir el numero 1 deberia prenderse ese led por 12 segundos y de ahi apagarse y ya no volverse a prender mas. Volvi a modificar el codigo, y no se en que estoy fallando, me deberia funcionar con esto:

int led8=8;
int estado=0;
long tiempoanterior = 0;
long espera = 12000; //apagar led despues de 12 segundos

void setup() {
  Serial.begin(38400);
  pinMode(led8,OUTPUT);
}

void loop() {
 if(Serial.available()>0){
  estado = Serial.read();
 }
 if(estado=='1'){
  digitalWrite(led8,HIGH);
  tiempoanterior = millis();
 }
 if(millis() - tiempoanterior > espera) {
    digitalWrite(led8,LOW);
   }  
}

Prueba a ver con este cambio de lugar de llaves del primer if.

void loop() {
  if(Serial.available()>0) {
    estado = Serial.read();
    if(estado=='1'){
      digitalWrite(led8,HIGH);
      tiempoanterior = millis();
    }
  }
  if(millis() - tiempoanterior > espera) {
    digitalWrite(led8,LOW);
  } 
}

Hola noter hice ese cambio de llaves y me funciono perfectamente, muchas graciassss! Dejo el codigo completo por si le sirve a alguien

int led8=8;
int estado=0;
unsigned long tiempoanterior = 0;
long espera = 12000; //apagar led despues de 12 segundos

void setup() {
  Serial.begin(38400);
  pinMode(led8,OUTPUT);
}

void loop() {
 if(Serial.available()>0){
  estado = Serial.read();
  if(estado=='1'){
  digitalWrite(led8,HIGH);
  tiempoanterior = millis();
  } 
 } 
 if(millis() - tiempoanterior > espera) {
   digitalWrite(led8,LOW);
   }
}

Me alegro, sobre todo si has comprendido el porqué antes no te funcionaba y ahora sí. Intuyo que sí lo habrás pillado, porque tu código estaba bastante bien apuntado ;).

Para cerrar el hilo, edita tu primer post y cambia el asunto anteponiendo [Solucionado].