from machine import Pin, PWM
from utime import sleep
# Configuración de los pines
led = PWM(Pin(23), freq=1000)
boton_aumentar = Pin(18, Pin.IN, Pin.PULL_DOWN)
boton_disminuir = Pin(19, Pin.IN, Pin.PULL_DOWN)
interruptor = Pin(25, Pin.IN)
led1 = Pin(26, Pin.OUT)
led2 = Pin(27, Pin.OUT)
# Parte 3: Control del servomotor
servo = Servo(22)
# Variables para la intensidad de brillo del LED
duty_cycle = 0 # Intensidad de brillo inicial (0%)
step = 100 # Aumento/Disminución
# Función para actualizar la intensidad de brillo del LED
def update_led():
led.duty(duty_cycle)
print(f"Intensidad del LED actualizada: {duty_cycle}/1023")
# Bucle principal
# Parte 1:
while True:
if boton_aumentar.value() == 1:
if duty_cycle + step <= 1023:
duty_cycle += step
update_led()
print("boton_aumentar presionado: Aumentando intensidad.")
else:
print("Intensidad máxima!!!")
sleep(0.2) # Para evitar exceso de repeticiones del boton
if boton_disminuir.value() == 1:
if duty_cycle - step >= 0:
duty_cycle -= step
update_led()
print("boton_disminuir presionado: Bajando Disminuyendo intensidad.")
else:
print("Intensidad mínima!!!")
sleep(0.1) # Para evitar exceso de repeticiones del boton
# Parte 2: Control del interruptor y los 2 LEDs
estado_interruptor = interruptor.value()
if estado_interruptor:
led1.value(1) # Enciende LED1
sleep(0.2) # Para evitar exceso de repeticiones del boton
led2.value(0) # Apaga LED2
else:
led1.value(0) # Apaga LED1
sleep(0.2) # Para evitar exceso de repeticiones del boton
led2.value(1) # Enciende LED2
# Parte 3: Control del Servo
class Servo:
def __init__(self, pin, min_us=500, max_us=2500):
self.pin = pin
self.min_us = min_us
self.max_us = max_us
self.angle = 90
self.set_angle(self.angle)
def set_angle(self, angle):
if angle < 0:
angle = 0
elif angle > 180:
angle = 180
self.angle = angle
duty_us = int(self.min_us + (self.max_us - self.min_us) * angle / 180)
self.pwm.duty_ns(duty_us * 1000)
def goto(self, angle):
self.set_angle(angle)
def left(self, angle):
self.set_angle(self.angle - angle)
def right(self, angle):
self.set_angle(self.angle + angle)
# Crear una instancia del servo (ajusta los pines según tu conexión)
servo = Servo(13)
# Ejemplo de uso:
servo.goto(45) # Mover el servo a 45 grados
sleep(1)
servo.left(30) # Mover 30 grados a la izquierda
sleep(1)
servo.right(60) # Mover 60 grados a la derecha
Explicación del Código:
Clase Servo:
Constructor: Inicializa el pin PWM, establece la frecuencia y el ángulo inicial.
set_angle(): Calcula el ciclo de trabajo correspondiente al ángulo y lo establece.
goto(), left(), right(): Utilizan set_angle() para mover el servo.