Apagado automatico de led

Buenas tardes, necesito encender un led y que al cabo de 1 segundo apague de manera automática y no vuelva a encender hasta que vuelva a enviar el carácter "e" , " f ".

Con este código cunado envió carácter "e" o "f" queda parpadeando, yo necesito que cuando envié el carácter "e" encienda solo 1 segundo y no vuelva a encenderse hasta que lo vuelva a enviar.

Desde ya muchas gracias.

void setup(){

  Serial.begin(9600);

  pinMode(13,OUTPUT); // On-Off Led rojo
  
  pinMode(12,OUTPUT); // On-Of Led azul
  
  pinMode(11,OUTPUT); // Pulso para encender Led amarillo (1 segundo)
  
  pinMode(10,OUTPUT); // Pulso para encender Led verde (1 segundo)  

  delay(1000); 


 void loop(){

 if(Serial.available()>0){        
         estado = Serial.read(); 
}

  if(estado== 'a'){                    
       digitalWrite(13,HIGH); // ON Led rojo
}

  if(estado== 'b'){                    
       digitalWrite(13,LOW); // OFF Led rojo
}

  if(estado== 'c'){                    
       digitalWrite(12,HIGH); // ON Led azul
}

  if(estado== 'd'){                    
       digitalWrite(12,LOW); // OFF Led azul
}

 if(estado== 'e' ){
       digitalWrite(11,HIGH);   // Pulso Led amarillo (1 segundo)
       delay(1000);
       digitalWrite(11,LOW);
 }
 if(estado== 'f'){ 
       digitalWrite(10,HIGH);   // Pulso Led verde (1 segundo)
       delay(1000);
       digitalWrite(10,LOW);
 }
}

Tienes que agregarle un delay infinito después de dar la indicación de apagado, quedaría así:

 if(estado== 'e' ){
       digitalWrite(11,HIGH);   // Pulso Led amarillo (1 segundo)
       delay(1000);
       digitalWrite(11,LOW);
       delay() // nuevo delay para mantener apagado
 }
 if(estado== 'f'){
       digitalWrite(10,HIGH);   // Pulso Led verde (1 segundo)
       delay(1000);
       digitalWrite(10,LOW);
       delay() // nuevo delay para mantener apagado
 }
}

Espero haberte sido de ayuda, un saludo

lo e pegado como lo enviaste y larga error

Moderador:
No repitas lo que se lee arriba

¿Podrías adjuntar el error que te marca? Para ver cuál es el problema por favor

errores

Hola,

con algún miedo de equivocarme ya que no lo ejecuté, yo probaría algo así:

int interval = 1000; // Tiempo en el que debería apagarse en milisegundos
int e_elapsed = 0;
bool e_last_state = false;

int f_elapsed = 0;
bool f_last_state = false;

void setup(){

  Serial.begin(9600);

  pinMode(13,OUTPUT); // On-Off Led rojo
 
  pinMode(12,OUTPUT); // On-Of Led azul
 
  pinMode(11,OUTPUT); // Pulso para encender Led amarillo (1 segundo)
 
  pinMode(10,OUTPUT); // Pulso para encender Led verde (1 segundo) 

  delay(1000);
}

void loop(){

	if(Serial.available()>0){       
		estado = Serial.read();
	}

	if(estado== 'a'){                   
		digitalWrite(13,HIGH); // ON Led rojo
	}

	if(estado== 'b'){                   
		digitalWrite(13,LOW); // OFF Led rojo
	}

	if(estado== 'c'){                   
		digitalWrite(12,HIGH); // ON Led azul
	}

	if(estado== 'd'){                   
		digitalWrite(12,LOW); // OFF Led azul
	}

	if(estado== 'e' ){
		e_last_state == true
		digitalWrite(11,HIGH);   // Pulso Led amarillo (1 segundo)
	}
	if(estado== 'f'){
		f_last_state == true
		digitalWrite(10,HIGH);   // Pulso Led verde (1 segundo)
	}

	if( e_last_state == true ){
		unsigned long currentMillis = millis();
		if( currentMillis - e_elapsed > interval ){
			digitalWrite(11,LOW);
			e_last_state = false;
		}
	}
	if( f_last_state == true ){
		unsigned long currentMillis = millis();
		if( currentMillis - f_elapsed > interval ){
			digitalWrite(10,LOW);
			f_last_state = false;
		}
	}
}

Después decime si funcionó.

Saludos!

@MaxiCane
lo probé, enciende y queda fijo

Moderador:
No repitas lo que se lee arriba
2da advertencia.

:frowning:

Es que por la hora que es, ya estoy cansado y me olvidé de lo básico: faltaron dos líneas importantes!

e_elapsed = currentMillis;
f_elapsed = currentMillis;

Este sería el código, probalo y decime si ahora funciona ok.

int interval = 1000; // Tiempo en el que debería apagarse en milisegundos
int e_elapsed = 0;
bool e_last_state = false;

int f_elapsed = 0;
bool f_last_state = false;

void setup(){

  Serial.begin(9600);

  pinMode(13,OUTPUT); // On-Off Led rojo
 
  pinMode(12,OUTPUT); // On-Of Led azul
 
  pinMode(11,OUTPUT); // Pulso para encender Led amarillo (1 segundo)
 
  pinMode(10,OUTPUT); // Pulso para encender Led verde (1 segundo)

  delay(1000);
}

void loop(){

	if(Serial.available()>0){       
		estado = Serial.read();
	}

	if(estado== 'a'){                   
		digitalWrite(13,HIGH); // ON Led rojo
	}

	if(estado== 'b'){                   
		digitalWrite(13,LOW); // OFF Led rojo
	}

	if(estado== 'c'){                   
		digitalWrite(12,HIGH); // ON Led azul
	}

	if(estado== 'd'){                   
		digitalWrite(12,LOW); // OFF Led azul
	}

	if(estado== 'e' ){
		e_last_state == true;
		digitalWrite(11,HIGH);   // Pulso Led amarillo (1 segundo)
	}
	if(estado== 'f'){
		f_last_state == true;
		digitalWrite(10,HIGH);   // Pulso Led verde (1 segundo)
	}

	if( e_last_state == true ){
		unsigned long currentMillis = millis();
		if( currentMillis - e_elapsed > interval ){
			e_elapsed = currentMillis;
			digitalWrite(11,LOW);
			e_last_state = false;
		}
	}
	if( f_last_state == true ){
		unsigned long currentMillis = millis();
		if( currentMillis - f_elapsed > interval ){
			f_elapsed = currentMillis;
			digitalWrite(10,LOW);
			f_last_state = false;
		}
	}
}

Sigue igual

Moderador:
No repitas lo que se lee arriba
3ra y última advertencia.

No es que yo sepa mucho de programación pero si no te funcionó con delay, podrías probar con un return nulo

 if(estado== 'e' ){
       digitalWrite(11,HIGH);   // Pulso Led amarillo (1 segundo)
       delay(1000);
       digitalWrite(11,LOW);
       return() // nueva línea para evitar ciclo
 }
 if(estado== 'f'){
       digitalWrite(10,HIGH);   // Pulso Led verde (1 segundo)
       delay(1000);
       digitalWrite(10,LOW);
       return() // nueva línea para evitar ciclo
 }

El código de @MaxiCane está bien el único problema es que como el valor de estado siempre es 'f' siempre se va a mantener encendido por lo que tienes que borrar el valor de estado cuando se cumple el tiempo que se mantiene encendido, ahora yo no utilizaría tanto if si no un switch case.

@Swift

Me lo podrías explicar al código utilizando switch case?

@matiichiquii
Lee el privado que te envié por favor!!