import machine
import time
from machine import Pin, I2C, PWM
import ssd1306
# Configuración de la pantalla OLED
i2c = I2C(scl=Pin(21), sda=Pin(19))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# Configuración del sensor PIR
pir_pin = Pin(35, Pin.IN)
# Configuración del botón
button_pin = Pin(14, Pin.IN, Pin.PULL_UP)
# Configuración de los servos
servo1 = PWM(Pin(18), freq=50)
servo2 = PWM(Pin(5), freq=50)
# Función para mover un servo a una posición específica
def move_servo(servo, angle):
duty = int((angle / 90) * 1023 / 20 + 1023 / 20)
servo.duty(duty)
# Estado inicial de los servos
move_servo(servo1, 90)
move_servo(servo2, 90)
try:
while True:
pir_state = pir_pin.value()
button_state = not button_pin.value() # El botón está conectado a GND
# Actualizar la pantalla OLED
oled.fill(0) # Limpiar la pantalla
oled.text("PIR: {}".format("Detectado" if pir_state else "No detectado"), 0, 0)
oled.text("Boton: {}".format("Presionado" if button_state else "No presionado"), 0, 10)
oled.show()
if pir_state:
# Si se detecta movimiento, mover el servo2 a 0 grados
move_servo(servo2, 0)
else:
# Si no se detecta movimiento, volver servo2 a 90 grados
move_servo(servo2, 90)
if button_state:
# Si el botón está presionado, mover el servo1 a 0 grados
move_servo(servo1, 0)
else:
# Si el botón no está presionado, volver servo1 a 90 grados
move_servo(servo1, 90)
time.sleep(0.1)
except KeyboardInterrupt:
# Apagar PWM en caso de interrupción
servo1.deinit()
servo2.deinit()
print("Programa terminado")