Скетч для колец с установленными светодиодами WS2812b. Например, таких. Сначала организует несколько вспышке основными цветами, затем пускает в прямом и обратном направлении бегущий огонек одного из шести заданных цветов (спиннер).
Скетч можно использовать в различных самоделках на основе управляемых светодиодных колец на светодиодах WS2812b.
После запуска в течение заданногол времени случайным образом вспыхивают светики. Цвет можно задавать. После этого эффекта запускается следующий эффект «Спиннер» (прокрутка) сначала в одну сторону, затем в другую. Длительность каждого эффекта можно задавать. Скет масштабируется на любое количество светодиодов, используемых в вашем кольце.
#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);}