Простенький, но интересный эффект для ленты 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); }
}