¡Excelente trabajo en la misión anterior! Tu semáforo funciona perfecto. Pero si revisas tu función activarPasoPeatonal(), notarás que para hacer sonar el buzzer varias veces, tuviste que copiar y pegar las mismas líneas de código repetidas veces. ¿Qué pasaría si necesitaras que el buzzer pitara 50 veces? Tu programa se haría inmenso. Para evitar este esfuerzo innecesario, hoy aprenderemos a usar la herramienta de automatización por excelencia: el bucle for.
🧠 Protagonista de Hoy: El Bucle for (El Repetidor Inteligente)
Un bucle for es una estructura de control que le dice al Arduino: "Repite esta tarea un número exacto de veces y luego continúa con el resto del programa". Se compone de tres partes dentro de sus paréntesis:
1. La inicialización: Crea una variable para contar (ej. int i = 1).
2. La condición: Hasta qué número va a llegar (ej. i <= 3).
3. El incremento: Cómo va a contar (ej. i++ significa que suma de 1 en 1).
💡 El Gran Dilema: Reduciendo el "Código Espagueti" en el Parpadeo
Los sistemas reales no solo encienden y apagan luces; parpadean para advertir urgencia (como el verde peatonal antes de acabarse el tiempo). Lograr esto repitiendo digitalWrite y delay una docena de veces consume mucha memoria de nuestro Arduino. Usando el for, reduciremos una coreografía larga a tan solo 5 líneas de código elegante.
🧠 El Código: El Semáforo Optimizado
Reescribiremos el código del Tomo 3, pero fíjate cómo la función personalizada de abajo ahora usa bucles para automatizar los pitidos de alerta del cruce peatonal.
/*
* Misión 04: El Semáforo Optimizado
* Descripción: Uso del bucle 'for' para reducir líneas de código al generar
* repeticiones de sonido y parpadeos en el cruce peatonal.
* Por: Profe Campos
* CECyTEM 05 Guacamayas
*/
// Pines del Semáforo
int cocheVerde = 10;
int cocheAmarillo = 11;
int cocheRojo = 12;
int peatonVerde = 8;
int peatonRojo = 9;
int pinBuzzer = 7;
int botonPeaton = 2;
void setup() {
pinMode(cocheVerde, OUTPUT);
pinMode(cocheAmarillo, OUTPUT);
pinMode(cocheRojo, OUTPUT);
pinMode(peatonVerde, OUTPUT);
pinMode(peatonRojo, OUTPUT);
pinMode(pinBuzzer, OUTPUT);
pinMode(botonPeaton, INPUT_PULLUP);
digitalWrite(cocheVerde, HIGH);
digitalWrite(peatonRojo, HIGH);
}
void loop() {
if (digitalRead(botonPeaton) == LOW) {
activarPasoPeatonal();
}
}
// --- FUNCIÓN PERSONALIZADA OPTIMIZADA ---
void activarPasoPeatonal() {
digitalWrite(cocheVerde, LOW);
digitalWrite(cocheAmarillo, HIGH);
delay(2000);
digitalWrite(cocheAmarillo, LOW);
digitalWrite(cocheRojo, HIGH);
delay(1000);
digitalWrite(peatonRojo, LOW);
digitalWrite(peatonVerde, HIGH);
// ¡PRIMER BUCLE FOR! - Ritmo de cruce seguro (Se repite 3 veces)
for (int cruce = 1; cruce <= 3; cruce++) {
tone(pinBuzzer, 800, 300);
delay(600);
}
// ¡SEGUNDO BUCLE FOR! - Alerta estroboscópica de prisa (Se repite 6 veces)
for (int i = 1; i <= 6; i++) {
digitalWrite(peatonVerde, LOW);
tone(pinBuzzer, 1400, 100); // Tono más agudo y rápido
delay(200);
digitalWrite(peatonVerde, HIGH);
delay(200);
}
digitalWrite(peatonVerde, LOW);
digitalWrite(peatonRojo, HIGH);
delay(1000);
digitalWrite(cocheRojo, LOW);
digitalWrite(cocheVerde, HIGH);
}
🔌 El Circuito: ¡Mantenemos la Intersección Vial!
¡Buenas noticias! Para esta misión no necesitas desconectar absolutamente nada. Mantenemos intacta la maqueta que construiste en el Tomo 3. Toda la "magia" y las mejoras de hoy ocurren exclusivamente en el "cerebro" (código) del Arduino, no en su hardware.
Diagrama del Circuito 4 (El mismo que el Tomo 3)
💡 Conceptos Clave de la Misión
- Variable Contadora (
i): Es una variable temporal que vive solo dentro del buclefor. Su único trabajo es llevar la cuenta de cuántas vueltas ha dado el ciclo. - Incremento (
++): Escribiri++es el equivalente en código a decir "suma uno al valor actual de la variable". - Optimización: La práctica de reescribir un código para que haga lo mismo, pero usando menos memoria y siendo más fácil de leer.
🚀 ¡Inténtalo Tú Mismo! (Retos)
- El Cruce Largo: Modifica la condición del primer bucle
forpara que el cruce peatonal seguro dure 10 pitidos en lugar de 3. ¡Ideal para avenidas anchas! - Efecto Parpadeo Extremo: Modifica los
delay()dentro del segundo bucleforbajándolos a50milisegundos. Haz que se repita 15 veces. ¿Cómo se ve la luz verde ahora?