Giochi di luce con Arduino – sesto gioco

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.

Giochi di luce con Arduino

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:

  1. giochi di luce con Arduino
  2. secondo gioco di luce con Arduino, prima e seconda parte
  3. terzo gioco di luce con Arduino
  4. quarto gioco di luce con Arduino
  5. 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.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/giochi-di-luce-con-arduino-sesto-gioco.html

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.