Der folgende Code blendet die Farben eines Regenbogens langsam ineinander über.
#include <Adafruit_NeoPixel.h>
#define LED_PIN 13
#define NUM_LED 20
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LED, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(115200);
strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
strip.setPixelColor(0, 255, 255, 0);
strip.show(); // Turn OFF all pixels ASAP
}
int farben[6][3] = {
{ 255, 0, 0 }, // rot
{ 255, 50, 0 }, // orange
{ 255, 140, 0 }, // gelb
{ 0, 255, 0 }, //gruen
{ 0, 0, 255 }, // blau
{ 20, 0, 40 } // violett
};
void fade(int c1, int c2, int steps, int pause) {
float stepR = ((farben[c2][0] - farben[c1][0]) * 1.0) / steps;
float stepG = ((farben[c2][1] - farben[c1][1]) * 1.0) / steps;
float stepB = ((farben[c2][2] - farben[c1][2]) * 1.0) / steps;
for (int step = 0; step < steps; step++) {
int rNeu = farben[c1][0] + stepR * step;
int gNeu = farben[c1][1] + stepG * step;
int bNeu = farben[c1][2] + stepB * step;
setPixels(rNeu, gNeu, bNeu);
delay(pause);
}
setPixels(farben[c2][0], farben[c2][1], farben[c2][2]);
}
void setPixels(int r, int g, int b) {
for (int i = 0; i < NUM_LED; i++) {
strip.setPixelColor(i, r, g, b);
}
strip.show();
}
void regenbogen(int anz){
for (int i=0;i<anz;i++){
fade(i,(i+1)%anz,50,200);
}
}
void loop() {
regenbogen(6);
}