# Verifica di Telecomunicazioni (Prova nr. 1). Alunno: Piazzolla Paolo Ettore. Classe: 3A inf. Data: 16.06.2025
from machine import Pin # importazione delle librerie
from time import sleep # importazione delle librerie
# Inizializzazione LED attivi
led_stato = Pin(0, Pin.OUT) # LED di stato (acceso durante l'avvio)
led_pulsante = Pin(2, Pin.OUT) # LED controllato da pulsante 1 (momentaneo)
led_bistabile = Pin(3, Pin.OUT) # LED controllato da pulsante 2 (toggle)
led_combo = Pin(4, Pin.OUT) # LED acceso se pulsanti 3 e 4 premuti insieme
led_pronto = Pin(5, Pin.OUT) # LED di sistema pronto
# Inizializzazione Pulsanti con pull-down
btn1 = Pin(10, Pin.IN, Pin.PULL_DOWN) # Pulsante 1
btn2 = Pin(11, Pin.IN, Pin.PULL_DOWN) # Pulsante 2
btn3 = Pin(12, Pin.IN, Pin.PULL_DOWN) # Pulsante 3
btn4 = Pin(13, Pin.IN, Pin.PULL_DOWN) # Pulsante 4
bistabile_stato = False # Stato interno per LED bistabile
# Messaggi di avvio sulla shell
print("Avvio sistema...") # Stampa nella shell
led_stato.value(1) # Accende il LED di stato
print("Inizializzazione componenti...") # Stampa nella shell
sleep(1) # Attesa di 1 secondo per simulare l'inizializzazione
led_stato.value(0) # Spegne il LED di stato
led_pronto.value(1) # Accende il LED di sistema pronto
print("Sistema pronto. LED di stato disabilitati.") # Stampa nella shell
# Loop principale
while True: # Condizione vera
# LED controllato da btn1 (premuto = acceso)
led_pulsante.value(btn1.value()) # Accende il LED se btn1 è premuto
# Gestione LED bistabile (toggle)
if btn2.value(): # Se pulsante 2 premuto
sleep(0.2) # Debounce
if btn2.value(): # Verifica ancora premuto
bistabile_stato = not bistabile_stato # Alterna lo stato
led_bistabile.value(bistabile_stato) # Aggiorna il LED bistabile
while btn2.value(): # Attendi rilascio
sleep(0.05) # Aspetta 50 millisecondi
# Gestione LED combinato (btn3 e btn4 premuti insieme)
if btn3.value() and btn4.value(): # Se entrambi i pulsanti sono premuti
led_combo.value(1) # Accende il LED combinato
else: # altrimenti (else)
led_combo.value(0) # Spegne il LED combinato se uno dei pulsanti è rilasciato
# Monitoraggio via shell ogni 0.5s
print("Stati: BTN1={}, BTN2={}, BTN3={}, BTN4={} | LED1={}, LED2={}, LED3={}, LED4(Stato)={}, LED5(Pronto)={}".format( # Stampa valori dei bottoni e LED
btn1.value(), btn2.value(), btn3.value(), btn4.value(),
led_pulsante.value(), led_bistabile.value(), led_combo.value(), led_stato(), led_pronto.value(),
))
sleep(0.5) # Attesa di 0.5 secondi prima della prossima iterazione