Простенький, но интересный эффект для ленты WS2812b. В начале ленты зажигается огонек, который затем падает вниз, постепенно заполняя ленту. Цвет можно указать, можно установить случайный. Скетч масштабируется для любого количества светодиодов. Скорость регулируется. Используется библиотека AdafruitNeoPixel
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 6
#define NUMPIXELS 30 // определяем количество светиков в ленте
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 5; // скорость падения капли
void setup()
{
pixels.begin();
}
int rcolor = 0;
int gcolor = 0;
int bcolor = 0;
int i;
int j;
void loop() {
for(i=0;i<NUMPIXELS;i++)
{
//вычисляем случайный цвет
rcolor = 10*random(1,25); //random(1,254);
gcolor = 10*random(1,25); //random(1,254);
bcolor = 10*random(1,25); //random(1,254);
// берем первый цвет
pixels.setPixelColor(0, pixels.Color(rcolor,gcolor,bcolor));
pixels.show();
delay(500); //пауза при перемещении капли
// перемещаем цвет вниз до конца, NUMPIXELS-i:
for(j=2;j<NUMPIXELS-i;j=j+2)
{
pixels.setPixelColor(j-2, pixels.Color(0,0,0));
pixels.setPixelColor(j, pixels.Color(rcolor,gcolor,bcolor));
pixels.show();
delay(delayval);
if(j==(NUMPIXELS-i)-2)
{
pixels.setPixelColor(j, pixels.Color(0,0,0));
pixels.setPixelColor(j+1, pixels.Color(rcolor,gcolor,bcolor));
pixels.show();
delay(delayval);
}
}
}
for(int i=0;i<NUMPIXELS;i++)
{
// очищаем ленту после полного заполнения
pixels.setPixelColor(i, pixels.Color(0,0,0));
pixels.show();
delay(1);
}
}