# ############################################################################
# ** Proyecto : Clase RGB, Semaforo, Utilizando Herencia de Clase Led
# ** Herramienta : https://www.wokwi.com
# ** : Thonny aplicacion de escritorio descargar en www.thonny.org
# ** Compilador : wokwi Simulador online
# ** Version : 1.0
# ** Fecha/Hora : 30-10-2024, 1:45 am,
# **
# ** Descripción del programa :
# ** Este programa prende y apaga el led RGB, los argumentos son los pines
# ** donde se conecta el led RGB y el tipo de RGB
# ** " c = catodo comun", se utiliza herencia / programacion Orientada a Objetos (POO)
# **
# **
# ** Versión : 1
# ** Revisión : A
# ** Release : 0
# ** Bugs & Fixes :
# ** Date : 30/10/2024
# **
# ** By : Jorge Anzaldo
# ** contact : [email protected]
# ** twitter x : @janzaldob
#############################################################################
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# : Bibliotecas / Modulos |
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
from machine import Pin
import time
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# | Definición y Desarrollo de CLASES |
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class Componente:
def __init__(self, *pin):
self._n = len(pin)
self._pin = []
self._led = []
for i in range(self._n ):
self._pin.append(pin[i])
self.configurar()
print(f'El objeto {self} fue CONSTRUIDO ')
def configurar(self):
for i in range(self._n ):
self._led.append(Pin(self._pin[i],Pin.OUT))
class Led(Componente):
def __init__(self,*pin):
super().__init__(*pin) # Llama al constructor de la superclase
super().configurar()
def prender(self):
for i in range(self._n ):
self._led[i].value(1)
time.sleep(0.5)
def apagar(self):
for i in range(self._n ):
self._led[i].value(0)
time.sleep(0.5)
class Semaforo(Led):
def __init__(self,*pin):
super().__init__(*pin)
super().configurar()
def rojo(self):
self._led[0].value(1)
time.sleep(0.5)
def amarillo(self):
self._led[1].value(1)
time.sleep(0.5)
def verde(self):
self._led[2].value(1)
time.sleep(0.5)
class RGB(Led):
def __init__(self,*pin):
super().__init__(*pin)
super().configurar()
def rojo(self):
self._led[0].value(1)
self._led[1].value(0)
self._led[2].value(0)
time.sleep(1)
def verde(self):
self._led[0].value(0)
self._led[1].value(1)
self._led[2].value(0)
time.sleep(1)
def azul(self):
self._led[0].value(0)
self._led[1].value(0)
self._led[2].value(1)
time.sleep(1)
# +-------------------------------------------------------------------------------
# | V A R I A B L E S G L O B A L E S U O B J E T O S |
# +-------------------------------------------------------------------------------
ledInterno = Led(2)
semaforo = Semaforo(15,16,17)
ledRGB = RGB(21,19,18)
# ===============================================================================
# || ||
# || P R O G R A M A / F U N C I O N P R I N C I P A L ||
# || ||
# ===============================================================================
if __name__ == '__main__':
while True:
ledInterno.prender()
ledInterno.apagar()
semaforo.rojo()
semaforo.apagar()
semaforo.amarillo()
semaforo.apagar()
semaforo.verde()
semaforo.apagar()
ledRGB.rojo()
ledRGB.verde()
ledRGB.azul()
ledRGB.apagar()
'''
# ********************************************************************************
#
# R E F E R E N C I A S / C O M E N T A R I O S
#
# --- Herencia ---
# Por supuesto, una característica del lenguaje no sería digna del nombre «clase» si no soportara herencia.
# La sintaxis para una definición de clase derivada se ve así:
#
# class DerivedClassName(BaseClassName):
# <statement-1>
# .
# .
# .
# <statement-N>
# El nombre ClaseBase debe estar definido en un ámbito que contenga a la definición de la clase derivada.
# En el lugar del nombre de la clase base se permiten otras expresiones arbitrarias. Esto puede ser útil,
# por ejemplo, cuando la clase base está definida en otro módulo:
# class DerivedClassName(modname.BaseClassName):
# La ejecución de una definición de clase derivada procede de la misma forma que una clase base.
# Cuando el objeto clase se construye, se tiene en cuenta a la clase base. Esto se usa para resolver
# referencias a atributos: si un atributo solicitado no se encuentra en la clase, la búsqueda continúa por la clase base.
# Esta regla se aplica recursivamente si la clase base misma deriva de alguna otra clase.
#
# https://docs.python.org/es/3.6/tutorial/classes.html
# *********************************************************************************
'''