from machine import I2C, Pin
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
import VL53L0X
import utime

# Configuración de la pantalla LCD
I2C_ADDR = 0x27
I2C_NUM_ROWS = 2
I2C_NUM_COLS = 16

# Configuración del sensor de distancia VL53L0X
sensor = I2C(0, sda=Pin(16), scl=Pin(17), freq=400000)
tof = VL53L0X.VL53L0X(sensor)
tof.start()

# Configuración del LCD
i2c = I2C(1, sda=Pin(26), scl=Pin(27), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)

# Configuración de pines de LEDs y alarma
led_verde = Pin(21, Pin.OUT)
led_amarillo = Pin(20, Pin.OUT)
led_rojo = Pin(19, Pin.OUT)
alarma = Pin(28, Pin.OUT)

# Definir función para manejar la alarma
def grito():
    alarma.on()
    utime.sleep(0.2)
    alarma.off()
    utime.sleep(0.2)
        
# Bucle principal
while True:
    distance = tof.read()  # Leer distancia del sensor
    lcd.clear()
    lcd.move_to(0, 0)
    lcd.putstr("Volumen tanque")
    lcd.move_to(0, 1)
    lcd.putstr(f"NIVEL: {distance} mm")
    
    # Lógica de control por distancia
    if 136 <= distance <=180:
        led_rojo.on()
        led_amarillo.off()
        led_verde.off()
        grito()  # Activa la alarma
        lcd.move_to(0, 0)
        lcd.clear()
        lcd.putstr("Sin agua")
        
    elif 84 <= distance <= 135:
        
        led_rojo.off()
        led_amarillo.on()
        led_verde.off()
        
    elif distance <= 83:
        led_rojo.off()
        led_amarillo.off()
        led_verde.on()
    else:
        led_rojo.off()
        led_amarillo.off()
        led_verde.off()
        alarma.off()  # Asegúrate de apagar la alarma si no es necesaria
    
    utime.sleep(1)
