from machine import Pin
import time
led1 = Pin(15, Pin.OUT) # Imposta il GPIO 15 come uscita digitale per il LED1
led2 = Pin(16, Pin.OUT) # Imposta il GPIO 16 come uscita digitale per il LED2
pulsante1 = Pin(14, Pin.IN, Pin.PULL_UP) # Imposta il GPIO 14 come ingresso con resistenza pull-up interna
pulsante2 = Pin(13, Pin.IN, Pin.PULL_UP) # Imposta il GPIO 13 come ingresso con resistenza pull-up interna
stato_led2 = False # Variabile booleana per memorizzare lo stato corrente del LED2 (bistabile)
pulsante2_premuto = False # Variabile di controllo per evitare letture multiple durante la stessa pressione
while True: # Inizio del ciclo infinito
# Controllo del primo pulsante (LED acceso solo durante la pressione)
if pulsante1.value() == 0: # Se il pulsante1 è premuto (pull-up -> premuto = 0)
led1.value(1) # Accende il LED1
print("Pulsante 1 premuto - LED1 acceso") # Stampa nella shell
else:
led1.value(0) # Spegne il LED1
print("Pulsante 1 rilasciato - LED1 spento") # Stampa nella shell
# Controllo del secondo pulsante (LED bistabile)
if pulsante2.value() == 0 and not pulsante2_premuto: # Se il pulsante2 è premuto e non è già stato rilevato
stato_led2 = not stato_led2 # Inverte lo stato del LED2 (toggle: acceso -> spento, spento -> acceso)
led2.value(stato_led2) # Aggiorna fisicamente lo stato del LED2
print("Pulsante 2 premuto - LED2 stato:", "Acceso" if stato_led2 else "Spento") # Messaggio stato LED2
pulsante2_premuto = True # Segna che il pulsante è stato premuto (per evitare doppia lettura)
if pulsante2.value() == 1: # Se il pulsante2 è stato rilasciato
pulsante2_premuto = False # Reset della variabile di
# controllo per prepararsi alla prossima pressione
time.sleep(0.1) # Piccola pausa per debounce
# (stabilità lettura pulsanti)