Скетч для колец с установленными светодиодами 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);}