# 1.- ---------------- Encabezado ----------------------------------------------
# Autor : Jorge Anzaldo
# Fecha : 20/04/2026
# Descripcion del programa :
# Este programa ejemplifica el uso de Programación Orientada a Objetos (POO)
# en MicroPython para controlar LEDs mediante la creación de una clase.
# Se explican los conceptos de clase, objeto, atributos, métodos y composición.
# 2.- ---------------- Importación de Módulos y Bibliotecas --------------------
from machine import Pin
import time
# 3.- ---------------- Definición de Funciones o Clases ------------------------
"""
CLASE:
Una clase es una plantilla o molde para crear objetos.
En este caso, la clase Led representa el comportamiento de un LED físico.
"""
class Led:
def __init__(self, numeroPin):
"""
MÉTODO CONSTRUCTOR:
Se ejecuta automáticamente al crear un objeto.
ATRIBUTOS:
- numeroPin: almacena el número de pin donde está conectado el LED
- led: objeto de tipo Pin (composición)
COMPOSICIÓN:
Se utiliza la clase Pin dentro de la clase Led.
Esto significa que Led "tiene un" Pin.
"""
self.numeroPin = numeroPin # Atributo simple
self.led = Pin(self.numeroPin, Pin.OUT) # Objeto compuesto (Pin)
print(f"El objeto {self} fue construido")
def prender(self, tiempo=0):
"""
MÉTODO:
Define una acción que puede realizar el objeto.
Enciende el LED y opcionalmente lo apaga después de un tiempo.
"""
self.led.on()
time.sleep(tiempo)
if tiempo != 0:
self.led.off()
def apagar(self, tiempo=0):
"""
MÉTODO:
Apaga el LED y espera un tiempo opcional.
"""
self.led.off()
time.sleep(tiempo)
def parpadear(self, veces=5):
"""
MÉTODO:
Hace parpadear el LED un número determinado de veces.
"""
for i in range(veces):
self.prender(0.2)
self.apagar(0.2)
def __str__(self):
"""
MÉTODO ESPECIAL:
Devuelve una representación en texto del objeto.
"""
return f"led conectado al pin {self.numeroPin}"
def __del__(self):
"""
MÉTODO DESTRUCTOR:
Se ejecuta cuando el objeto se elimina de memoria.
"""
print(f"El objeto {self} fue destruido")
# 4.- ---------------- Variables u Objetos Globales ----------------------------
"""
OBJETOS:
Un objeto es una instancia de una clase.
Aquí se crean varios objetos de la clase Led, cada uno con un pin diferente.
"""
led_verde = Led(4)
led_amarillo = Led(16)
led_rojo = Led(17)
led_morado = Led(5)
# 5.- ---------------- Bloque Principal ----------------------------------------
if __name__ == "__main__":
"""
BLOQUE PRINCIPAL:
Aquí se controla el flujo principal del programa.
Se ejecuta solo cuando el archivo es ejecutado directamente.
"""
while True:
led_morado.prender()
led_verde.prender(3)
led_amarillo.parpadear()
led_rojo.prender(3)
# 6.- ---------------- Documentación y Comentarios------------------------------
"""
RESUMEN CONCEPTUAL:
1. CLASE:
Es una plantilla para crear objetos.
Ejemplo: class Led
2. OBJETO:
Es una instancia de una clase.
Ejemplo: led_verde, led_rojo
3. ATRIBUTOS:
Son variables dentro de un objeto.
Ejemplo: self.numeroPin, self.led
4. MÉTODOS:
Son funciones dentro de una clase.
Ejemplo: prender(), apagar(), parpadear()
5. COMPOSICIÓN:
Es cuando una clase utiliza otra clase dentro de sí.
Ejemplo:
self.led = Pin(self.numeroPin, Pin.OUT)
Aquí, la clase Led contiene un objeto de la clase Pin.
"""