# -------------------------------------------------------
# Programa: Manejo de LEDs con PILAS en MicroPython (ESP32)
# Autor: Robles Cedillo Irving Xnuviko
# Grupo: 2CV13
# Fecha: 01/03/2025
# Descripción: Este programa simula el manejo de LEDs usando
# una estructura de pila (LIFO) con botones para
# insertar y extraer LEDs de la pila.
# -------------------------------------------------------
# -------------------------------------------------------
# Librerías / Módulos
# -------------------------------------------------------
from machine import Pin
import time
# -------------------------------------------------------
# Definición y Desarrollo de Funciones
# -------------------------------------------------------
class ControladorLED:
def __init__(self, ledPins):
self.ledPins = ledPins
self.leds = [Pin(pin, Pin.OUT) for pin in self.ledPins]
print(f"El objeto {self} fue creado")
class PilaLEDs(ControladorLED):
def __init__(self, pila):
super().__init__(ledPins)
self.pila = []
self.botonInsertar = Pin(16, Pin.IN, Pin.PULL_UP)
self.botonExtraer = Pin(17, Pin.IN, Pin.PULL_UP)
def insertarLed(self):
if len(self.pila) < len(self.leds):
led = self.leds[len(self.pila)]
led.value(1)
self.pila.append(led)
def extraerLed(self):
if self.pila:
led = self.pila.pop()
led.value(0)
def botonInput(self):
if not self.botonInsertar.value():
self.insertarLed()
time.sleep(0.3)
def botonEx(self):
if not self.botonExtraer.value():
self.extraerLed()
time.sleep(0.3)
# -------------------------------------------------------
# Variables / Objetos Globales
# -------------------------------------------------------
# -------------------------------------------------------
# Bloque principal
# -------------------------------------------------------
if __name__ == "__main__":
ledPins = [32,33,25,26,27,14,12,13]
p = PilaLEDs(ledPins)
while True:
p.botonInput()
p.botonEx()
# -------------------------------------------------------
# Referencias / Comentarios
# -------------------------------------------------------
# Este código utiliza MicroPython para manejar la pila de LEDs y los botones con ESP32.
# La clase PilaLEDs encapsula la lógica para manejar los LEDs y botones, promoviendo la reutilización.
# Los botones se leen para insertar o extraer LEDs de la pila.
# UML link: https://drive.google.com/file/d/1j4_ngaW-qOwHpEKSsIitXpOiZyk0oCt4/view?usp=sharing
#El uso de POO en este proyecto tiene varias ventajas clave:
#-.Reutilización de código: Las clases como `ControladorLED` y `PilaLEDs` permiten reutilizar lógica sin duplicar código.
#-.Modularidad: El código está dividido en clases específicas, lo que facilita la comprensión y el manejo.
#-.Mantenimiento y escalabilidad: Cambios y mejoras pueden hacerse en una clase sin afectar el resto del código.
#-.Abstracción: Se ocultan los detalles complejos, simplificando la interacción con el código.
#-.Encapsulamiento: Los detalles internos están protegidos, evitando cambios accidentales.
#-.Facilidad de depuración: Es más fácil localizar y corregir errores gracias a la estructura organizada del código.