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);
}
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
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
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
gpb01:
Ottima e compatta soluzione se deve creare blocchi contigui e di pare lunghezza, altrimenti ...
... buona la prima
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
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