#include <Adafruit_NeoPixel.h> //引入串列環狀LED所需函數庫
#define NUM 16 //環狀LED為16顆
#define DIN 13 //環狀LED資料輸入端,接至Arduino之D2腳
Adafruit_NeoPixel ring=Adafruit_NeoPixel(NUM,DIN,NEO_GRB+NEO_KHZ800);//宣告環狀LED物件
#include <LedControl.h> // 載入SPI_MAX7219_LED矩陣控制程式庫
LedControl LED_Matrix=LedControl(51,52,53,4);
//LedControl(DIN[MOSI],CLK[SCK],CS[SS],LED_模組數),DIN為LED模組腳位名稱,[MOSI]為SPI腳位名稱
const uint64_t IMAGES[] = { 0x3c66666e76663c00, //8*8 LED矩陣顯示字碼,0
0x7e1818181c181800, 0x7e060c3060663c00, 0x3c66603860663c00,//1,2,3
0x30307e3234383000, 0x3c6660603e067e00, 0x3c66663e06663c00,//4,5,6
0x1818183030667e00, 0x3c66663c66663c00, 0x3c66607c66663c00,//7,8,9
0x6666667e66663c00, 0x3e66663e66663e00, 0x3c66060606663c00,//A,B,C
0x3e66666666663e00, 0x7e06063e06067e00, 0x0606063e06067e00,//D,E,F
0x66361e3e66663e00, 0x3c66760606663c00, 0x3e66663e66663e00 //R,G,B
};//8*8 LED矩陣,顯示字碼結束
uint8_t RGB[3];//紀錄RGB三色之顏色值
void ChangeRGB(int i){//改變顏色之
for(int rgb=0;rgb<3;rgb++)//rgb=0~2,0:確認紅色,1:確認綠色,2:確認藍色
if(i & 0x01<<rgb){ //若該色位元值為1
RGB[rgb]=255;//將該顏色值設定為255(最濃)
for(int k=0;k<8;k++)//LED矩陣之列值,k=0~7
LED_Matrix.setRow(rgb,k,IMAGES[16+rgb]>>(8*k)); //顯示RGB字在LED矩陣上
}//if結果
else{ //該色位元值為0
RGB[rgb]=0;//將該顏色值設定為0
LED_Matrix.clearDisplay(rgb);//LED矩陣上,清除該色字元
}//else結束
}//ChangeRGB()結束
void setup() { //初始設定
ring.begin(); //環狀LED,初始化
ring.setBrightness(255);//環狀LED,設定亮度為255(最亮)
for(int i=0;i<4;i++) //i=0~3,LED矩陣有4顆
LED_Matrix.shutdown(i,0); //LED矩陣之off=0不關(即打開),off=1關
}//setup()結束
void loop(){ //重覆執行之迴圏
for(int i=0;i<8;i++){ //改變顏色值i=0~7
ChangeRGB(i);//依照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顏色
for(int k=0;k<8;k++)//LED矩陣之列值為0~7
LED_Matrix.setRow(3,k,IMAGES[j]>>(8*k));//顯示目前改變之燈號j於LED矩陣3號
delay(150); //延遲150ms
}//j之for迴圏結束
}//i之for迴圏結束
}//loop()結束