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:
Si
led_encendido == 1→ encender LED 1.Si no, si
led_encendido == 2→ encender LED 2.Si no, si
led_encendido == 3→ encender LED 3.Si no, si
led_encendido == 4→ encender LED 4.Si no se cumple ninguna → encender todos los LEDs (acción por defecto).
Implementación en código
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
Variable inicial:
Declaramosled_encendido = 4.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? Sí → encendemos el LED en pin 10.
Caso por defecto:
Si el valor no es 1, 2, 3 ni 4 (ej:led_encendido = 8), se ejecuta elelsey 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
Publicar un comentario