La descrizione del Christmas Tree Neopixel sketch continua con l’analisi delle altre funzioni.
Lo sketch analizzato è quello presente tra gli esempi della libreria Adafruit Neopixel e già mostrato nel precedente articolo.
Trovi lo sketch intero nel precedente articolo.
Le funzioni theaterChase, rainbow, rainbowCycle Christmas Tree Neopixel sketch
Analizziamo di seguito le funzioni richiamate dal ciclo di loop() dello sketch Christmas tree neopixel sketch partendo dalla riga 064:
La funzione rainbow
la funzione rainbow inizia alla linea 064:
void rainbow(uint8_t wait) { uint16_t i, j; for(j=0; j<256; j++) { for(i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, Wheel((i+j) & 255)); } strip.show(); delay(wait); } }
il suo funzionamento è abbastanza semplice impostare tutti i colori da 0 a 256 per ciascun led dell’albero di natale.
Linea 065: imposta due variabili i e j che incrementerai nelle linee successive;
linea 080: partendo da 0 e fino a 255 incrementa il valore di j;
linea 068: per ciascuno dei 256 cicli precedenti crea un nuovo ciclo sul numero di led presenti ( in questo progetto 40 );
linea 069: imposta il colore del led i come il risultato della funzione Wheel ( che analizzerai in un prossimo articolo ) a cui passi la somma di i+j in bitwise & con 255 ( 11111111 );
linea 071: all’interno del ciclo principale, visualizza il colore impostato per tutti i led;
linea 072: attendi i millisecondi passati come paramentro alla funzione dal ciclo di loop();
La funzione rainbowCycle
La funzione rainbowCycle è più complessa della precedente, almeno nel calcolo del valore da passare alla sottofunzione Wheel():
// Slightly different, this makes the rainbow equally distributed throughout void rainbowCycle(uint8_t wait) { uint16_t i, j; for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel for(i=0; i< strip.numPixels(); i++) { strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255)); } strip.show(); delay(wait); } }
linea 078: imposta due variabili interne alla funzione i e j;
linea 080: crea un ciclo per la variabile j da 0 a 256*5 ( 1280 valori ) pari a 5 volte il giro completo della ruota ( Wheel );
linea 081: crea un ciclo per la variabile i da 0 al numero totale dei led presenti nel progetto;
linea 082: per ciascn led imposta il colore definito come il risultato della funzione Wheel a cui passi come valore:
(( i * 256 / numero di pixel totali ) + j ) & 255
da cui ottieni una numerazione simile a: 0, 6, 12, 19, 25, 32 e con la funzione &255 se anche superi il valore 255 ( 11111111 ) lo riporti all’inizio del ciclo di 256 valori;
linea 084: invii il valore calcolato a tutti i led;
linea 085: attendi i millisecondi con cui hai chiamato la funzione prima di proseguire con il ciclo successivo;
La funzione theaterChase
la funzione theaterChase inizia dalla linea 090:
//Theatre-style crawling lights. void theaterChase(uint32_t c, uint8_t wait) { for (int j=0; j<10; j++) { //do 10 cycles of chasing for (int q=0; q < 3; q++) { for (uint16_t i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, c); //turn every third pixel on } strip.show(); delay(wait); for (uint16_t i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //turn every third pixel off } } } }
linea 091: crea un ciclo for da 0 a 9 ( <10 ) con incremento 1;
linea 092: crea un ciclo annidato nel primo da 0 a 2 ( <3 ) con incremento 1;
linea 093: crea un terzo ciclo da 0 al numero massimo di led incrementato di 3 in 3;
linea 094: imposta il colore del neopixel corrispondente al numero ( i+q) essendo q incrementato di 1 in uno ed i di 3 in 3 avrai una numerazione simile a: 0,3,6,9,12,15,18,21,24,27,30,33,36,39 il successivo sarebbe 42 ma i led del Christmas Tree neopixel sono colo 40 per cui passi alla linea successiva; al giro seguente avrai: 1,4,7,10,13,16,19,22,25,28,31,34,37,40 ed al terzo giro per q = 2 avrai: 2,5,8,11,14,17,20,23,26,29,32,35,38 ecc..
linea 096: visualizza tutti i colori impostati;
linea 098: attendi il tempo impostato come secondo parametro.
linee 100-102: ripercorri tutti i led appena impostati per riportare a 0 il valore del colore impostato, equivalente a spegnere il led corrispondente.
Il video del Christmas Tree Neopixel sketch
il video mostra tutto lo sketch in funzione, tra quelle mostrate cerca di riconoscere le funzioni appena descritte, avrai la controprova di aver compreso correttamente lo sketch: