import time
from machine import Pin, I2C
from pico_i2c_lcd import I2cLcd # Assicurati di aver installato questa libreria
# --- Configurazione Hardware ---
led_pin = Pin(22, Pin.OUT)
button_pin = Pin(15, Pin.IN, Pin.PULL_UP) # Pulsante su pin 15, pull-down interno
i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=100000)
lcd = I2cLcd(i2c, 0x27, 2, 16)
# --- Variabili Timer ---
tempo_inizio_timer = 0
timer_attivo = False
# --- Funzione per aggiornare il display LCD ---
def aggiorna_display(messaggio_riga1, messaggio_riga2=""):
lcd.clear()
lcd.putstr(messaggio_riga1)
lcd.move_to(0, 1) # Riga 2
lcd.putstr(messaggio_riga2)
# --- Inizializzazione ---
led_pin.value(0) # LED spento all'inizio
aggiorna_display("Premi pulsante", "per avviare") # Messaggio iniziale sul LCD
# --- Loop Principale Non Bloccante ---
while True:
# --- Controllo Pulsante ---
if button_pin.value() == 0: # Pulsante premuto
print("Pulsante premuto!")
led_pin.value(1) # Accendi il LED
tempo_inizio_timer = time.ticks_ms() # Riavvia/Avvia il timer
timer_attivo = True
aggiorna_display("LED: ON", "Timer: 3s") # Aggiorna display
if timer_attivo:
tempo_trascorso = time.ticks_diff(time.ticks_ms(), tempo_inizio_timer)
secondi_rimanenti = max(0, (3000 - tempo_trascorso) // 1000) # Evita numeri negativi
aggiorna_display("LED: ON", "Timer: " + str(secondi_rimanenti) + "s")
if tempo_trascorso >= 3000:
led_pin.value(0)
timer_attivo = False
aggiorna_display("LED: OFF", "Timer scaduto!")
time.sleep_ms(100)