# modulos
from machine import Pin, I2C,time_pulse_us #medir la pulsacion en ms
from time import sleep, sleep_us #retraso en ms
from pico_i2c_lcd import I2cLcd
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000) #creamos i2c
I2C_ADDR=i2c.scan()[0]
ECHO_PIN=26 #pin de echo
TRIGGER_PIN=27 #pin del trigger
#crear objeto tipo lcd, trigger y echo
lcd=I2cLcd(i2c,I2C_ADDR,2,16)
trigger=Pin(TRIGGER_PIN,Pin.OUT) #tipo salida, trigger envia la pulsacion
echo=Pin(ECHO_PIN,Pin.IN) #echo recibe la pulsacion
led_azul = Pin(2, Pin.OUT)
led_rojo = Pin(5, Pin.OUT)
led_amarillo = Pin(9, Pin.OUT)
#se crea funcion
def medir_distancia():
trigger.low() #antes de enviar pulso el trigger debe estar apagado
sleep_us(2) #indicar que despues de 2 microsegundos, se active
trigger.high() #despues de 2 ms, envie la pulsación
sleep_us(10) #esperamos 10 ms
trigger.low() #despues se apagará
#duracion
#distancia = velocidad x tiempo
#cuanto demora en regresar el pulso a echo
pulso_duracion=time_pulse_us(echo,Pin.high) #tiempo de pulso en ms y pin del echo encendido
#para calcular la distancia, creamos la variable distancia
distancia=pulso_duracion*0.034/2 #velocidad del sonido, formula para convertir en cm la duracion
return round(distancia) #valor redondeado, si queremos un valor exacto quitamos round
#se crea una función llamada parpadeo_led que recibe tres parámetros
def parpadeo_led(led, vecesparpadeo, intervalo):
# Función para que parpadee el LED especificando "veces" con un "intervalo" entre encendidos y apagados
for _ in range(vecesparpadeo): # para repetir el bloque de código "vecesparpadeo" veces
led.value(1) # enciende led
sleep(intervalo) # Espera por el intervalo de tiempo especificado (tiempo que el LED estará encendido)
led.value(0) #apaga led
sleep(intervalo) # Espera por el intervalo de tiempo especificado (tiempo que el LED estará apagado)
#LOOP
while True:
#obtener el valor e imprimir en pantalla
distancia_lcd=medir_distancia() #llamamos funcion con el resultado para mostrar
print("Distancia: {:0.1f} cm".format(distancia_lcd)) #distancia con un decimal y con format indicamos lo que se almacenara
lcd.clear() #se limpia pantalla para asegurar que no hay nada
lcd.putstr(str(distancia_lcd)+ "cm") #imprmimos en pantala
# Apagar todos los LEDs antes de evaluar
led_azul.value(0)
led_rojo.value(0)
led_amarillo.value(0)
# Controlar los LEDs según la distancia
if distancia_lcd > 200:
led_azul.value(1)
elif distancia_lcd < 200:
led_rojo.value(1)
else: # distancia_lcd == 200
#Led_amarillo=Led que prende,
#5=número de veces que el LED debe parpadear. El LED se encenderá y apagará 5 veces.
#0.3:intervalo en segundos, el tiempo que el LED permanecerá encendido y apagado.
#En este caso, el LED se encenderá durante 0.3 segundos, luego se apagará durante 0.3 segundos,
#y este ciclo se repetirá 5 veces.
parpadeo_led(led_amarillo, 5, 0.3)
sleep(10)