from machine import Pin, I2C
from utime import sleep
import utime
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
I2C_ADDR = 0x27
I2C_NUM_ROWS = 4
I2C_NUM_COLS = 20
# Inicialización del I2C y LCD
i2c = I2C(1, sda=Pin(26), scl=Pin(27), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
#creo leds
rojo = Pin(16, Pin.OUT)
verde = Pin(17, Pin.OUT)
azul = Pin(18, Pin.OUT)
#creo botones
bot_red = Pin(21, Pin.IN, Pin.PULL_DOWN)
bot_blue = Pin(20, Pin.IN, Pin.PULL_DOWN)
bot_green = Pin(19, Pin.IN, Pin.PULL_DOWN)
#creo sensor
PIR = Pin(22,Pin.IN,Pin.PULL_UP)
#creo parlante
Buz = Pin(15,Pin.OUT,Pin.PULL_UP)
# variable de estado
estado = False
# creo funcion para pantalla
def pantalla():
lcd.clear()
lcd.move_to(2, 0)
lcd.putstr("PRESIONA BOTON")
lcd.move_to(2, 2)
lcd.putstr("color:")
#apaga todos los colores del LED RGB.
def clear_rgb():
rojo.off()
verde.off()
azul.off()
#enciende el color especificado del LED RGB y apaga los demás colores.
def show_color(color):
clear_rgb()
if color == "rojo":
rojo.on()
elif color == "verde":
verde.on()
elif color == "azul":
azul.on()
# funcion del buzzer
def encender_sonido():
BUZ.value(1)
sleep(0.5)
BUZ.value(0)
sleep(0.5)
def apagar_sonido():
BUZ.value(0)
sleep(0.5)
while True:
# Limpiar la pantalla y mostrar el mensaje inicial
pantalla()
# creo accion para los botones y leds
if bot_blue.value()==1:
azul.on()
lcd.move_to(11,2)
lcd.putstr("azul")
sleep(0.5)
if bot_green.value()==1:
verde.on()
lcd.move_to(11,2)
lcd.putstr("verde")
sleep(0.5)
if bot_red.value()==1:
rojo.on()
lcd.move_to(11,2)
lcd.putstr("rojo")
sleep(0.5)
else:
verde.off()
rojo.off()
azul.off()
sleep(0.5)
# creo accion para sensor y parlante
if PIR.value()==1 and not estado:
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr("ALERTA DE MOVIMIENTO")
lcd.move_to(2, 2)
lcd.putstr("ESTADO: Detectado")
show_color("rojo")
encender_sonido()
sleep(0.8)
show_color("verde")
sleep(0.8)
show_color("azul")
sleep(0.8)
estado= True # Marcar que se ha detectado movimiento
else:
estado = False # Reiniciar cuando no hay movimiento
clear_rgb()
apagar_sonido
sleep(0.8)