К сожалению, на этот раздел времени пока не хватает, а материалы для него второй год пылятся «мертвым грузом». Представляю подборку скетчей для управления светодиодной лентой на светодиодах WS2812b. Все скетчи проверены, работаю, и могут быть масштабированы на различное количество светодиодов (ограничено памятью вашего микроконтроллера).

Скетч ниже зажигает на ленте светодиоды в случайном порядке. Светодиоды зажигаются и гаснут плавно. Порядок - случайный. Скетч может быть использован для светиков с порядком GRB и RGB. Все настраивается в коде.

Посмотреть пример на YouTube

 

/** рандомное включение пикселей вверх и назад.
 */
#include <Adafruit_NeoPixel.h>
 
#define PIN    6          // Указываем pin
#define NUM_PIXELS  200  // Указать количество светиков в ленте
 
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(
  NUM_PIXELS,     
  PIN,        
  NEO_GRB + NEO_KHZ800    // выбрать нужную цветовую модель. GRB - Эту 
  //NEO_RGB + NEO_KHZ800    // Или RGB - эту
);
 
int brightnesses[NUM_PIXELS];
int directions[NUM_PIXELS];
int color[NUM_PIXELS];
uint8_t r = 0;
uint8_t g = 0;
uint8_t b = 0;
 
 
void setup() {
  pixels.begin();
  pixels.show();
  
  for(int i=0; i < NUM_PIXELS; i++){
    directions[i] = +1;
                brightnesses[i] = 0;
  }
}
 
void loop() {
  for(int i = 0 ; i < NUM_PIXELS ; i++)
  {
    if (/*pixels.getPixelColor(i) == 0x0 ||*/ brightnesses[i] == 0){
      // если пиксель погас
      // запускаем его снова. Чем выше значение stayBlack тем дольше он остается черным
      
 
      int stayBlack = 80;
      if (random(stayBlack) == 0)
                        { 
        directions[i] = +1; 
        brightnesses[i] = 1; 
        // выбор цвета
        if (random(2) == 0){
          // pink
          color[i] = 0;
          r = 10;
          g = 0;
          b = 3;
        } else {
          // orange
          color[i] = 1;
          r = 5;
          g = 10;
          b = 10;
        }
      }
// start at zero
      r = g = b = 0;
 
    } else {
 
      // 
      brightnesses[i] = brightnesses[i] + directions[i];
      //Serial.println(i);
      ////Serial.println(brightnesses[i]);
      // change direction at some point
      int maxBrightness = 40;
      int minBrightness = 20; // минимальная яркость
      //if (brightnesses[i] == random(minBrightness,maxBrightness) || brightnesses[i] == maxBrightness)
      if (brightnesses[i] == maxBrightness)
        directions[i] = -1;
      // установка r, g, 
      if (color[i] == 0){
        // Розовый цвет
        //Serial.println("in pink");
        r = brightnesses[i];
        g = 0;
        b = brightnesses[i]/3;
      } else {
        // оранжевый цвет
        //Serial.println("in orange");
        r = brightnesses[i];
        g = brightnesses[i]/5;
        b = 0; //brightnesses[i]/5;
      }
    
    }
    
    pixels.setPixelColor(i, r, g, b);
 
  }
  // Эффект бликов. Просто уберите комментарии
  // Чем меньше значение в скобках, if (random(100) тем чаще происходят вспышки
  
  if (random(100) == 0)
  pixels.setPixelColor(random(0, NUM_PIXELS), 255, 255, 255); //Цвет вспышек задается тут
 
  pixels.show();
  delay(10);
 
}