# #############################################################################
# ** Proyecto : 3_4 Polimorfismo
# ** Plataforma : ESP32 / WROOM
# ** Herramienta : https://www.wokwi.com
# ** : Thonny aplicacion de escritorio descargar en www.thonny.org
# ** Compilador : wokwi Simulador online
# ** Version : 1.0
# ** Fecha/Hora : 19-10-2025, 6:45 pm,
# **
# ** Torre de Leds utilizando concepto de Herencia
# ** y tuplas, listas ciclo for
# **
# ** Versión : 1
# ** Revisión : A
# ** Release : 0
# ** Bugs & Fixes :
# ** Date : 19/10/2025
# **
# ** By : Jorge Anzaldo
# ** contact : [email protected]
# ** twitter x : @janzaldob
# #############################################################################
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# : Librerias / Bibliotecas / Modulos | :
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
from machine import Pin #https://docs.micropython.org/en/latest/library/machine.Pin.html
import time #https://docs.micropython.org/en/latest/library/time.html
import sys
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# | Definición y Desarrollo de Clase |
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
import time
from machine import Pin
# CLASE PADRE (BASE)
class Led:
def __init__(self, *pines, color="Azul"):
self._leds = [] # Lista para guardar los pines
self.color = color
self.estado = False # Estado general del LED (prendido/apagado)
for pin in pines:
led = Pin(pin, Pin.OUT) # Configura pin como salida
self._leds.append(led)
print(f'{self.__class__.__name__} construido con pines: {pines}')
def prender(self, tiempo=0):
for led in self._leds:
led.on()
self.estado = True
time.sleep(tiempo)
def apagar(self, tiempo=0):
for led in self._leds:
led.off()
self.estado = False
time.sleep(tiempo)
def parpadear(self, veces=3,tiempo=0.2):
for i in range(veces):
self.prender(tiempo)
self.apagar(tiempo)
def __str__(self):
estado = "PRENDIDO" if self.estado else "APAGADO"
return f"LED {self.color} -> {estado}"
def __del__(self):
print(f"LED {self.color} eliminado")
# SUBCLASE / CLASE HIJA
class TorreLed(Led):
def __init__(self, *pines):
super().__init__(*pines, color="Torre")
# No se llama aquí a prender/apagar/parpadear
def prender(self, tiempo=1):
print("PRENDIENDO TODA LA TORRE:")
super().prender(tiempo)
def apagar(self, tiempo=1):
print("APAGANDO TODA LA TORRE:")
super().apagar(tiempo)
def prender_izq_der(self,veces=3):
print("PRENDIENDO DE IZQUIERDA A DERECHA:")
for led in self._leds:
led.on()
time.sleep(0.1)
self.estado = True
time.sleep(0.5)
def prender_der_izq(self,veces=3):
print("PRENDIENDO DE IZQUIERDA A DERECHA:")
for led in reversed(self._leds):
led.on()
time.sleep(0.1)
self.estado = True
time.sleep(0.5)
def papadear(self):
print("PRENDIENDO DE IZQUIERDA A DERECHA:")
for led in self._leds:
super().parpadear()
time.sleep(0.1)
self.estado = True
time.sleep(0.1)
def mostrar_estado(self):
print("\nESTADO DE LA TORRE:")
for i, led in enumerate(self._leds):
print(f" - LED #{i+1} -> {'ON' if led.value() else 'OFF'}")
# +-------------------------------------------------------------------------------
# | V A R I A B L E S / O B J E T O S - G L O B A L E S |
# +-------------------------------------------------------------------------------
led = Led(2, color="Rojo") # LED individual
torre = TorreLed(13, 12, 14, 27, 26, 25, 33, 32) # Torre de LEDs
# ===============================================================================
# || B L O Q U E P R I N C I P A L ||
# ===============================================================================
if __name__ == "__main__":
try:
while True:
led.prender(1)
led.apagar(1)
torre.prender(1)
torre.apagar(1)
torre.parpadear()
torre.prender_izq_der()
torre.apagar()
torre.prender_der_izq()
torre.apagar()
torre.mostrar_estado()
except KeyboardInterrupt:
print("Programa detenido por el usuario.")
# ********************************************************************************
#
#
#
# R E F E R E N C I A S / C O M E N T A R I O S
#
# *********************************************************************************