
Nello scorso articolo abbiamo visto un LED Matrix Driver pilotato da RP2350 e presentato da Pimoroni. Oggi proveremo un codice di esempio.
Un video vale più di 1000 parole: per tale ragione inizieremo l’articolo presentando la rappresentazione dell’esempio che ci proponiamo di spiegare.
Si tratta del classico esempio con le bolle colorate, con raggio e colore variabili, che rimbalzano sui bordi dello schermo. Solo che in questo caso, anziche di uno schermo, avremo bisogno di LED Matrix Driver. Dovremo predisporre una funzione per la creazione delle bolle, un ciclo infinito per il loro movimento e una serie di controlli per gestire il rimbalzo sui bordi e, naturalmente, la chiusura del programma.
Vediamo l’effetto che produrremo:
Codice sorgente
Il codice sorgente è abbastanza semplice da leggere, ed è riportato di seguito:
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
import random from interstate75 import Interstate75, DISPLAY_INTERSTATE75_128X128 i75 = Interstate75(display=DISPLAY_INTERSTATE75_128X128) graphics = i75.display width = i75.width height = i75.height class Ball: def __init__(self, x, y, r, dx, dy, pen): self.x = x self.y = y self.r = r self.dx = dx self.dy = dy self.pen = pen # initialise shapes balls = [] for i in range(0, 75): r = random.randint(0, 3) + 3 balls.append( Ball( random.randint(r, r + (width - 2 * r)), random.randint(r, r + (height - 2 * r)), r, (7 - r) / 4, (7 - r) / 4, graphics.create_pen(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)), ) ) BG = graphics.create_pen(0, 0, 0) while True: graphics.set_pen(BG) graphics.clear() for ball in balls: ball.x += ball.dx ball.y += ball.dy xmax = width - ball.r xmin = ball.r ymax = height - ball.r ymin = ball.r if ball.x < xmin or ball.x > xmax: ball.dx *= -1 if ball.y < ymin or ball.y > ymax: ball.dy *= -1 graphics.set_pen(ball.pen) graphics.circle(int(ball.x), int(ball.y), int(ball.r)) i75.update() |
Per prima cosa importeremo i moduli necessari per gestire il driver (si trovano sul sito Pimoroni).
Definiamo quindi l’oggetto i75, target del nostro lavoro, ed inizializziamo la sezione grafica del Matrix Driver.
Creiamo una classe Ball, che riceverà le dimensioni, la posizione ed il colore come parametri. Il codice succeessivo inizializzerà una lista di oggetti Ball con valori casuali compresi nell’ambito della risoluzione della matrice grafica. Ciascun oggetto verrà inserito (metodo append) in una apposita lista balls[].
Quindi, terminato il setup, entriamo nel loop infinito vero e proprio.
- Definiamo un colore nero per la penna
- Ripuliamo lo schermo
- Per ciascuna bolla nella lista balls:
- Spostiamo le coordinate del centro della bolla
- Controlliamo che le coordinate della bolla siano interne alla matrice di punti
- In caso negativo, cambiamo verso (segno) allo spostamento richiesto
- Applichiamo il colore definito durante la inizializzazione alla bolla specifica
- Disegnamo la bolla nel buffer interno del driver
- Aggiorniamo la matrice di punti con le nuove coordinate che avevamo calcolato e inserito nel buffer.
Finito! Buon divertimento…
Iscriviti ai nostri gruppi Telegram
Link utili
- Arduino UNO R3
- Elegoo UNO R3
- Arduino Starter Kit per principianti
- Elegoo Advanced Starter Kit
- Arduino Nano
- Raspberry PI 5
- Raspberry PI 400
- Raspberry PI Pico
- Programmiamo il Pico