Ejercicio 03 — Dos LEDs que se alternan (coche fantástico simple)

Dificultad: verde · Módulo 01 (Fundamentos y GPIO digital)

Enunciado

Dos LEDs que se alternan (coche fantástico simple): uno on mientras el otro off.

Montaje (Arduino UNO)

Pin 8 220 ohm LED A GND ; pin 9 220 ohm LED B GND.

UNO pin 8 ──[220Ω]──►|── GND      (LED A)
UNO pin 9 ──[220Ω]──►|── GND      (LED B)

Cómo se resuelve

Dos LEDs que se alternan: cuando uno está encendido, el otro está apagado, y viceversa. El montaje es el del ejercicio anterior repetido: cada LED con su resistencia de 220 Ω, uno en el pin 8 y otro en el pin 9, ambos con la vuelta a GND.

Con dos pines en juego, escribir los números a pelo empieza a doler, así que se declaran los dos con nombre:

const int LED_A = 8;
const int LED_B = 9;

Y en setup() hay que configurar los dos como salida. Olvidar uno es el fallo típico aquí, y produce un síntoma muy despistante: un LED funciona bien y el otro se comporta de forma errática, lo que hace pensar en un problema de cableado cuando en realidad falta una línea de pinMode.

La clave del ejercicio está en el loop(). La alternancia no se consigue solo encendiendo, sino encendiendo uno y apagando el otro en el mismo instante:

digitalWrite(LED_A, HIGH);
digitalWrite(LED_B, LOW);
delay(400);
digitalWrite(LED_A, LOW);
digitalWrite(LED_B, HIGH);
delay(400);

Los digitalWrite son instantáneos: se ejecutan uno detrás de otro en microsegundos, así que a efectos prácticos el cambio es simultáneo. La espera sí se pone una sola vez por estado, después de haber dejado los dos pines como corresponde. Si pusieras un delay entre el encendido de A y el apagado de B, durante ese tiempo los dos estarían encendidos a la vez y perderías la alternancia.

Este es el patrón que necesitarás en el semáforo del siguiente ejercicio: un estado no es “enciendo esto”, es “dejo todos los pines como deben estar en este estado”.

Para practicar — cópialo y complétalo

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

/*
 * Curso de Arduino — Módulo 01: Fundamentos y GPIO digital
 * Ejercicio 03 — PRÁCTICA (rellena los TODO)
 * Enunciado: Dos LEDs que se alternan: uno on mientras el otro off.
 * Dificultad: verde
 * Placa: Arduino UNO
 * Montaje: pin 8 -> 220 ohm -> LED A -> GND ; pin 9 -> 220 ohm -> LED B -> GND.
 */
const int LED_A = 8;
const int LED_B = 9;
 
void setup() {
    // TODO: configura LED_A y LED_B como salidas
}
 
void loop() {
    // TODO: enciende A y apaga B, espera 400 ms
    // TODO: apaga A y enciende B, espera 400 ms
}

Solución — cópiala y ejecútala

/*
 * Curso de Arduino — Módulo 01: Fundamentos y GPIO digital
 * Ejercicio 03 — MODELO (resuelto)
 * Enunciado: Dos LEDs que se alternan (coche fantástico simple): uno on mientras el otro off.
 * Dificultad: verde
 * Placa: Arduino UNO
 * Montaje: pin 8 -> 220 ohm -> LED A -> GND ; pin 9 -> 220 ohm -> LED B -> GND.
 */
const int LED_A = 8;
const int LED_B = 9;
 
void setup() {
    pinMode(LED_A, OUTPUT);
    pinMode(LED_B, OUTPUT);
}
 
void loop() {
    digitalWrite(LED_A, HIGH);
    digitalWrite(LED_B, LOW);
    delay(400);
    digitalWrite(LED_A, LOW);
    digitalWrite(LED_B, HIGH);
    delay(400);
}

Cómo ejecutar la simulación

Sin instalar nada, en el navegador

  1. Abre wokwi.com y crea un proyecto nuevo de la placa que pide el ejercicio.
  2. Pega la solución (o tu intento) en la pestaña sketch.ino.
  3. Abre la pestaña diagram.json, borra lo que haya y pega el circuito de aquí abajo.
  4. Dale al play. Verás el circuito funcionando: LEDs, pantallas y monitor serie.
Circuito del ejercicio (diagram.json)
{
  "version": 1,
  "author": "ESIBot",
  "editor": "wokwi",
  "parts": [
    { "type": "wokwi-arduino-uno", "id": "uno", "top": 0, "left": 0, "attrs": {} },
    { "type": "wokwi-led", "id": "ledA", "top": -50, "left": 150, "attrs": { "color": "red" } },
    { "type": "wokwi-led", "id": "ledB", "top": -50, "left": 220, "attrs": { "color": "green" } },
    { "type": "wokwi-resistor", "id": "r1", "top": 100, "left": 150, "attrs": { "value": "220" } },
    { "type": "wokwi-resistor", "id": "r2", "top": 140, "left": 150, "attrs": { "value": "220" } }
  ],
  "connections": [
    [ "uno:8", "r1:1", "green", [] ],
    [ "r1:2", "ledA:A", "green", [] ],
    [ "ledA:C", "uno:GND.1", "black", [] ],
    [ "uno:9", "r2:1", "green", [] ],
    [ "r2:2", "ledB:A", "green", [] ],
    [ "ledB:C", "uno:GND.2", "black", [] ]
  ],
  "dependencies": {}
}

En VS Code, con el repo del curso

El paquete de simulación de este ejercicio está en practica/01-fundamentos/wokwi/ej03/. Con la extensión Wokwi instalada y la licencia activada (lo cuenta el onboarding del curso):

make sim EJ=01-fundamentos/ej03

y después, en VS Code, Ctrl+Shift+PWokwi: Start Simulator. La extensión no compila: simula un firmware ya compilado, y de compilarlo se encarga ese make.

Cómo usarlo

Con placa: abre el .ino en el Arduino IDE, elige placa y puerto y pulsa Subir. Sin placa: simulalo en Wokwi con cualquiera de las dos vias de arriba. Antes de mirar la solucion, intenta completar tu el esqueleto: es la mejor forma de aprender.

Conexiones