Go Down

Topic: Realizar Degradado Ascendente Neopixel (Read 207 times) previous topic - next topic

fadrellcs

Dec 09, 2018, 04:44 pm Last Edit: Dec 09, 2018, 04:45 pm by fadrellcs
Hola,

Estoy intentando de alguna forma, con la liberia Neopixel, y las tiras led WS2812B, realizar un degradado ascendente con solo 2 colores.

Code: [Select]
#include <Adafruit_NeoPixel.h>

#define PIN 6
//Numero de pixels que va a tener nuestra tira.

#define NUMPIXELS  300
int PasadasEscalera = 0;
int pasadasCascada = 0;
int valorBrillo2 = 0;
int resto= 0;
int TamMT = 10;
int ParteTira = 200;
int gruposCS = NUMPIXELS/TamMT;

uint8_t DegradaRA[][3] = {{255, 0, 0}, // 16 Pasadas
                         {255, 5, 0},
                         {255, 10, 0},
                         {255, 15, 0},
                         {255, 20, 0},
                         {255, 25, 0},
                         {255, 30, 0},
                         {255, 35, 0},
                         {255, 40, 0},
                         {255, 45, 0},
                         {255, 50, 0},
                         {255, 55, 0},
                         {255, 60, 0},
                         {255, 65, 0},
                         {255, 70, 0},
                         {255, 75, 0},
                         {255, 80, 0},
                         {255, 85, 0},
                         {255, 90, 0},
                         {255, 95, 0},
                         {255, 100, 0},
                         {255, 105, 0},
                         {255, 110, 0},
                         {255, 115, 0},
                         {255, 120, 0},
                         {255, 125, 0},
                         {255, 130, 0},
                         {255, 135, 0},
                         {255, 140, 0},
                         {255, 145, 0},
                         {255, 150, 0},
                         {255, 155, 0},
                         {255, 160, 0},
                         {255, 165, 0},
                         {255, 170, 0},
                         {255, 175, 0},
                         {255, 180, 0},
                         {255, 185, 0},
                         {255, 190, 0},
                         {255, 195, 0},
                          };
                          
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

  uint32_t rojo = pixels.Color(250,0,0);
  uint32_t verde = pixels.Color(0,150,0);
  uint32_t azul = pixels.Color(0,0,150);
  uint32_t amarillo = pixels.Color(250,250,0);
  uint32_t morado = pixels.Color(150,0,150);
  uint32_t celeste = pixels.Color(0,150,150);
  uint32_t blanco = pixels.Color(150,150,150);
  uint32_t negro = pixels.Color(0,0,0);


// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

void setup() {
    Serial.begin(9600);
    pixels.begin();
}

void loop() {

  juegoDegradado(40);
}

void juegoDegradado(int velocidad){
 
 PasadasEscalera = 1;
 pasadasCascada = 0;
 valorBrillo2 = 0;
 resto = 0;
 int PasadasCorre =0;
 
 while (pasadasCascada <= NUMPIXELS+17){
  
   for (int x=0; x<NUMPIXELS; x++){
  
     if (x > pasadasCascada){
       pixels.setPixelColor( x, DegradaRA[PasadasEscalera][0],DegradaRA[PasadasEscalera][1],DegradaRA[PasadasEscalera][2]);
       PasadasEscalera++;
  
      // Serial.println(PasadasEscalera);
       if (PasadasEscalera >= 40){
         PasadasEscalera=39;
       }
    
     } else    {
       pixels.setPixelColor( x, DegradaRA[0][0],DegradaRA[0][1],DegradaRA[0][2]);
     }
    
   }
  
   pasadasCascada++;
   PasadasEscalera=0;
  
  
   pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
   delay(velocidad); // Pausa por un periodo de tiempo (en milisegundos).
  
  
  
    
 }//WHILE
  


Por ahora este es el código, pensando, pero si voy mediante matrices, y si quiero usar este código varias veces para hacer degradados con otros colores, voy un poco forzado.

Con las controladoras TS1000 y con flash es muy fácil llegar a realizarlo, pero es mas veloz el programa de carga de led con arduino, llegando a tener mas posibilidades.

Con el mapeo, que no se utilizarlo correctamente,  veo que me degrada toda la tira, y busco que sea de forma ASCENDENTE, o DESCENDENTE

Code: [Select]
map(x, 0, 255, InicioColor, FinColor);
 

surbyte

Y para que usas un array cuando sabes como asciende la secuencia? Solo debes almacenar eso, la velocidad de subida/bajada de los leds.
Digamos en tu caso de ejemplo cada 5 y solo controla el tiempo en que dicho incremento se de.

Arrancas con {255, 0, 0} y subes de a 5 en 16 pasos.

Y eso te da libertad para muchos efectos.

Go Up