К сожалению, на этот раздел времени пока не хватает, а материалы для него второй год пылятся «мертвым грузом». Представляю подборку скетчей для управления светодиодной лентой на светодиодах 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);
}