Go Down

Topic: Realizar Degradado Ascendente Neopixel (Read 98 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.

ArduMyth

#2
Dec 10, 2018, 01:12 am Last Edit: Dec 10, 2018, 01:13 am by ArduMyth
Demasiadas variables, sobran muchas cosas para un simple degradado y para valores que no van a pasar de 255 no sé por qué usas int en vez de byte.
Es cierto que no vas a agotar la memoria del Arduino con ese código, pero si la idea es tener muchos tipos de secuencia, efectos, degradados, (y otras tantas funciones que quizás añadas), etc, etc, en la memoria del Arduino bueno sería ir guardando espacio...

Go Up