from picozero import Speaker
from time import sleep
from machine import Pin, PWM
# Configuración de los pines
led_rojo = Pin(14, Pin.OUT)
led_verde = Pin(13, Pin.OUT)
led_rgb_rojo = Pin(12, Pin.OUT)
led_rgb_azul = Pin(11, Pin.OUT)
button = Pin(16, Pin.IN, Pin.PULL_UP)
button_speaker = Pin(17, Pin.IN, Pin.PULL_UP)
sensor = Pin(19, Pin.IN)
# Inicialización de LEDs
led_rojo.value(1)
led_verde.value(0)
led_rgb_rojo.value(0)
led_rgb_azul.value(0)
print(sensor.value())
# Creación del objeto Speaker
speaker = Speaker(15)
# Creación del objeto PWM para el servo motor
servo = PWM(Pin(28))
servo.freq(50)
# Función para ajustar el ángulo del servo
def set_servo_angle(servo, angle):
pulse_width = int(500 + (angle / 180) * 2000)
servo.duty_u16(pulse_width * 65535 // 20000)
# Función para controlar el portal
def control_portal():
if button.value() == 0 and sensor.value() == 0:
# Abrir portal
set_servo_angle(servo, 0)
led_rojo.value(0)
led_verde.value(1)
sleep(4)
else:
# Cerrar portal
set_servo_angle(servo, 90)
led_rojo.value(1)
led_verde.value(0)
# Función para controlar el speaker
def control_speaker():
speaker.on()
led_rgb_rojo.value(1)
sleep(1)
led_rgb_rojo.value(0)
led_rgb_azul.value(1)
sleep(1)
led_rgb_azul.value(0)
speaker.off()
# Posición inicial del servo (cerrado)
set_servo_angle(servo, 90)
# Variables para rastrear el estado de los botones
previous_button_speaker_state = button_speaker.value()
# Bucle principal
while True:
control_portal()
current_button_speaker_state = button_speaker.value()
if previous_button_speaker_state == 1 and current_button_speaker_state == 0:
# Botón presionado, llamar a control_speaker varias veces
for _ in range(3): # Número de veces para llamar a la función
control_speaker()
sleep(0.1) # Pequeño retraso entre llamadas a la función
previous_button_speaker_state = current_button_speaker_state
sleep(0.1) # Añadir un pequeño retraso para evitar el uso excesivo de la CPU