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)
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT