«

»

Ago 05

Stampa Articolo

NeoPixel Ring 16 Random

Il progetto NeoPixel Ring 16 Random è un esperimento che ho voluto eseguire subito dopo aver provato i neopixel e la libreria Adafruit_neopixel

NeoPixel Ring 16 random WS2812

in pratica nel precedente articolo hai letto come collegare il NeoPixel Ring 16 e come eseguire il primo sketch di esempio fornito con la libreria del produttore.

Lo sketch simple.ino è davvero semplice ma ha il limite di accendere solo il colore verde in tutti i led dell’anello e fermarsi, per uno sketch di esempio va benissimo ma se volessi realizzare qualcosa di più divertente con i tuoi neopixel allora devi iniziare ad utilizzare funzioni e sketch più complessi.

Lo sketch NeoPixel Ring 16 Random

Ricorderai che la funzione setPixelColor ti permette di variare il colore inviato al led per la gamma RGB, quindi giocando con questa funzione puoi realizzare il NeoPixel Ring 16 Random:

include <Adafruit_NeoPixel.h>

#ifdef __AVR__
   #include <avr/power.h>
#endif

#define PIN            6
#define NUMPIXELS      16

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 20;

void setup() {
   pixels.begin();
}

void loop() {

  for(int i=0;i<NUMPIXELS;i++){
     int R= random(255);
     int G= random(255);
     int B= random(255);

     pixels.setPixelColor(i, pixels.Color(R,G,B));
     pixels.show();

     delay(delayval);
   }
}

inizia dalla linea 01: includi la libreria Adafruit, scaricata nel link del precedente articolo, che ti serve per far funzionare il Neopixel ring 16 random;

linee 03-05: verifica se necessario includere la libreria avr/power.h ed includila;

linea 07: definisci il pin a cui hai collegato l’anello da 16 ws2812 neopixel;

linea 08: imposta il numero di led, nel caso del ring 16 il valore è 16 ma esistono anelli da 24,48,60 ecc.. led;

linea 10: inizializza l’oggetto pixels della classe Adafruit_neopixel;

linea 12: imposta un tempo di delay, che userai nella funzione loop();

linee 14-16: definisci la funzione setup() il cui unico scopo, in questo caso, è avviare la comunicazione con il metodo begin() dell’istanza pixels.

linea 20: imposta un ciclo for del numero di pixel in modo che ogni loop() esegua l’accensione di tutti i led dell’anello uno alla volta;

linea: 21: usando la funzione random di arduino crea una variabile, chiamala R, il cui valore randomico, ossia generato pseudo casualmente, vari da 0 a 255 ( leggi il reference arduino per comprendere come si comporta questa funzione);

linee 22-23: esegui la medesima operazione della riga 21 per le variabili G e B;

linea 25: componi ed invia al led corrispondente ad “i” il colore generato casualmente composto dai valori di R,G e B;

linea 26: attua il comando precedente con il metodo show() della libreria neopixel;

linea 28: imposta il tempo di pausa ( delay() ) della lunghezza definita alla linea 12.

In questo modo ad ogni ciclo di loop() lo sketch eseguirà un ulteriore ciclo for per ciascun led del tuo neopixel ring 16 random e per ogni fase del for calcolerà un valore RGB per il led in modo casuale accendendolo quindi di colori sempre differenti.

Il risultato del progetto neopixel ring 16 random è il seguente:

Ringrazio gli amici di WeMake che si occupano del wearables per aver scelto la stoffa adatta alla ripresa ed aver dato un effetto magico al gioco di luci creato con i neopixel.

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/neopixel-ring-16-random.html

2 comments

  1. Giovanni

    Il video è privato e non si riesce a vedere.

    1. Mauro Alfieri

      Grazie Giovanni, ho corretto l’errore di pubblicazione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>