Christmas Tree Neopixel sketch – seconda parte

La descrizione del Christmas Tree Neopixel sketch continua con l’analisi delle altre funzioni.

albero di natale spirale neopixel high Christmas Tree neopixel sketch

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 ij 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 ij;

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:

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/christmas-tree-neopixel-sketch-seconda-parte.html

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.