from machine import Pin, PWM
import time
# Configuración PWM en GPIO 22, frecuencia de 50 Hz
servo = PWM(Pin(22), freq=50)
# Pines
pir = Pin(35, Pin.IN)     # Sensor PIR
led = Pin(23, Pin.OUT)    # LED indicador
# Rango de tiempos de pulso en milisegundos
t_min = 1.0   # ms (ángulo 0°)
t_max = 2.4   # ms (ángulo 180°)
t_ciclo = 20  # ms (período de 50 Hz)
sensor_activo = False
def mover_servo(inicio, fin, paso):
    """Mueve el servo entre los ángulos dados."""
    if inicio < fin:
        rango = range(inicio, fin + 1, paso)
    else:
        rango = range(inicio, fin - 1, -paso)
    for angulo in rango:
        t_pulso = t_min + (angulo / 180) * (t_max - t_min)
        duty = int((t_pulso / t_ciclo) * 1023)
        servo.duty(duty)
        time.sleep(0.05)
print("Sistema listo. Escribe 'open', 'on', 'off' o 'close'.")
while True:
    comando = input(">> ").strip().lower()
    #  COMANDO OPEN 
    if comando == "open":
        print("Abriendo servo...")
        mover_servo(0, 90, 5)
        print("Servo en 90°")
    #  COMANDO ON 
    elif comando == "on":
        print("Sensor activado. LED encenderá con movimiento.")
        sensor_activo = True
        while sensor_activo:
            if pir.value() == 1:
                led.on()
                print("Movimiento detectado")
            else:
                led.off()
            time.sleep(0.2)
            # Permite salir del modo sensor escribiendo 'off'
            comando_interno = input(">> ").strip().lower()
            if comando_interno == "off":
                print("Sensor desactivado y LED apagado.")
                led.off()
                sensor_activo = False
                break
    #  COMANDO OFF
    elif comando == "off":
        print("Sensor desactivado completamente.")
        led.off()
        sensor_activo = False
    #  COMANDO CLOSE 
    elif comando == "close":
        print("Cerrando servo...")
        mover_servo(90, 0, 5)
        print("Servo en 0°")
    else:
        print("Comando no reconocido. Usa: open / on / off / close.")