61. Ifs anidados

 

Resolviendo problemas con condicionales anidados

Con lo que hemos aprendido hasta ahora, supongamos que te asignan esta tarea que vemos en el siguiente diagrama:

Instrucciones:
Cada LED está representado de la siguiente manera:

  • LED en el pin 13 → valor 1

  • LED en el pin 12 → valor 2

  • LED en el pin 11 → valor 3

  • LED en el pin 10 → valor 4

La tarea específica:
Encender el LED correspondiente a su valor, a partir de un valor ingresado en una variable llamada led_encendido de tipo entera.

Es decir, debemos declarar la variable led_encendido, asignarle un valor y, de acuerdo a ese valor y la información anterior, prender el pin correspondiente.
Ejemplo: Si led_encendido = 3, debemos encender el LED en el pin 11.


Limitaciones iniciales y necesidad de una nueva estructura

Inicialmente, con un único if y un else, solo podríamos evaluar una condición y su caso contrario. Pero aquí necesitamos comparar contra cuatro valores posibles (1, 2, 3 y 4).
Esto nos lleva a la necesidad de una estructura que amplíe nuestras posibilidades: los ifs anidados.

Con esta estructura, podemos crear un "árbol" de decisiones como el siguiente:

  1. Si led_encendido == 1 → encender LED 1.

  2. Si no, si led_encendido == 2 → encender LED 2.

  3. Si no, si led_encendido == 3 → encender LED 3.

  4. Si no, si led_encendido == 4 → encender LED 4.

  5. Si no se cumple ninguna → encender todos los LEDs (acción por defecto).


Implementación en código

cpp
int led_encendido = 4; // Asignamos un valor inicial

void setup() {
  // Configuración de pines
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
}

void loop() {
  // Evaluamos las condiciones anidadas
  if (led_encendido == 1) {
    digitalWrite(13, HIGH); // Enciende LED 1
  } 
  else if (led_encendido == 2) {
    digitalWrite(12, HIGH); // Enciende LED 2
  } 
  else if (led_encendido == 3) {
    digitalWrite(11, HIGH); // Enciende LED 3
  } 
  else if (led_encendido == 4) {
    digitalWrite(10, HIGH); // Enciende LED 4
  } 
  else {
    encenderTodosLosLEDs(); // Si no coincide, enciende todos
  }
}

void encenderTodosLosLEDs() {
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(10, HIGH);
}

Explicación paso a paso

  1. Variable inicial:
    Declaramos led_encendido = 4.

  2. Evaluación condicional:

    • ¿led_encendido == 1? No → pasamos al siguiente.

    • ¿led_encendido == 2? No → pasamos al siguiente.

    • ¿led_encendido == 3? No → pasamos al siguiente.

    • ¿led_encendido == 4 → encendemos el LED en pin 10.

  3. Caso por defecto:
    Si el valor no es 1, 2, 3 ni 4 (ej: led_encendido = 8), se ejecuta el else y enciende todos los LEDs.


Conclusión

Los ifs anidados nos permiten crear estructuras de decisión complejas, evaluando múltiples condiciones en secuencia. Cada else if agrega una nueva rama al árbol de decisiones, ampliando las posibilidades de nuestro programa.

¡Experimenta cambiando el valor de led_encendido y observa los resultados!


¿Te ha quedado claro cómo funcionan los ifs anidados? 😊

Comentarios

Entradas más populares de este blog

12. Demostracion de como usar Tinkercad para simular Arduino con circuitos

11. Ejemplos Básicos de Leds y Pulsadores

Lectura de Potenciómetro con Arduino Uno en Tinkercad