Tomo 4: Mejorando el Semáforo - Optimizando Código con el Bucle for

¡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.

Código Arduino

/*
 * 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)

Diagrama de conexión de la intersección vial intacta

💡 Conceptos Clave de la Misión

🚀 ¡Inténtalo Tú Mismo! (Retos)