Operaciones lógicas

Con la instrucción if, ya vista en el tema pulsadores, vimos un condicional, si el pulsador esta activado, enciende una luz.

En este tema vamos a ampliar las posibilidades de la instrucción if, aumentando el numero de condiciones para realizar una acción.

Ejemplos:

  • Si esta activado el pulsador uno Y el pulsador dos enciendo un led
  • Si esta activado el pulsador uno O el pulador dos enciendo un led
  • Si esta activado el pulsador uno Y NO esta activado el pulsador dos enciendo un led

Ejercicio: En una instalación con tres led conectados a los pines 2,3 y 4 y tres pulsadores conectados a los pines 5,6 y 7.

El led 2 se encenderá si activo los pulsadores 5 y 6 y no activo el 7

El led 3 se encenderá si activo el pulsador 5 o el 6

El led 4 se encenderá si no pulso el 5

SOLUCIÓN

void setup() {
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
}
void loop() 
{
  if (digitalRead(5) == HIGH && digitalRead(6) == HIGH &&  digitalRead(7)== LOW) 
  {
  digitalWrite(2, HIGH); 
  }// podia haberlo puesto todo en una linea
  else digitalWrite(2, LOW); // solo una condición no necesito y por lo tanto no pongo llaves

  if (digitalRead(5) == HIGH || digitalRead(6) == HIGH) digitalWrite(3, HIGH);
  else digitalWrite(3, LOW);

  if (digitalRead(5) == LOW) digitalWrite(4, HIGH);
  else digitalWrite(4, LOW);
}

Con siguiente programa si activamos el pulsador conectado al pin 5, el led verde parpadea con una frecuencia de medio segundo, si pulsamos los pulsadores conectados a 6 o 7 se encienden los led rojo y amarillo.

void setup() 
{
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
}
void loop() 
{
  if (digitalRead(5) == HIGH)
  {
  digitalWrite(2,HIGH); 
  delay(500);
  digitalWrite(2,LOW); 
  delay(500);
  }
  else digitalWrite(2,LOW);

  if (digitalRead(7) == HIGH || digitalRead(6) == HIGH ) 
  {
  digitalWrite(4,HIGH); 
  digitalWrite(3,HIGH);
  }
  else 
  {
  digitalWrite(4, LOW);
  digitalWrite(3,LOW);
  }
}

Si el parpadeo lo realizamos con una frecuencia de 2 segundos, observamos que las reación si pulso el pulsador del pin5 y luego el pulsador del pin6 o del pin7 observo que tardan casi 4 segundos en encender desde la pulsación de uno de estos, y pasa algo similar en el apagado.

Esto se solucionará mas adelante cuando cambiemos la instrucción delay por otra.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *