from machine import Pin, I2C, ADC
from time import sleep, localtime
from pico_i2c_lcd import I2cLcd
# Inicializar I2C para LCD
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
I2C_ADDR = i2c.scan()[0]
lcd = I2cLcd(i2c, I2C_ADDR, 4, 20)
# Mensajes a mostrar
mensajes = [
"Mensaje 1",
"Mensaje 2",
"Mensaje 3",
"Mensaje 4",
"Mensaje 5"
]
# Configurar botones
btn_avanzar = Pin(6, Pin.IN, Pin.PULL_UP) # Botón de avanzar
btn_retroceder = Pin(7, Pin.IN, Pin.PULL_UP) # Botón de retroceder
btn_led = Pin(8, Pin.IN, Pin.PULL_UP) # Botón B1 para alternar LEDs
# Configurar LEDs
led1 = Pin(22, Pin.OUT)
led2 = Pin(21, Pin.OUT)
# Configurar ADC (voltaje variable)
adc = ADC(Pin(26)) # Potenciómetro en GP26
# Índice del mensaje actual
indice = 0
# Control para alternar LEDs
turno_led = 0 # 0 = LED1, 1 = LED2
# Mostrar mensaje inicial
lcd.clear()
lcd.putstr(mensajes[indice])
def actualizar_reloj():
"""Función para actualizar la línea 4 con hora:min:seg"""
t = localtime()
hora = "{:02d}:{:02d}:{:02d}".format(t[3], t[4], t[5])
lcd.move_to(0, 3) # Línea 4 (índice 3)
lcd.putstr(hora + " " * (20 - len(hora))) # Limpiar resto línea
def leer_voltaje():
"""Función para leer el ADC y convertir a voltaje"""
lectura = adc.read_u16() # 0-65535
voltaje = (lectura / 65535) * 3.3 # Escalar 0-3.3V
return voltaje
def mostrar_voltaje():
"""Función para mostrar el voltaje en la línea 2"""
v = leer_voltaje()
lcd.move_to(0, 1) # Línea 2 (índice 1)
lcd.putstr("Voltaje: {:.2f} V".format(v) + " " * (20 - len("Voltaje: {:.2f} V".format(v))))
while True:
# Leer estado de botones (0 = presionado)
if btn_avanzar.value() == 0:
indice += 1
if indice >= len(mensajes):
indice = 0 # Volver al primer mensaje
lcd.move_to(0, 0)
lcd.putstr(mensajes[indice] + " " * (20 - len(mensajes[indice])))
sleep(0.3) # Delay para evitar rebote
if btn_retroceder.value() == 0:
indice -= 1
if indice < 0:
indice = len(mensajes) - 1
lcd.move_to(0, 0)
lcd.putstr(mensajes[indice] + " " * (20 - len(mensajes[indice])))
sleep(0.3) # Delay para evitar rebote
# Botón para alternar LEDs
if btn_led.value() == 0:
if turno_led == 0:
led1.value(1)
led2.value(0)
sleep(3)
led1.value(0)
turno_led = 1 # Cambiar al siguiente turno
else:
led1.value(0)
led2.value(1)
sleep(3)
led2.value(0)
turno_led = 0 # Cambiar al siguiente turno
sleep(0.3) # Evitar rebote del botón
# Actualizar voltaje y reloj
mostrar_voltaje()
actualizar_reloj()
sleep(0.2) # Actualiza cada 0.2 s