#include <Adafruit_NeoPixel.h> //引入串列環狀LED所需函數庫
#define NUM 16 //環狀LED為16顆
#define DIN 13 //環狀LED資料輸入端,接至Arduino之D2腳
#define DT 20 //延遲為20ms
#define BZ 3//蜂鳴器接腳
Adafruit_NeoPixel ring=Adafruit_NeoPixel(NUM,DIN,NEO_GRB+NEO_KHZ800);//宣告環狀LED物件
uint8_t RGB[3];//紀錄RGB三色之顏色值
int PitchM[]={0,262,294,330,349,392,440,494};
//0(無),中音1(Do),2(Re),3(Mi),4(Fa),5(So),6(La),7(Ti)
void ChangeRGB(int i){//改變顏色之
for(int rgb=0;rgb<3;rgb++)//rgb=0~2,0:確認紅色,1:確認綠色,2:確認藍色
RGB[rgb]=(i & 0x01<<rgb)? 255:0;//若該色位元值為1設定為255,否則0
}//ChangeRGB()結束
void setup() { //初始設定
ring.begin(); //環狀LED,初始化
ring.setBrightness(255);//環狀LED,設定亮度為255(最亮)
pinMode(BZ, OUTPUT);//蜂鳴器接腳設定為輸出
}//setup()結束
void loop(){ //重覆執行之迴圏
//順時針
for(int i=0;i<8;i++){ //改變顏色值i=0~7
ChangeRGB(i);//依照i之值,改變顏色
tone(BZ,PitchM[i]); //播音
for(int j=0;j<NUM;j++){//改變亮之燈號0~NUM-1(15)
ring.setPixelColor(j,RGB[0],RGB[1],RGB[2]);//設定環狀LED第j燈之顏色
ring.show(); //更新環狀LED顏色
delay(DT); //延遲DTms
}//j之for迴圏結束
}//i之for迴圏結束
//反時針
for(int i=0;i<8;i++){ //改變顏色值i=0~7
ChangeRGB(i);//依照i之值,改變顏色
tone(BZ,PitchM[i]); //播音
for(int j=0;j<NUM;j++){//改變亮之燈號0~NUM-1(15)
ring.setPixelColor(NUM-1-j,RGB[0],RGB[1],RGB[2]);//設定環狀LED第j燈之顏色
ring.show(); //更新環狀LED顏色
delay(DT); //延遲DTms
}//j之for迴圏結束
}//i之for迴圏結束
//呼吸燈
for(int i=0;i<8;i++){ //改變顏色值i=0~7
ChangeRGB(i);//依照i之值,改變顏色
tone(BZ,PitchM[i]); //播音
for(int bright=0;bright<256;bright+=5){
ring.setBrightness(bright);
for(int j=0;j<NUM;j++){//改變亮之燈號0~NUM-1(15)
ring.setPixelColor(j,RGB[0],RGB[1],RGB[2]);//設定環狀LED第j燈之顏色
ring.show(); //更新環狀LED顏色
}//j之for迴圏結束
delay(DT/10); //延遲DT*10ms
}
}//i之for迴圏結束
}//loop()結束