Objetivos
En este laboratorio aprenderás a:
- Entender qué es un bucle en programación.
- Usar repetición para controlar múltiples LEDs.
- Crear patrones de luz.
- Introducir la idea de secuencias y automatización.
- Mejorar la lógica de programación con estructuras repetitivas.
Material necesario
- Circuit Playground Express
- Cable USB
- Computadora con CircuitPython
- Código de laboratorios anteriores
Introducción
Hasta ahora has aprendido a:
- Encender y apagar luces
- Usar botones para tomar decisiones
- Hacer programas interactivos
Pero hay un problema importante:
👉 ¿Qué pasa si quieres repetir una acción muchas veces?
Por ejemplo:
- Encender 10 luces una por una
- Hacer parpadear una luz 100 veces
- Crear una animación
Si lo haces manualmente, sería muy largo y aburrido.
Aquí es donde aparece una de las ideas más importantes de la programación:
🔁 ¿Qué es un bucle?
Un bucle es una instrucción que permite repetir algo automáticamente.
Es como decir:
“Haz esto muchas veces sin que yo lo escriba una y otra vez”
Ejemplo cotidiano
Imagina que tienes que decir:
- “hola” 100 veces
Sin bucles sería:
- hola
- hola
- hola
- hola
(…hasta 100 líneas)
Con bucles es solo:
👉 “repite 100 veces: hola”
🧠 Curiosidad:
Los bucles son la base de los videojuegos, animaciones y robots.
Conociendo los NeoPixels como matriz
La placa tiene varias luces LED (NeoPixels).
Podemos imaginarlas como una fila:
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
Cada número representa una luz diferente.
Nuestro tercer programa
Vamos a crear una animación simple:
👉 Una luz verde que se mueve de un LED a otro
Código completo
import time
from adafruit_circuitplayground import cp
VERDE = (0, 255, 0)
APAGADO = (0, 0, 0)
cp.pixels.brightness = 0.2
while True:
for i in range(10):
cp.pixels[i] = VERDE
time.sleep(0.2)
cp.pixels[i] = APAGADO
Explicación del código
1. Bucle infinito
while True:
Significa:
👉 “repite todo para siempre”
Esto crea una animación sin fin.
2. Bucle FOR
for i in range(10):
Esto significa:
👉 “repite esto 10 veces”
La variable i cambia así:
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Cada número representa un LED.
3. Encender LED actual
cp.pixels[i] = VERDE
Esto enciende una luz específica.
4. Pausa
time.sleep(0.2)
Esto hace que podamos ver el movimiento.
5. Apagar LED
cp.pixels[i] = APAGADO
Esto limpia la luz antes de pasar a la siguiente.
💡 Curiosidad:
Este tipo de efecto se usa en letreros LED, robots y videojuegos retro.
Cómo funciona físicamente
El microcontrolador:
- Ejecuta el bucle
- Cambia el LED activo uno por uno
- Envía señales eléctricas a cada NeoPixel
- Crea la ilusión de movimiento
👉 En realidad NO se mueve la luz
👉 Solo se encienden LEDs diferentes muy rápido
Retos del laboratorio
🟢 Reto 1: Ida y vuelta
Haz que la luz:
- Vaya del LED 0 al 9
- Luego regrese del 9 al 0
💡 Pista: para la ida ya sabes usar range(10) (cuenta 0, 1, 2 … 9). Para la
vuelta necesitas contar al revés. range puede hacerlo si le das tres números:
dónde empieza, dónde termina y de cuánto en cuánto avanza (aquí, -1, o sea
hacia atrás):
for i in range(10): # ida: 0, 1, 2 ... 9
cp.pixels[i] = VERDE
time.sleep(0.2)
cp.pixels[i] = APAGADO
for i in range(9, -1, -1): # vuelta: 9, 8, 7 ... 0
cp.pixels[i] = VERDE
time.sleep(0.2)
cp.pixels[i] = APAGADO
En range(9, -1, -1): empieza en 9, baja de -1 en -1 y se detiene antes del-1, así que el último que enciende es el 0. Pon los dos bucles dentro delwhile True: para que el vaivén se repita sin parar.
💡 Objetivo: aprender bucles dobles.
🟡 Reto 2: Dos luces al mismo tiempo
Modifica el programa para que:
- Se encienda LED actual
- Y el siguiente LED también
Ejemplo:
- 0 y 1 encendidos
- 1 y 2 encendidos
- 2 y 3 encendidos
💡 Pista: si el LED de ahora es i, el siguiente es i + 1. Enciende los dos y
luego apágalos:
for i in range(9): # ¡ojo! hasta 8, no hasta 9
cp.pixels[i] = VERDE # LED actual
cp.pixels[i + 1] = VERDE # el siguiente
time.sleep(0.2)
cp.pixels[i] = APAGADO
cp.pixels[i + 1] = APAGADO
⚠️ Fíjate que aquí usamos range(9) (llega solo hasta 8), no range(10). ¿Por qué?
Porque el "siguiente" es i + 1: si i valiera 9, el siguiente sería el LED 10…
¡y ese no existe! Los LEDs van del 0 al 9, así que pedir el 10 da error.
💡 Objetivo: manipular múltiples posiciones.
🔴 Reto 3: Efecto “respiración”
Haz que:
- Todos los LEDs se enciendan lentamente
- Luego se apaguen lentamente
- Repitan el ciclo
💡 Pista: aquí no cambias qué LED enciendes, sino qué tan fuerte brilla, concp.pixels.brightness. Ese valor va de 0.0 (apagado) a 1.0 (máximo). Como range
solo cuenta números enteros, cuenta de 0 a 100 y divide entre 100 para obtener
el brillo:
for brillo in range(0, 100, 5): # sube: 0, 5, 10 ... 95
cp.pixels.brightness = brillo / 100
cp.pixels.fill(VERDE)
time.sleep(0.03)
for brillo in range(100, 0, -5): # baja: 100, 95 ... 5
cp.pixels.brightness = brillo / 100
cp.pixels.fill(VERDE)
time.sleep(0.03)
cp.pixels.fill(VERDE) enciende todas las luces del mismo color. El primer bucle
sube el brillo (inhala) y el segundo lo baja (exhala); ponlos dentro del while True:
para que respire sin parar. Cambia el 0.03 para respirar más rápido o más lento.
💡 Objetivo: controlar intensidad y ritmo.
Resumen del laboratorio
En este laboratorio aprendiste:
- Qué es un bucle y por qué es importante.
- Cómo usar
forpara repetir acciones. - Cómo controlar múltiples LEDs de forma ordenada.
- Cómo crear animaciones simples con código.
- Cómo la repetición es clave en programación y tecnología.
Ahora ya puedes crear movimiento con código:
👉 las luces ya no son estáticas, ahora se comportan como una animación viva
Valentina Tech