Еще один простенький, но красивый эффект - переливающаяся радуга. Радужный спектр постепенно передвигается от одного конца ленты к другому. Используется библиотека Adafruit NeoPixel.
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define NUMPIXELS 30
int led = 2;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 100;
void setup() {
strip.begin();
pinMode(led, OUTPUT);
}
void loop() {
rainbowCycle(20);
evilFlash(1000);
}
void evilFlash(uint8_t wait){
while(wait>10){
strip.setPixelColor(0, strip.Color(255, 0, 0));
strip.show();
delay(wait);
digitalWrite(led, HIGH);
int twait = (wait*0.1);
wait = wait - twait;
strip.setPixelColor(0, strip.Color(0, 0, 0));
strip.show();
delay((twait*10));
digitalWrite(led, LOW);
}
strip.setPixelColor(0, strip.Color(255, 0, 0));
strip.show();
digitalWrite(led, HIGH);
delay((wait*0.5));
strip.setPixelColor(0, strip.Color(0, 0, 0));
strip.show();
digitalWrite(led, LOW);
}
void rainbowCycle(uint8_t wait) {
uint16_t i, j;
for(j=0; j<256*5; j++) {
for(i=0; i< strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
}
strip.show();
delay(wait);
}
}
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
} else {
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
}