#include <Adafruit_NeoPixel.h>
#define PIN 10 // 腳位(可更改)
#define DELAYVAL 5 // 時間間隔(可更改)
#define NUMPIXELS 8 // 數量(可更改)
Adafruit_NeoPixel pixels( NUMPIXELS, PIN ); //設定腳位及數量(不可更改)
int R,G,B; //設定變數RGB,用來記錄
void setup() {
pixels.begin(); //啟用pixels服務
}
void loop() {
for (int j=0; j < 765; j++) { //彩虹走完需要765種變化
for (int i=0; i < NUMPIXELS; i++) { //設定「每一顆」燈顏色
Wheel(j + (765/12)*i); //計算該時間的RGB值,其中(765/12)*i為每一顆燈的偏差值
pixels.setPixelColor(i, pixels.Color(R,G,B)); //設定顏色
pixels.setBrightness(200); //調整亮度
}
pixels.show(); //顯示
delay(DELAYVAL); //延遲
}
}
int Wheel(int WheelPos){
int r,g,b; //設定暫存用變數
if(WheelPos>=765){ //如果狀態大於一輪
WheelPos -= 765; //將狀態減少一輪
}
switch(WheelPos/255){ //取狀態與255的商數
case 0: //若為0,表示 R -> G
r=254- WheelPos % 255; //R減少
g=WheelPos % 255; //G上升
b=0; //B為0
break;
case 1: //若為0,表示 G -> B
g=254- WheelPos % 255; //G減少
b=WheelPos % 255; //B上升
r=0; //R為0
break;
case 2: //若為0,表示 B -> R
b=254- WheelPos % 255; //B減少
r=WheelPos % 255; //R上升
g=0; //G為0
break;
}
R=r; //設定數值
G=g; //設定數值
B=b; //設定數值
}