# ============================================================
# INSTITUTO POLITÉCNICO NACIONAL - ESIME CULHUACÁN
# Asignatura: Microprocesadores
# Práctica: Secuencia Acumulativa Piramidal de Luces (1 a 6 LEDs)
# Implementación con Librería utime (Optimizado para Embebidos)
# ============================================================
# ------------------------------------------------------------
# BLOQUE 1: IMPORTACIÓN DE LIBRERÍAS
# ------------------------------------------------------------
# utime: Módulo nativo compilado en C para microcontroladores,
# opera con enteros en milisegundos evitando el cálculo en coma flotante.
from machine import Pin
import utime
# ------------------------------------------------------------
# BLOQUE 2: DECLARACIÓN Y CONFIGURACIÓN DE PINES (HARDWARE)
# ------------------------------------------------------------
# Se declaran individualmente los 6 pines (GP0 a GP5) como salidas digitales.
# O
# Si quicieramos ahorrar unas lineas mejores practicas en sistemas embebidos podríamos utilizar Comprensión de Diccionarios (Dictionary Comprehension)
# Inicializamos los pines como salidas digitales en un diccionario
# (Buena práctica en sistemas embebidos: se inicializan una sola vez en memoria)
# leds = {pin_num: Pin(pin_num, Pin.OUT) for pin_num in x}
# ------------------------------------------------------------
leds = [
Pin(0, Pin.OUT), # LED 1 -> GP0 (Pin físico 1)
Pin(1, Pin.OUT), # LED 2 -> GP1 (Pin físico 2)
Pin(2, Pin.OUT), # LED 3 -> GP2 (Pin físico 4)
Pin(3, Pin.OUT), # LED 4 -> GP3 (Pin físico 5)
Pin(4, Pin.OUT), # LED 5 -> GP4 (Pin físico 6)
Pin(5, Pin.OUT) # LED 6 -> GP5 (Pin físico 7)
]
#TIEMPO_ENCENDIDO_MS = 500 # 500 ms encendidos
#TIEMPO_APAGADO_MS = 300 # 300 ms apagados
# ------------------------------------------------------------
# BLOQUE 2.1: TIEMPO DE ENCENDIDO Y APAGADO O COMO BARRA DE LLENADO
# ------------------------------------------------------------
TIEMPO_PASO_MS = 400 #Tiempo que toma encender cada led
TIEMPO_LLENO_MS = 800 #Tiempo que quedan encendidos todos los LEDs
TIEMPO_APAGADO_MS = 400 #Tiempo que permanecen apagados todos los LEDs
# ------------------------------------------------------------
# ------------------------------------------------------------
# BLOQUE 3: BUCLE INFINITO DE CONTROL (SECUENCIA PIRAMIDAL)
# ------------------------------------------------------------
#while True:
# 'k' itera desde 1 hasta 6
# for k in range(1, len(leds) + 1):
# --- SUB-BLOQUE 3.1: ENCENDIDO ACUMULATIVO ---
# for led in leds[:k]:
# led.value(1)
# utime.sleep_ms(TIEMPO_ENCENDIDO_MS)
# # --- SUB-BLOQUE 3.2: APAGADO DE LA FILA ---
# for led in leds[:k]:
# led.value(0)
# utime.sleep_ms(TIEMPO_APAGADO_MS)
# --- SUB-BLOQUE 3.3: PAUSA DE REINICIO DE CICLO ---
# utime.sleep_ms(1000)
# ------------------------------------------------------------
# BLOQUE 3.1: BARRA DE LLENADO (CORREGIDO) hay que cuidar la identación
# ------------------------------------------------------------
while True:
# 1. Enciende uno por uno (adentro del while)
for led in leds:
led.value(1)
utime.sleep_ms(TIEMPO_PASO_MS)
# 2. Pausa con todos encendidos (adentro del while)
utime.sleep_ms(TIEMPO_LLENO_MS)
# 3. Apaga todos los LEDs (adentro del while)
for led in leds:
led.value(0)
# 4. Pausa con todos apagados antes de reiniciar (adentro del while)
utime.sleep_ms(TIEMPO_APAGADO_MS)
#CON LIBRERIA TIME BARRA DE PROGRESO QUE ES LO QUE SE PARECE MÁS A LAS INDICACIONES DE LA MAESTRA
#from machine import Pin
#import time
#leds = [
# Pin(0, Pin.OUT), Pin(1, Pin.OUT), Pin(2, Pin.OUT),
# Pin(3, Pin.OUT), Pin(4, Pin.OUT), Pin(5, Pin.OUT)
#]
#while True:
# 1. Se van sumando uno por uno
# for led in leds:
# led.value(1)
# time.sleep(0.4)
# 2. Pausa con todos encendidos
# time.sleep(0.8)
# 3. Se apagan todos de golpe
# for led in leds:
# led.value(0)
# 4. Pausa con todos apagados antes de repetir
# time.sleep(0.4)