Еще один простенький, но красивый эффект - переливающаяся радуга. Радужный спектр постепенно передвигается от одного конца ленты к другому. Используется библиотека 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);
  }
}