La scheda Inventor RP2040 distribuita da Pimoroni si presta facilmente alla programmazione sia in C che in MicroPython. Ecco qualche esempio.
Ieri abbiamo presentato la scheda Inventor RP2040 distribuita da Pimoroni. Oggi iniziamo una serie di articoli che spiega nei dettagli come programmare tale scheda, prima in MicroPython, poi in C. Diamo per scontato che l’utente sia in grado di configurare l’editor Thonny con il kernel adeguato: nel caso ciò non fosse, è possibile seguire le istruzioni presenti nella sezione “Getting started with Pico“.
Iniziamo!
Creare un arcobaleno con i LED sulla scheda
La board presenta sei LED Neopixel pilotabili via software. Il seguente programma spiega in che modo agire per accedervi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import time from inventor import Inventor2040W, NUM_LEDS """ Displays a rotating rainbow pattern on Inventor 2040 W's onboard LED bars. Press "User" to exit the program. """ # Constants SPEED = 5 # The speed that the LEDs will cycle at BRIGHTNESS = 0.4 # The brightness of the LEDs UPDATES = 50 # How many times the LEDs will be updated per second # Create a new Inventor2040W board = Inventor2040W() # Variables offset = 0.0 # Make rainbows until the user button is pressed while not board.switch_pressed(): offset += SPEED / 1000.0 # Update all the LEDs for i in range(NUM_LEDS): hue = float(i) / NUM_LEDS board.leds.set_hsv(i, hue + offset, 1.0, BRIGHTNESS) time.sleep(1.0 / UPDATES) # Turn off the LED bars board.leds.clear() |
Importiamo per prima cosa i moduli time e inventor. Il primo ci servirà per gestire le temporizzazioni, il secondo per utilizzare le librerie e i driver caratteristici della scheda.
Le costanti definiscono la velocità di aggiornamento, la luminosità (per evitare che la scheda assorba troppa corrente) e gli aggiornamenti al secondo che desideriamo imporre. Modificando questi parametri potremo facilmente modificare la visualizzazione.
Creiamo quindi il nostro oggetto board usando la relativa classe associata, e definiamo (azzerandola) una variabile offset che ci servirà più avanti.
Il nostro ciclo infinito continuerà finché non verrà premuto il tasto “user” sulla scheda.
Esecuzione del ciclo
All’interno del ciclo abbiamo solo una manciata di operazioni:
- Modifichiamo il valore dello spostamento dei LED illuminati in base alla velocità predefinita.
- Aggiorniamo tutti i LED attraverso un ciclo for().
- Modifichiamo il valore di tinta del LED (hue) in base al valore dell’indice i del for(). Notare che la sfumatura dei colori dipende dal numero dei LED.
- Applichiamo la sfumatura attraverso la funzione board.leds.set_hsv(indice, tinta + spostamento, 1.0, luminosità).
- Al termine del ciclo for() ovvero quando tutti i nostri LED sono stati aggiornati, definiamo un tempo di attesa (sleep() ) dipendente dal numero di aggiornamenti al secondo che abbiamo definito nella relativa costante.
- Quando premiamo il tasto sulla scheda interrompiamo il ciclo infinito, ed eseguiamo l’ultima operazione presente nel listato. La funzione board.leds.clear() spegne tutti i LED presenti sulla scheda.
Considerazioni finali
Questo programma è relativamente semplice da comprendere, e aiuta ad afferrare il funzionamento della funzione che gestisce la tinta del LED da accendere ed il suo “movimento” nella sequenza. E’ ovviamente possibile modificare la funzione di accensione dei LED ridefinendo la variabile hue.
Non dimentichiamo che i LED sono indirizzabili singolarmente, e la libreria relativa contiene numerosi esempi di riprogrammazione delle funzioni grafiche. Abbiamo trattato l’utilizzo di LED indirizzabili in una serie di articoli lo scorso anno.
Per oggi è tutto… Venerdì prossimo presenteremo un nuovo programma da utilizzare sulla board Inventor, commentandolo nei dettagli e spiegando in che modo modificarlo qualora necessario.
Iscriviti ai nostri gruppi Telegram
Link utili
- Arduino UNO R3
- Elegoo UNO R3
- Arduino Starter Kit per principianti
- Elegoo Advanced Starter Kit
- Arduino Nano