Скетч для колец с установленными светодиодами WS2812b. Например, таких. Сначала организует несколько вспышке основными цветами, затем пускает в прямом и обратном направлении бегущий огонек одного из шести заданных цветов (спиннер). 

 


 Скетч можно использовать в различных самоделках на основе управляемых светодиодных колец на светодиодах WS2812b.

После запуска в течение заданногол времени случайным образом вспыхивают светики. Цвет можно задавать. После этого эффекта запускается следующий эффект «Спиннер» (прокрутка) сначала в одну сторону, затем в другую. Длительность каждого эффекта можно задавать. Скет масштабируется на любое количество светодиодов, используемых в вашем кольце.

 

 

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

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>
 
#define PIN 6 //указываем пин
#define NUM 30 //указываем количество светиков
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM, PIN, NEO_GRB + NEO_KHZ800);
 
//задаем используемые цвета
uint32_t prevTime;
uint32_t color = 0xff0000;
uint32_t red = 0xff0000;
uint32_t yellow = 0xffff00;
uint32_t green = 0x00ff00;
uint32_t blue = 0x0000ff;
uint32_t violet = 0xff00ff;
 
uint32_t colors[] = {red,yellow,green,blue,violet};
 
uint8_t  mode   = 0; // Текущий эффект
uint8_t  offset = 0; // Позиция спиннера
uint8_t  index  = 0;
 
void setup() {
  strip.begin();
  strip.setBrightness(60); // Устанавливаем яркость светиков 1-255
  prevTime = millis();
}
 
void loop() {
  uint32_t t;
  uint32_t threshold;
  
  switch(mode) {
    case 0:
      threshold = 2000; // 2 секунды на вспышки
      randomColorSpark();
      break;
    case 1:
      threshold = 1500; // 1.5 спиннер в одну сторону
      clockwiseSpinner();
      break;
    case 2:
      threshold = 5000; // 5 секунд спиннер в другую сторону
      counterClockwiseSpinner();
      break;
  }
 
  t = millis();
  if((t - prevTime) > threshold) { 
    mode++;                        
    if(mode > 2) {                 
      mode = 0;                    
      index++;
      if(index > 4) index = 0;
      color = colors[index];
    }
    resetPixels();
    prevTime = t;
  }
}
 
void clockwiseSpinner() {
  for(uint8_t i=0; i<NUM; i++) {
    uint32_t c = 0;
    if(((offset + i) & 7) < 2) c = color; 
      strip.setPixelColor(i, c);
  }
  strip.show();
  offset++;
  delay(50);
}
 
void counterClockwiseSpinner() {
  for(uint8_t i=NUM; i>0; i--) {
    uint32_t c = 0;
    if(((offset + (i-1)) & 7) < 2) c = color; 
      strip.setPixelColor(i-1, c);
  }
  strip.show();
  offset--;
  delay(50);
}
 
void randomColorSpark() {
  uint8_t n = random(5);
  uint8_t i = random(NUM);
  strip.setPixelColor(i, colors[n]);
  strip.show();
  delay(10);
  strip.setPixelColor(i, 0);
}
 
void resetPixels() {
  for(uint8_t i=0; i<NUM; i++) strip.setPixelColor(i, 0);}