Go Down

Topic: Risolto:Led WS2812 con libreria Adafruit (Read 44 times) previous topic - next topic

manolomao

Mar 26, 2020, 05:58 pm Last Edit: Mar 27, 2020, 09:56 am by manolomao
Ciao a tutti, ho preso questi LED ed ho iniziato a giocare con la libreria Adafruit_NeoPixel.h.
Volevo fare un gioco di dissolvenze, praticamente lo scopo è accendere quattro led di colore bianco in assolvenza (cioè da valore minimo 0 a valore massimo 255).
Ho scritto questo:
Code: [Select]
#include <Adafruit_NeoPixel.h>

// Quale pin di Arduino hai collegato al NeoPixels?
#define PIN            6

// Quanti led NeoPixel sono collegati ad Arduino?
#define NUMPIXELS      16

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

int delayval = 50;
void setup() {
  pixels.setBrightness(1);
  pixels.begin(); // Avvia il funzionamento del modulo NeoPixel.
  Serial.begin(9600);
}

void loop() {
for (int i=0;i<256;i++){
  pixels.setBrightness(i);
  pixels.setPixelColor(0,pixels.Color(255,255,255));
  pixels.show();
  Serial.println(i);
  delay(delayval);}
 
for (int i=0;i<256;i++){
  pixels.setBrightness(i);
  pixels.setPixelColor(1,pixels.Color(255,255,255));
  pixels.show();
  delay(delayval);}
for (int i=0;i<256;i++){
  pixels.setBrightness(i);
  pixels.setPixelColor(2,pixels.Color(255,255,255));
  pixels.show();
  delay(delayval);}
for (int i=0;i<256;i++){
  pixels.setBrightness(i);
  pixels.setPixelColor(3,pixels.Color(255,255,255));
  pixels.show();
  delay(delayval);}
}

Scritto così, quando passa ad esempio dal led 0 al led1, dopo aver illuminato il led 0 al massimo, lo spegne e fa il ciclo del secondo e così via, mentre io voglio che il led precedente resti acceso e magari più avanti decido di spegnerlo in dissolvenza.
Domanda: sto sbagliando approcio e/o metodo?
Cosa mi consigliate di fare?
Grazie

manolomao

La notte porta consiglio....
Mi sono dato una risposta da solo...
Ho modificato i valori di RGB in modo uniforme in un ciclo for, ed ho creato un fade; sbagliavo proprio approcio.
Code: [Select]
for (byte i=0;i<15;i++){
  pixels.setPixelColor(i,pixels.Color(8,8,8));
  pixels.show();
  delay(delayval);
  pixels.setPixelColor(i,pixels.Color(16,16,16));
  pixels.show();
  delay(delayval);
  pixels.setPixelColor(i,pixels.Color(32,32,32));
  pixels.show();
  delay(delayval);
  pixels.setPixelColor(i,pixels.Color(128,128,128));
  pixels.show();
  delay(delayval);
  pixels.setPixelColor(i,pixels.Color(200,200,200));
  pixels.show();
  delay(delayval); 
  pixels.setPixelColor(i,pixels.Color(255,255,255));
  pixels.show();
  delay(delayval);
  }

Codice certamente migliorabile.
Adesso ho capito come lavorano questi LED.
Per chi può interessare....

-zef-

dal primo codice che hai postato modifica i vari cicli for così:

Code: [Select]
for (int i=0;i<256;i++){
  pixels.setPixelColor(0,pixels.Color(i,i,i));
  pixels.show();
  Serial.println(i);
  delay(delayval);}

Go Up