Propongo in questa breve lezione due esempi di base sull’uso del Raspberry Pi Pico: identificare lo stato di un pulsante e realizzazione di un interruttore mediante un pulsante.
Per questo esempio utilizzeremo il pin 14 a cui connetteremo un pin del pulsante, così come rappresentato nell’immagine che segue. Come sapete molti dei pulsanti disponibili nei kit elettronici sono costituiti da 4 pin, connessi frontalmente a due a due.
Proseguiamo connettendo il secondo pin del pulsante al positivo sulla breadboard (3,3V). Ricordiamoci inoltre la connessione del 3,3V del PiPico al positivo della breadboard.
E’ molto importante ricordare che una simile connessione del pulsante con il PiPico potrebbe causare problemi di cortocircuito alla pressione del pulsante, perché non presente una resistore di PULL-UP o di PULL-DOWN fisico. Per evitare di utilizzare un resistore, attiviamo la resistenza di PULL-DOWN sul pin 14, ATTENZIONE ricordate di fare questa operazione altrimenti rischiate di distruggere irrimediabilmente il vostro microcontrollore.
Aprite l’editor Thonny e digitate il seguente programma:
# Prof. Maffucci Michele # Controllo dello stato sul pin 14 (una sola volta) # 18.09.2021 # libreria che permette di utilizzare MicroPython con il RaspyMicro import machine # creazione dell'oggetto pulsante che include il pin 14 impostato come input # su cui viene attivata il resistore di PULL-DOWN pulsante = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN) # la lettura del pulante viene fatta usando l'API machine # usando la funzione value print(button.value())
Salvate il programma sulla vostra scheda, assegnate ad esempio il nome pulsante1.py
Se mandate in esecuzione il programma lo stato del pin verrà mostrato immediatamente sulla Shell una sola volta.
Se non premete il pulsante verrà mostrato sulla Shell il valore logico 0 in quanto abbiamo utilizzato una resistenza di PULL-DOWN, nel momento in cui, all’avvio premete il pulsante lo stato logico visualizzato sulla Shell sarà 1.
Per leggere lo stato del pulsante in modo continuo bisognerà aggiungere un loop all’interno del programma che segue che chiameremo pulsante2.py
# Prof. Maffucci Michele # Controllo dello stato sul pin 14 (in modo continuo) # 18.09.2021 # libreria che permette di utilizzare MicroPython con il RaspyMicro import machine # per la gestione del tempo import utime # creazione dell'oggetto pulsante che include il pin 14 impostato come input # su cui viene attivata il resistore di PULL-DOWN pulsante = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN) # la lettura del pulante viene fatta usando l'API machine # usando la funzione value # while True definisce un loop infinito al cui interno # troviamo il controllo dello stato del pulsante while True: # se la condizione è vera viene stampato # il messaggio mediante la print # e fermato il programma per 1 secondi if pulsante.value() == 1: print("Hai premuto il pulsante") utime.sleep(1)
Premete sul pulsante di Run nell’IDE, vedrete che fino a quando non premete il pulsante non accade nulla. Non appena il pulsante viene premuto viene stampata sulla Shell la strina “Hai premuto il pulsante”.
Attenzione che senza la brevissima pausa di 1 secondo verrebbe stampato continuamente il messaggio “Hai premuto il pulsante”.
Vedrete quindi la stampa del messaggio ogni secondo. Se mantenete premuto il pulsante per un tempo superiore a 1 secondi verrà stampato nuovamente il messaggio e ciò si ripeterà ogni secondo fino a quando non rilasciamo il pulsante.
Vediamo ora un programma che, oltre ad inviare un messaggio sulla Shell, accende un LED esterno connesso al pin 15 ogni volta che premiamo il pulsante, chiamiamo il programma pulsante3.py.
# Prof. Maffucci Michele # Controllo dello stato sul pin 14 (in modo continuo) # eaccensione di un led alla pressione del pulsante # 18.09.2021 # libreria che permette di utilizzare MicroPython con il RaspyMicro import machine # per la gestione del tempo import utime # creazione dell'oggetto pulsante che include il pin 14 impostato come input # su cui viene attivata il resistore di PULL-DOWN pulsante = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN) #pin 15 dichiarato come OUTPUT ledEsterno = machine.Pin(15, machine.Pin.OUT) # while True definisce un loop infinito al cui interno # troviamo il controllo dello stato del pulsante while True: # se la condizione è vera viene stampato # il messaggio mediante la print # e fermato il programma per 1 secondi if pulsante.value() == 1: ledEsterno.value(1) # imposta il livello logico 1 sul pin 15 print("Hai premuto il pulsante") utime.sleep(0.5) # imposta una pausa di mezzo secondo ledEsterno.value(0) # imposta il livello logico 0 sul pin 15
Vediamo ora come realizzare un programma che realizza la funzione di un interruttore, cioè il mantenimento dello stato al rilascio del pulsante. Chiamiamo il programma interruttore1.py. Il circuito è il medesimo dell’esempio al passo precedente.
# Prof. Maffucci Michele # realizzazione di un interruttore # mediante pulsante connesso al Pin 14 con antirimbalzo software # con accensione di un LED connesso al pin 15 # 18.09.2021 # libreria che permette di utilizzare MicroPython con il RaspyMicro import machine # per la gestione del tempo import utime # creazione dell'oggetto pulsante che include il pin 14 impostato come input # su cui viene attivata il resistore di PULL-DOWN pulsante = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN) #pin 15 dichiarato come OUTPUT ledEsterno = machine.Pin(15, machine.Pin.OUT) # val usato per conservare lo stato del pulsante val = 0 # vecchio_val per conservare lo stato del pulsante al passo precedente vecchio_val = 0 # ricorda lo stato in cui si trova il LED, # stato = 0 led spento, stato = 1 led acceso stato = 0 # while True definisce un loop infinito al cui interno # troviamo il controllo dello stato del pulsante while True: val = pulsante.value() # legge il valore del pulsante e lo conserva if (val == 1) and (vecchio_val == 0): # controlla se è accaduto qualcosa stato = 1 - stato utime.sleep(0.15) # attesa di 15 millisecondi vecchio_val = val; if (stato == 1): ledEsterno.value(1) # imposta il livello logico 1 sul pin 15 else: ledEsterno.value(0) # imposta il livello logico 0 sul pin 15
Modifichiamo ora il programma precedente inviando sulla Shell il messaggio che indica lo stato del LED, chiamiamo il programma interruttire2.py. Il circuito è il medesimo dell’esempio al passo precedente.
# Prof. Maffucci Michele # realizzazione di un interruttore # mediante pulsante connesso al Pin 14 con antirimbalzo software # con accensione di un LED connesso al pin 15 # e stampa dello stato del LED sulla Shell # 18.09.2021 # libreria che permette di utilizzare MicroPython con il RaspyMicro import machine # per la gestione del tempo import utime # creazione dell'oggetto pulsante che include il pin 14 impostato come input # su cui viene attivata il resistore di PULL-DOWN pulsante = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN) #pin 15 dichiarato come OUTPUT ledEsterno = machine.Pin(15, machine.Pin.OUT) # val usato per conservare lo stato del pulsante val = 0 # vecchio_val per conservare lo stato del pulsante al passo precedente vecchio_val = 0 # ricorda lo stato in cui si trova il LED, # stato = 0 led spento, stato = 1 led acceso stato = 0 # stampare una sola volta il messaggio 'LED acceso' o 'LED spento' sulla Shell abilitaMessaggio = 0 # while True definisce un loop infinito al cui interno # troviamo il controllo dello stato del pulsante while True: val = pulsante.value() # legge il valore del pulsante e lo conserva if (val == 1) and (vecchio_val == 0): # controlla se è accaduto qualcosa stato = 1 - stato utime.sleep(0.15) # attesa di 15 millisecondi vecchio_val = val; if (stato == 1) and (abilitaMessaggio == 0): ledEsterno.value(1) # imposta il livello logico 1 sul pin 15 abilitaMessaggio = 1 print("LED acceso") # stampa il messaggio utime.sleep(1) elif (stato == 0) and (abilitaMessaggio == 1): ledEsterno.value(0) # imposta il livello logico 0 sul pin 15 abilitaMessaggio = 0 print("LED spento") # stampa il messaggio utime.sleep(1)
Buon Coding a tutti 🙂