Giochi di luce con Arduino – secondo gioco – seconda parte

Nel precedente articolo ti ho mostrato le modifiche da apportare allo sketch originale per poter inserire nuovi giochi di luce. Il secondo gioco di luce accende le serie in sequenza partendo dagli estremi fino al centro e successivamente le spegne in senso contrario.

Luci di Natale con Arduino

Puoi comunque utilizzare Arduino con un solo gioco di luci, in tal caso non hai bisogno di fare le modifiche.

In questo articolo ti descrivo solo il secondo gioco di luci che puoi realizzare con il tuo Arduino, non dovrai fare nessuna modifica allo sketch presentato in questo articolo, in quanto non ci sono variazioni, ho solo voluto dedicare un articolo a questo gioco di luci per non complicare la lettura del codice precedente.

 void game_two() {
   int middle=int ((maxpin/2)+1);
   int cur1=0;
   for ( int b=minpin; b<=middle; b++)
   {
     if (digitalRead( pinButton ) == HIGH) { break; }

     int e=(maxpin-cur1);
     SoftPWMSetPercent(b, 100);
     SoftPWMSetPercent(e, 100);
     cur1++;
     delay(fadeUp);
   }

   for ( int b=middle; b>=minpin; b--)
   {
     if (digitalRead( pinButton ) == HIGH) { break; }

     int e=(maxpin-cur1)+1;
     SoftPWMSetPercent(b, 0);
     SoftPWMSetPercent(e, 0);
     cur1--;
     delay(fadeDown);
   }

   delay(fadeUp);
 }

La funzione game_two è di tipo void come già per la game_one in quanto al suo interno ha tutte le istruzioni per eseguire il gioco di luce in questione e non deve produrre output di alcun tipo per la funzione che l’ha richiamata ossia loop().

Il secondo gioco
La linea 01: definisce la funzione stessa;

linea 02: calcolo il pin centrale per determinare l’ultima serie di luci da acendere nel primo ciclo e la prima ad essere spenta nel secondo ciclo, insomma il punto entrale, ho fatto due assunti:

  1. che i pin utilizzati siano dispari, l’effetto è più suggestivo;
  2. che non hai utilizzato i primi 2 pin ( 0 e 1 );

Se questi assunti non sono validi nel tuo caso, commenta l’articolo e modificheremo insieme lo sketch per ottenere un effetto altrettanto interessante. Tornando al calcolo ho diviso il numero del pin massimo (maxpin) per 2 e sommato 1, il dispari dell’assunto 1. eseguendo il cast della variabile a int per ottenere un numero intero, questa operazione fa in modo che se il maxpin è ad esempio 12 il risultato sia (12/2)+1 = 6+1 = 7;

linea 03: imposta una variabile di tipo integer che incrementeremo in modo da avere un cursore indipendente dall’indice del ciclo for, che scandisce la prima metà di linee da accendere;

linea 04: imposta il ciclo for in modo che partendo dal minpin il valore di b cresca fino a raggiungere il valore del pin centrale calcolato alla linea 02;

linea 06: la condizione scritta in questa linea è identica a quella presente anche nel precedente gioco, in pratica ad ogni ciclo del for, prima di eseguire qualsiasi operazione, verifica che il pulsante non sia stato premuto (ricorda che la pressione del pulsante commuta a HIGH il valore del pin corrispondente e nel tuo sketch indica che vuoi cambiare gioco). Quando il pulsante è premuto il ciclo for viene interrotto dal break e il controllo ritorna al loop() di Arduino per il cambio del gioco luminoso;

linea 08: imposta una variabile di tipo integer il cui valore è calcolato sottraendo al pinmax il valore del cursore indipendente, in pratica supponendo che pinmax sia 12, al primo ciclo hai (12-0) = 12, al secondo (12-1) = 11 ecc…

linee 09-10: utilizzando la funzione SoftPWMSetPercent( pin,valore ) accendi le serie connesse ai pin esterni, per farlo ho utilizzato la variabile b per i pin dal minpin al pin centrale, e la variabile e per quelli dal maxpin al centrale;

linea 11: incremento il cursore prima di concludere il ciclo per consentire alla linea 08 di eseguire il calcolo corretto;

linea 12: imposta una attesa del valore fadeUp che è il tempo di dissolvenza impostato per la SoftPWM in accensione, attendere questo tempo ti garantisce un effetto fluido e che l’accensione sia gunta a compimento prima di passare al ciclo successivo;

Le linee dalla 15 alla 24 eseguono il ciclo di spegnimento delle serie, il principio e le istruzioni sono le medesime appena viste a parte per qualche piccolo trucco che ti spiego brevemente:

  1. il valore di cur1 non devo preimpostarlo perchè avrà fià raggiunto il suo valore massimo con il ciclo for precedente;
  2. il ciclo for decrementa le variabili b ed e per cui b parte dal pin centrale e decrementa il suo valore (b–) fino al minpin, mentre e incrementa il suo valore partendo da maxpin – cur1 + 1;
  3. il valore di cur1 non cresce ma decresce ad ogni ciclo;
  4. il valore atteso nel tempo di eseguzione è fadeDown;

Fatte queste considerazioni ti sarà facile comprendere come l’effetto sia prima di accensione dagli estremi verso il centro e successivamente di spegnimento nella direzione opposta.

Infine alla linea 26 ti consiglio di aggiungere un ulteriore tempo, arbitrario o proporzionale ad uno dei due tempi di dissolvenza (fade) per vedere le serie spegnersi completamente prima che il ciclo ricominci.

L’effetto finale dovrebbe essere simile a quello mostrato nel video:

anche se nel mio esempio non ho utilizzato delle serie di lampadine natalizie ma dei led.

Buon Natale.

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/giochi-di-luce-con-arduino-secondo-gioco-seconda-parte.html

1 ping

  1. […] 04: è un controllo che già conosci se hai letto gli articoli precedenti il suo scopo è intercettare la pressione del pulsante ed uscire immediatamente dal gioco in […]

Lascia un commento

Your email address will not be published.

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