💡 P03 - Secuencias de LEDs con arrays y temporización

ℹ️ Empieza aquí:

Hasta ahora controlabas LEDs de manera individual y secuencial usando variables sueltas.
En esta práctica aprenderás a usar arrays para manejar múltiples LEDs de forma ordenada y a crear patrones de encendido usando millis() para temporización sin bloquear el programa.
Esto permite que el programa siga respondiendo a entradas mientras los LEDs cambian de estado, y facilita añadir más LEDs o patrones en el futuro.


🚀 Objetivos

 Controlar múltiples LEDs usando arrays.
 Crear patrones de encendido dinámicos y escalables.
 Usar millis() para temporización sin bloquear.
 Mantener la capacidad de respuesta del programa a entradas externas.
 Introducir buenas prácticas de programación y modularidad.


🧩 Contenidos trabajados

 Arrays para manejar múltiples salidas.
 Temporización sin bloqueo (millis()).
 Patrones de secuencias de LEDs.
 Variables de estado y contadores.
 Lectura de entradas mientras se ejecutan secuencias.


💻 Materiales y recursos

 Arduino UNO.
 Protoboard.
 3 o más LEDs.
 Resistencias (220 Ω – 330 Ω).
 1 pulsador (opcional para pausar/reiniciar secuencia).
 Cables Dupont.
 Ordenador con Arduino IDE.

ℹ️ Nota:
El montaje eléctrico sigue siendo simple y escalable gracias al uso de arrays.


🔧 Montaje práctico

LEDs

Cómo hacerlo:

1. Coloca 3 o más LEDs en la protoboard.
2. Conecta cada ánodo a un pin digital mediante una resistencia:

  • LED1 → pin 8
  • LED2 → pin 9
  • LED3 → pin 10
    3. Conecta todos los cátodos a GND.

Pulsador (opcional)

Cómo hacerlo:

1. Coloca el pulsador en la protoboard.
2. Terminal → GND
3. Terminal opuesto → pin 2 (INPUT_PULLUP)


🧭 Desarrollo de la práctica

Paso 1: Crear el proyecto

1. Abrir Arduino IDE.
2. Archivo → Nuevo.
3. Guardar como: P03_LEDs_Arrays_ApellidoNombre


Paso 2: Declarar variables y arrays

Antes de setup():

const int numLEDs = 3;                  // número de LEDs  
int pinsLED[numLEDs] = {8, 9, 10};      // pines de cada LED  
int estadoLED = 0;                       // índice del LED activo  
unsigned long tiempoAnterior = 0;       
const unsigned long intervalo = 500;     // intervalo en ms  

Paso 3: Configurar pines en setup()

void setup() {  
  for (int i = 0; i < numLEDs; i++) {  
    pinMode(pinsLED[i], OUTPUT);  
    digitalWrite(pinsLED[i], LOW);      // apagamos todos al inicio  
  }  
  pinMode(2, INPUT_PULLUP);             // pulsador opcional  
}  

Paso 4: Lógica de secuencia en loop()

void loop() {  
  unsigned long tiempoActual = millis();  

  // comprobar intervalo  
  if (tiempoActual - tiempoAnterior >= intervalo) {  
    tiempoAnterior = tiempoActual;  

    // apagar todos los LEDs  
    for (int i = 0; i < numLEDs; i++) {  
      digitalWrite(pinsLED[i], LOW);  
    }  

    // encender LED correspondiente  
    digitalWrite(pinsLED[estadoLED], HIGH);  

    // avanzar al siguiente LED  
    estadoLED++;  
    if (estadoLED >= numLEDs) estadoLED = 0;  
  }  

  // pulsador opcional para reiniciar o pausar  
  int pulsador = digitalRead(2);  
  if (pulsador == LOW) {  
    estadoLED = 0;  
  }  
}  

✅ Comprobación de funcionamiento

  • Los LEDs se encienden uno tras otro en orden cíclico.
  • El programa sigue ejecutándose y puede responder al pulsador sin interrumpir la secuencia.
  • Agregar más LEDs es tan simple como ampliar el array pinsLED y actualizar numLEDs.

📦 Entrega

 Archivo .ino comentado y funcional.
 Fotografía de la secuencia de LEDs.
 Breve explicación de cómo funcionan arrays y millis() en la secuencia.


📊 Rúbrica de evaluación

Criterio Excelente (9–10) Adecuado (6–8) Insuficiente (≤5)
Montaje de LEDs Correcto, limpio y funcional Funciona parcialmente Incorrecto
Secuencia LED Todos los LEDs funcionan en patrón correcto Algunos LEDs fallan No funciona
Uso de arrays Código modular y escalable Funciona pero no modular No usa arrays
Uso de millis() Temporización correcta sin bloquear Temporización parcialmente correcta Usa delay()
Comprensión Explica bien la lógica Explicación parcial No comprende

🎯 Para pensar (opcional)

¿Cómo podrías cambiar fácilmente el patrón de encendido si tuvieras 6 LEDs en lugar de 3 usando el mismo programa?

Updated: