Sono gli ultimi giorni del 2011 e festeggiare la fine e l’inizio di un nuovo anno è più divertente se disponi di un Arduino e delle vecchie dserie di luci da riciclare.
Qualche settimana fa hai potuto leggere il primo articolo relativo a giochi di luce con Arduino, oggi arricchisci le tue decorazioni con un nuovo gioco,
quello mostrato nel video sopra.
Come funziona ?
Le linee di codice con ci puoi realizzare questo gioco di luci sono le seguenti:
void game_six() { for ( int i=minpin; i<=maxpin; i++) { if (digitalRead( pinButton ) == HIGH) { break; } float val=int (i/2); if ( (float(i)/2) == val) SoftPWMSetPercent(i, 0); else SoftPWMSetPercent(i, 100); } delay(fadeUp/2); for ( int i=minpin; i<=maxpin; i++) { if (digitalRead( pinButton ) == HIGH) { break; } float val=int (i/2); if ( (float(i)/2) == val) SoftPWMSetPercent(i, 100); else SoftPWMSetPercent(i, 0); } delay(fadeDown/2); }
Ho chiamato questo gioco di luce game_six() perchè siamo giunti già al sesto gioco di luce, se non hai visto gli altri giochi puoi seguire questi link:
- giochi di luce con Arduino
- secondo gioco di luce con Arduino, prima e seconda parte
- terzo gioco di luce con Arduino
- quarto gioco di luce con Arduino
- quinto gioco di luce con Arduino
E quindi proseguire con questo sesto gioco di luci.
linea 03: definisci un ciclo for che partendo dal minpin e fino al maxpin incrementi ad ogni giro il pin su cui effettuare i comandi previsti dal for;
linea 05: imposta un controllo basato sulla pressione del pulsante di selezione del gioco, questo controllo è inserto in questo punto in quanto ogni ciclo for può in questo modo essere interrotto dalla pressione del tasto restituendo il controllo alla funzione che lo ha chiamato loop();
linea 07: calcola se il pin trattato è un pin pari o un pin dispari, questo consente di differenziare l’operazione eseguita sui pin pari da quella eseguita sui pin dispari, è un classico metodo per stabilire un alternanza di effetto, ossia una serie si ed una no applico un determinato effetto e su quella successiva l’effetto contrario;
linea 08: è il vero e proprio controllo sulla parità del pin, il confronto avviene tra il valore decimale ( float ) risultato dall’operazione i/2 e il valore val calcolato alla linea 07; in pratica confronti i due risultati della medesima operazione (i/2) una volta in forma decimale e la successiva forzandone il valore al suo intero, in pratica se i = 2 il risultato sarà (2/2) = 1 sia per il valore con decimali sia per il valore intero, se i=3 i due valori saranno 1 per l’intero e 1,50 per il valore decimale; in funzione del risultato emerso dal confronto tra i valori calcolati definisci cosa far eseguire allo sketch, in questo esempio imposti a 0% la percentuale di illuminazione dei pin pari, e a 100% quella dei pin dispari: linea 09;
linea 12: imposta un tempo di attesa tra la fine del primo ciclo e l’inizio del secondo, l’esempio ti mostra un tempo di attesa calcolato come la metà del fadeUp, ovviamente puoi variare a piacimento questi valori per ottenere i tempi che preferisci;
linee 14-25: esegui le stesse operazioni appena descritte ma invertendo la percentuale impostata sui pin, ossia accendendo i pin pari e spegnendo i pin dispari;
Fin quì avrai probabilmente notato che il gioco di luce appena realizzato è fortemente simile al gioco 3 ( game_three ) la differenza infatti in questo caso non è data dal codice del gioco, per il quale potresti anche rutilizzare la funzione game_three(); ma è data dalla modifica fatta alla funzione loop() che richiama il gioco:
if (game == 6) { for ( int i=minpin; i<=maxpin; i++) { SoftPWMSetFadeTime(i, fadeUp, fadeDown); } game_six(); }
infatti osservandola con attezione e confrontandola con quella che richiama il gioco tre ti sarai accorto che la SoftPWMSetFadeTime in questo caso ha impostati i valori di fadeUp e fadeDow, mentre per il gioco 3 erano impostati a 0. Questo cambio seppur semplice modfica completamente il gioco di luce in quanto l’alternarsi di luce sui pin pari e pin dispari per il gioco 3 era istantaneio, quasi un lampeggio, metre in questo gioco è un soffice passaggio, in cui il tempo di fadeUp/2 ricopre una importanza fondamentale al fine dell’effetto finale, in quanto a 1/2 del tempo di accensione o spegnimento la serie effettua una inversione di effetto.
Non dimenticare di avvisare lo sketch dell’aggiunta di un nuovo gioco modificando la variabile totalgame come segue:
int totalGame=6;
Buone feste.