LED de iluminación con teclado y microcontrolador

0

Así que estoy trabajando con Gizduino (clon de Arduino), teclado y led. Lo que estoy haciendo es obtener el valor de la tecla presionada y luego encender el LED de acuerdo con el valor (por ejemplo, cuando presioné 2 en el teclado, parpadearán los 2 LED). Sé que esto es básico pero por favor ten paciencia conmigo. Tengo este código (no incluiré algunas cosas realmente básicas como el mapeo de teclas o algo que no esté relacionado con mi pregunta).

int led1 = A0;
int led2 = A1;

void setup()
{


pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);


}

void loop()
{
   char keypressed = myKeypad.getKey();

   if(keypressed != NO_KEY)
   {

       if(keypressed > 47 && keypressed < 58)  // is between '0' and '9'
       {
           if(!mySwitch)
           {
               num1 = (num1 * 10) + (keypressed - 48);
           }
           else
           {
               num2 = (num2 * 10) + (keypressed - 48);
           }

           if(keypressed = '1')
           {
               digitalWrite(led1, HIGH);
               delay(500);
               digitalWrite(led1,LOW);
               delay(500);
           }
           if(keypressed = '2')
           {

               digitalWrite(led2, HIGH);
                delay(500);
               digitalWrite(led2,LOW);
               delay(500);

        }
    }
}

Lo que pasa es que cuando presiono '1' en el teclado, el primer led parpadeará y luego el segundo también lo hará. ¿Por qué está pasando esto? ¿Hay algún problema en mi código?

    
pregunta NewInEverything

1 respuesta

2

El operador de prueba de igualdad es == , el operador de asignación es = .

Estás usando = en lugar de ==, por lo que la condición if siempre se vuelve verdadera.

Esta línea if(keypressed == '1') asigna el carácter 1 a la variable keypressed , ya que keypressed se convierte en un valor distinto de cero, la condición if siempre es verdadera.

El código debería ser como:

if(keypressed == '1')
{
    digitalWrite(led1, HIGH);
    delay(500);
    digitalWrite(led1, LOW);
    delay(500);
}

if(keypressed == '2')
{

    digitalWrite(led2, HIGH);
    delay(500);
    digitalWrite(led2, LOW);
    delay(500);

}
    
respondido por el alexan_e

Lea otras preguntas en las etiquetas