Go Down

Topic: Conexion/desconexion de LED (Read 196 times) previous topic - next topic

ProtoArdu

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 :)

Code: [Select]
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);
  }
}

_Gromek

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:

Code: [Select]
bool estado1 = 0;
bool estado2 = 0;
int recibido = 0;



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

Code: [Select]
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 :)
Todos somos ignorantes, lo ke pasa es ke todos no ignoramos las mismas kosas...

FranciscoIgorra

Te ha sobrado el estado2, jejejeje

_Gromek

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 :smiley-roll:
Todos somos ignorantes, lo ke pasa es ke todos no ignoramos las mismas kosas...

Danicap

Partiendo de la base que está bien lo que has hecho
Code: [Select]
if(recibido == 'a')       
  {
   if (estado1 == 0)
   {
    digitalWrite(11,HIGH);
    estado1 = 1;
   }
   else
   {
    digitalWrite(11,LOW);
    estado1 = 0;
   }


Una propuesta:

Code: [Select]
if(recibido == 'a')       
  {
      estado1 = !estado1;
      digitalWrite(11,estado1);
   
  }


Un saludo

Arduinito

#5
May 10, 2017, 11:17 am Last Edit: May 10, 2017, 11:21 am by Arduinito
Una propuesta:

Code: [Select]
if(recibido == 'a')      
  {
      estado1 = !estado1;
      digitalWrite(11,estado1);
    
  }


Un saludo

Si por quitar líneas que no sea :smiley-mr-green:

Code: [Select]
digitalWrite(11, estado1 = (recibido == 'a') ? !estado1 : estado1);


:smiley-mr-green: :smiley-mr-green: :smiley-mr-green: 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 :smiley-draw:

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

ProtoArdu


Go Up