controllo in blocchi led neopixel

Buonasera, stavolta chiedo il vostro aiuto per l'utilizzo dei led neopixel.
Ho trovato molti esempi di giochi di luci ma quello che serve a me è molto più semplice.
Vorrei sapere se esite un ciclo per accendere i led in blocchi per esempio da 0 a 10 rosso, da 11 a 50 giallo senza dover scrivere il colore di ogni singolo led come da esempio:

#include <Adafruit_NeoPixel.h>
#define PIN 6
// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}
void loop() {
  strip.setPixelColor(0, 255, 0, 0);
  strip.setPixelColor(1, 0, 255, 0);
  strip.setPixelColor(2, 0, 0, 255);
  strip.show();
  delay(10);
}

ho provato con dei cicli for come questo

  for(i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, 255.0.0);

ma il risultato è che si accende un led alla volta.

Devi prima inviare le informazione colore ai vari neopixel nel ciclo for e poi dare il comando strip.show.

Ho provato con questo loop

void loop {


  for(i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, 255.0.0);
    strip.show;
}

}

Però non si accendono tutti i led della striscia insieme ma uno per volta...

armandinok:
Vorrei sapere se esite un ciclo per accendere i led in blocchi per esempio da 0 a 10 rosso, da 11 a 50 giallo senza dover scrivere il colore di ogni singolo led come da esempio ...

Mmmm ... normalmente, con la libreria di Adafruit, prima imposti i colori di ogni singolo LED con la setPixelColor() (e NO, non puoi dire, con una sola chiamata, di impostare un certo colore per un blocco, devi dare il colore LED per LED), dopo di che, una volta impostati tutti i vari colori si trasmettono con un unica show().

Guglielmo

P.S.: Considera che ogni la libreria memoriazza il colore di ogni LED in una matrice di N righe (N numero LED) per 3/4 colonne (i valori di RGB/+W) e che la show() non fa altro che trasmettere tutta la matrice, anche se cambi solo un singolo LED :wink:

Ok grazie... pensavo con quel loop di far accendere tutta la striscia.... puoi dirmi dove ho sbagliato?
Magari con la libreria fastled è possibile farlo???
Oppure posso baipassare il problema utilizzando un pin di arduimo per ogni colore?

Quel FOR va benissimo, solo che devi spostare lo show() DOPO la fine del ciclo, ovvero dopo aver impostato TUTTI i LED che vuoi accendere e ... NON usare la numPixels() ma metti tu il valore esatto del numero di LED velocizzando il tutto.

Mettiamo che vuoi metere a rosso (255,0,0) i primi 10 LED:

for(i = 0; i < 10; i++) {
    strip.setPixelColor(i, 255, 0, 0); // imposti il colore del LED numero 'i'
}
strip.show(); // invii tutti i dati alla LED-strip

Guglielmo

Ok grazie, proverò!!!

aggiungo.... devi creare un ciclo for per ogni blocco che vuoi modificare o (più difficile da gestire) modificare il valore di "i" aggingendo i nuovi led, da così:

for(i = 0; i < 10; i++) {
    strip.setPixelColor(i, 255, 0, 0); // imposti il colore del LED numero 'i'
}

for(i = 10; i < 20; i++) {
    strip.setPixelColor(i, 0, 255, 0); // imposti il colore del LED numero 'i'
}
strip.show(); // invii tutti i dati alla LED-strip

a così:

for(i = 0; i < 10; i++) {
    strip.setPixelColor(i, 255, 0, 0);      // imposti il colore del LED numero 'i'
    strip.setPixelColor(i+10, 0, 255, 0); // imposti il colore del LED numero 'i+10'
}
strip.show(); // invii tutti i dati alla LED-strip

entrambi accendono i primi 10 led di rosso e altri 10 led che seguono di verde

-zef-:
aggiungo ... devi creare un ciclo for per ogni blocco ....

Ottima e compatta soluzione se deve creare blocchi contigui e di pare lunghezza, altrimenti ...
... buona la prima :smiley:

Guglielmo

Grazie mille proverò....

gpb01:
Ottima e compatta soluzione se deve creare blocchi contigui e di pare lunghezza, altrimenti ...
... buona la prima :smiley:

Guglielmo

altrimenti... si crea il for per il blocco con più led e con delle if si gestiscono i blocchi più piccoli sempre dentro la for :wink: :smiley:

 for(i = 0; i < 10; i++) {
    strip.setPixelColor(i, 255, 0, 0);                     // imposti il colore del LED da  0 a 9
    strip.setPixelColor(i+10, 0, 255, 0);                // imposti il colore del LED da 10 a 19
    if (i <5)  strip.setPixelColor(i+20, 0, 0, 255);    // imposti il colore del LED da 20 a 24
    if (i <5)  strip.setPixelColor(i+25, 0, 255, 255); // imposti il colore del LED da 25 a 29
}
strip.show(); // invii tutti i dati alla LED-strip