Buon Santo Stefano a tutti.
Siamo nel pieno del natale e gli articoli sui giochi di luce continuano, oggi ti regalo il gioco di luce mio preferito tra quelli descritti.
Il codice di questo gioco è molto semplice e l’effetto che otterrai è davvero soddisfacente, come ti anticipavo è il mio preferito, spero possa essre anche il tuo.
Come già fatto in precedenza modifica subito la variabile dei giochi totali disponibili in modo che Arduino sappia dell’esistenza di un nuovo gioco:
int totalGame=4;
Quindi istruisci il tuo sketch su come comportarsi per selezonare il nuovo gioco, ti basterà aggiungere le righe seguenti nella funzione loop(), il punto in ci aggiungerle è senza dubbio dopo le precedenti selezioni:
if (game == 4) { for ( int i=minpin; i<=maxpin; i++) { SoftPWMSetFadeTime(i, 0, 0); } game_four(); }
il significato di queste nuove righe non è molto differente da quelle precedenti, indicano alla funzione loop() di cambiare gioco quando il valore della variabile game diventa 4; avrai notato che anche in questo caso i valori di fadeUp e fadeDown impostati nella SoftPWMSetFadeTime sono a 0, questo comporta un effetto di passaggio luci acceso spento in luogo dell’effetto fade.
Alla fine dello sketch andrai ad aggiungere il nuovo gioco, la funzione che accende e spegne le serie di luci secondo un gioco di intensità e tempi che hai definito:
void game_four() { for ( int i=minpin; i<=maxpin; i++) { SoftPWMSetPercent(i, 0); delay(100); SoftPWMSetPercent(i, 100); delay(100); } }
Il codice è molto semplice, come anticipavo in apertura, tuttavia passo alla sua descrizione per chiariti il suo funzionamento;
linea 03: imposta un ciclo for che partendo dal pin minimo ( minpin) e fino al pin massimo ( maxpin ) esegue per ciascun pin le operazioni descritte nelle linee successive;
linea 05: è il primo step di lavoro del gioco, grazie alla funzione SoftPWMSetPercent(pin,%) imposta a 0 la percentuale del pin indicato come primo argomento, che di volta in volta sarà incrementato fino a raggiungere il pin massimo;
linea 06: imposta un tempo di attesa di 100 millisecondi, non ti ho indicato di parametrizzare questo valore in quanto non legato a nessun valore disponibile ( es.: fadeUp o fadeDown ) ed in secondo luogo perchè potrai sperimentare da solo nuovi effetti cambiando questo valore a piacimento, il mio personale gusto ha individuato in 100 il valore ottimale per realizzare un gradevole effetto;
linea 07: imposta la percentuale dello stesso pin appena impostato a 0 al 100%, ossia accende al massimo grado di luminosità la serie connessa al pin in oggetto;
line 08: attende un tempo di 100 millisecondi prima di concludere il gioco di luce, far tornare il controllo alla funzione loop() che valuta se rieseguire il gioco di luce quattro, descritto in questo articolo o un altro gioco di luce. Valgono anche per questo valore di attesa le medesime informazioni viste per il valore alla linea 06;
Avrai notato che ci sono delle piccole differenze rispetto ai precedenti giochi di luce:
- in un unico ciclo gestisce per la stessa serie di luci (medesimo pin) entrambi i valori 0% e 100% in precedenza hai realizzato giochi di luce in cui per un singolo pin un ciclo si occupava dell’accensione (100%) ed un ciclo successivo dello spegnimento (0%). Questo rende l’effetto molto diverso dai precedenti e molto carino;
- non compare la linea di controllo che interrompe il gioco alla pressione del tasto preposto al cambio tra un gioco ed il successivo. Questo perchè il gioco di luce è talmente rapido nella sua eseguzione (200 millisecondi) che non è necessario interromperlo, il controllo ritorna alla funzione loop() ogni 200 ms;
Prova a variare i tempi di attesa o a concatenarli ad un valore di riferoimento già presente es.: fadeUp/10 e avrai effetti di luce differenti.
Per l’esempio descritto ecco il video di cosa realizzerai:
Buon Santo Stefano.
1 ping
[…] le linee di codice presenti in questo gioco luminoso sono poche, al pari di quelle previste per il gioco precedente. Ecco come […]