############################
# E020_LEDRGB_PWM.PY: Modula luminosidad de LED RGB por PWM
# ENTRADAS: Valores inicio, fin y paso dutycycle de PWM
# SALIDAS: Modulación intensidad en GPIO32 LED rojo
############################
import machine
import time
# Configura los pines GPIO para el LED RGB
pin_R = machine.Pin(32, machine.Pin.OUT) # en este escript usamos solo éste
pin_G = machine.Pin(12, machine.Pin.OUT)
pin_B = machine.Pin(14, machine.Pin.OUT)
# Configura el PWM en los pines correspondientes
pwm_R = machine.PWM(pin_R, 1023) # 1023 para que inicie apagado
# Valor inicial del ciclo de trabajo para el LED rojo (0-1023)
inicio = 1023 # mayor dutycycle menor iluminación (LED ánodo común)
fin = 100 # no es necesario todo el rango de 0-1023
paso = 10 # el PWM del ESP32 es de 10bit 2^10=1024 niveles
ciclo_de_trabajo_R = inicio
# Dirección del cambio en el ciclo de trabajo (paso para aumentar, -paso para disminuir)
direccion_R = -paso # Para que comience subiendo luminosidad
# Bucle principal del programa
try:
while True:
# Establece el ciclo de trabajo del PWM para el LED rojo
pwm_R.duty(ciclo_de_trabajo_R)
# Apaga los LED verde y azul (estableciendo los pines en 1)
pin_G.value(1)
pin_B.value(1)
# Imprime el valor actual del ciclo de trabajo para el LED rojo
print(f"Ciclo de trabajo (Rojo): {ciclo_de_trabajo_R}")
# Incrementa o decrementa el ciclo de trabajo del LED rojo
ciclo_de_trabajo_R += direccion_R
# Cambia la dirección si llegamos a los extremos (0 o 1023)
if ciclo_de_trabajo_R <= fin or ciclo_de_trabajo_R >= inicio:
direccion_R = -direccion_R
# Espera un breve período de tiempo
time.sleep(0.01)
except KeyboardInterrupt:
# Detener el bucle cuando se presiona Ctrl+C
print("\nDeteniendo el programa.")
finally:
# Detener el PWM y apagar los LED al finalizar
pwm_R.deinit()
pin_R.init(mode=machine.Pin.OUT) # Reconfigurar el pin como salida
pin_R.value(1) # Apagar el LED rojo
pin_G.value(1) # Apagar el LED verde
pin_B.value(1) # Apagar el LED azul
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4