Conexion/desconexion de LED

Hola buenas, me gustaria que me ayudaseis a resolver el siguiente problema, yo uso la tecla 'a' para encender el LED y la tecla 'b' para apagarlo.

Me gustaria saber si me podrias decir como tengo que cambiar el codigo para encender y apagar el LED con la misma tecla, gracias :)

int estado=0;

void setup(){
  Serial.begin(9600);
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
}

void loop()
{
 if(Serial.available()>0)
 {
 estado = Serial.read();
 }
  if(estado =='a')        
  {
   digitalWrite(12,HIGH);
  }
  if(estado =='b')        
  {
   digitalWrite(12,LOW);
  }
  if(estado =='c')
  {
   digitalWrite(11,HIGH);
  }
  if(estado =='d')
  {
   digitalWrite(11,LOW);
  }
}

Hola ProtoArdu, la variable "estado" yo la usaria como booleana para saber si la salida 11 estaen HIGH o LOW y otra para la salida 12. Definiria asi:

bool estado1 = 0;
bool estado2 = 0;
int recibido = 0;

y para saber si recibo por serial y el estado de la salida asi:

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

  if(recibido == 'a')       
  {
   if (estado1 == 0)
   {
    digitalWrite(11,HIGH);
    estado1 = 1;
   }
   else
   {
    digitalWrite(11,LOW);
    estado1 = 0;
   }
  }

espero ayudarte :)

Te ha sobrado el estado2, jejejeje

Bueno Francisco, si te fijas, el compañero ProtoArdu en su codigo inicial, usa las letras “a” y “b” para manejar la salida 12, y las letras “c” y “d” para manejar la salida 11.
Entendí que quiere manejar las dos salidas (la 11 y la 12), por eso dos variables, estado1 y estado2, sólo hice un ejemplo para que el compañero desarrolle la otra, es la mejor forma de aprender… ¿no cree?

PD: Fijandome bien si que hay un error: ProtoArdu usa “a” y “b” para manejar la salida 12, yo las usé para la salida 11, pero creo que no es demasiado importante :roll_eyes:

Partiendo de la base que está bien lo que has hecho

if(recibido == 'a')       
  {
   if (estado1 == 0)
   {
    digitalWrite(11,HIGH);
    estado1 = 1;
   }
   else
   {
    digitalWrite(11,LOW);
    estado1 = 0;
   }

Una propuesta:

if(recibido == 'a')       
  {
      estado1 = !estado1;
      digitalWrite(11,estado1);
    
  }

Un saludo

Danicap: Una propuesta:

if(recibido == 'a')       
  {
      estado1 = !estado1;
      digitalWrite(11,estado1);
    
  }

Un saludo

Si por quitar líneas que no sea :grin:

digitalWrite(11, estado1 = (recibido == 'a') ? !estado1 : estado1);

:grin: :grin: :grin: Pero esto ya son manías de uno tras muchos años programando, quitar y quitar líneas. Todo el if y el cambio de estado en una línea y al menos a mí me sigue pareciendo bastante legible :art:

En Arduino no sé porque existe la manía de escribir tantas líneas... Apenas hay programadores metidos en esto :( :( :(

Muchas gracias a todos:)