#include <Adafruit_NeoPixel.h>
#define PIN 2
#define NUMPIXELS 43
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int RGB = 0;
int RGB_t = 0;
int RGB_r = 0;
int RGB_g = 0;
int RGB_b = 0;
int RGB_L = 0;
int color = 0;
int i = 0 ;
void setup() {
pixels.begin();
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(A0, INPUT_PULLUP);
}
void loop() {
if(digitalRead(4) == 0 && digitalRead(5) == 1) {
if (analogRead(A0) < 750 ) {color_0();}
if (analogRead(A0) >= 750 ) {color_1();}}
if(digitalRead(5) == 0 && digitalRead(4) == 1) {color_2();}
if(digitalRead(5) == 1 && digitalRead(4) == 1) {color_3();}
}
void color_0(){ //單色迴旋
pixels.setBrightness(255);
for (int i = 0 ; i<NUMPIXELS ; ++i){
RGB += 2040/NUMPIXELS ;
if (RGB > 2040){RGB -= 2040;}
if (analogRead(A0) <40) {color = 0;}
if (analogRead(A0) >700 ) {color = 13;}
if (analogRead(A0) >=40 && analogRead(A0) <= 700) {color = map(analogRead(A0),40,700,0,13);}
switch (color){
case 0 : RGB_r = 255 ; RGB_g = 0 ; RGB_b = 0; break;
case 1 : RGB_r = 255 ; RGB_g = 125 ; RGB_b = 0; break;
case 2 : RGB_r = 255 ; RGB_g = 255 ; RGB_b = 0; break;
case 3 : RGB_r = 125 ; RGB_g = 255 ; RGB_b = 0; break;
case 4 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 0; break;
case 5 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 125; break;
case 6 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 255; break;
case 7 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 255; break;
case 8 : RGB_r = 0 ; RGB_g = 125 ; RGB_b = 255; break;
case 9 : RGB_r = 0 ; RGB_g = 0 ; RGB_b = 255; break;
case 10 : RGB_r = 125 ; RGB_g = 0 ; RGB_b = 255; break;
case 11 : RGB_r = 255 ; RGB_g = 0 ; RGB_b = 255; break;
case 12 : RGB_r = 255 ; RGB_g = 125 ; RGB_b = 255; break;
case 13 : RGB_r = 255 ; RGB_g = 255 ; RGB_b = 255; break;
}
if (RGB <=255) {pixels.setPixelColor( i, RGB_r * (255-RGB)/255, RGB_g* (255-RGB)/255, RGB_b* (255-RGB)/255);}
if (RGB >255 && RGB <= 1785) {pixels.setPixelColor( i, RGB_r * 0 , RGB_g *0, RGB_b* 0); }
if (RGB >1785 && RGB<= 2040) {pixels.setPixelColor( i, RGB_r * (RGB-1785)/255, RGB_g* (RGB-1785)/255, RGB_b* (RGB-1785)/255); }
}
pixels.show();
delay(1);
}
void color_1(){ //彩虹迴旋
for (int i = 0 ; i<NUMPIXELS ; ++i){
RGB += 1530/NUMPIXELS ;
if (RGB > 1530){RGB -= 1520;}
if (RGB <=255) {RGB_r = 255 ; RGB_g = 0 ;RGB_b = 255-RGB;}
if (RGB >255 && RGB<= 510) {RGB_r = 255 ; RGB_g = RGB-255 ; RGB_b = 0;}
if (RGB >510 && RGB<= 765) {RGB_r = 765-RGB ; RGB_g = 255; RGB_b = 0 ;}
if (RGB >765 && RGB<= 1020) {RGB_r = 0 ; RGB_g = 255; RGB_b = RGB-765 ;}
if (RGB >1020 && RGB<= 1275) {RGB_r = 0 ; RGB_g = 1275-RGB; RGB_b = 255 ;}
if (RGB >1275 && RGB<= 1530) {RGB_r = RGB - 1275 ; RGB_g = 0; RGB_b = 255 ;}
pixels.setPixelColor( i, RGB_r, RGB_g, RGB_b); }
pixels.show();
delay(100);
}
void color_2(){ //固定單色
pixels.setBrightness(255);
if (analogRead(A0) <=750){
if (analogRead(A0) <40) {color = 0;}
if (analogRead(A0) >700 && analogRead(A0) <= 750) {color = 13;}
if (analogRead(A0) >=40 && analogRead(A0) <= 700) {color = map(analogRead(A0),40,700,0,13);}
switch (color){
case 0 : RGB_r = 255 ; RGB_g = 0 ; RGB_b = 0; break;
case 1 : RGB_r = 255 ; RGB_g = 125 ; RGB_b = 0; break;
case 2 : RGB_r = 255 ; RGB_g = 255 ; RGB_b = 0; break;
case 3 : RGB_r = 125 ; RGB_g = 255 ; RGB_b = 0; break;
case 4 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 0; break;
case 5 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 125; break;
case 6 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 255; break;
case 7 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 255; break;
case 8 : RGB_r = 0 ; RGB_g = 125 ; RGB_b = 255; break;
case 9 : RGB_r = 0 ; RGB_g = 0 ; RGB_b = 255; break;
case 10 : RGB_r = 125 ; RGB_g = 0 ; RGB_b = 255; break;
case 11 : RGB_r = 255 ; RGB_g = 0 ; RGB_b = 255; break;
case 12 : RGB_r = 255 ; RGB_g = 125 ; RGB_b = 255; break;
case 13 : RGB_r = 255 ; RGB_g = 255 ; RGB_b = 255; break;
}
for (int i = 0 ; i<NUMPIXELS ; ++i){
pixels.setPixelColor( i, RGB_r, RGB_g, RGB_b);
}
pixels.show();
delay(100);
}
if (analogRead(A0) >750){
RGB += 1 ;
if (RGB > 1530){RGB -= 1530;}
if (RGB <=255) {RGB_r = 255 ; RGB_g =0 ;RGB_b = 255- RGB;}
if (RGB >255 && RGB<= 510) {RGB_r = 255 ; RGB_g = RGB- 255 ; RGB_b = 0;}
if (RGB >510 && RGB<= 765) {RGB_r = 765-RGB ; RGB_g = 255; RGB_b = 0 ;}
if (RGB >765 && RGB<= 1020) {RGB_r = 0 ; RGB_g = 255 ;RGB_b = RGB - 765;}
if (RGB >1020 && RGB<= 1275) {RGB_r = 0 ; RGB_g = 1275-RGB ;RGB_b = 255;}
if (RGB >1275 && RGB<= 1530) {RGB_r = RGB- 1275 ; RGB_g = 0 ;RGB_b = 255;}
for (int i = 0 ; i<NUMPIXELS ; ++i){
pixels.setPixelColor( i, RGB_r, RGB_g, RGB_b);
}
pixels.show();
delay(5);
}
}
void color_3(){ //呼吸燈
if (analogRead(A0) <750) {
RGB_L +=1;
if (RGB_L >= 510) {RGB_L = 0;}
if (RGB_L <= 255){pixels.setBrightness(RGB_L);}
if (RGB_L > 255){pixels.setBrightness(510-RGB_L);}
if (analogRead(A0) <40) {color = 0;}
if (analogRead(A0) >700 && analogRead(A0) <= 750) {color = 13;}
if (analogRead(A0) >=40 && analogRead(A0) <= 700) {color = map(analogRead(A0),40,700,0,13);}
switch (color){
case 0 : RGB_r = 255 ; RGB_g = 0 ; RGB_b = 0; break;
case 1 : RGB_r = 255 ; RGB_g = 125 ; RGB_b = 0; break;
case 2 : RGB_r = 255 ; RGB_g = 255 ; RGB_b = 0; break;
case 3 : RGB_r = 125 ; RGB_g = 255 ; RGB_b = 0; break;
case 4 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 0; break;
case 5 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 125; break;
case 6 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 255; break;
case 7 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 255; break;
case 8 : RGB_r = 0 ; RGB_g = 125 ; RGB_b = 255; break;
case 9 : RGB_r = 0 ; RGB_g = 0 ; RGB_b = 255; break;
case 10 : RGB_r = 125 ; RGB_g = 0 ; RGB_b = 255; break;
case 11 : RGB_r = 255 ; RGB_g = 0 ; RGB_b = 255; break;
case 12 : RGB_r = 255 ; RGB_g = 125 ; RGB_b = 255; break;
case 13 : RGB_r = 255 ; RGB_g = 255 ; RGB_b = 255; break;
}
for (int i = 0 ; i<NUMPIXELS ; ++i){
pixels.setPixelColor( i, RGB_r, RGB_g, RGB_b); }
pixels.show();
delay(8);
}
if (analogRead(A0) > 750) {
RGB_L +=1;
if (RGB_L >= 510) {RGB_L = 0; color = random(0,13);
switch (color){
case 0 : RGB_r = 255 ; RGB_g = 0 ; RGB_b = 0; break;
case 1 : RGB_r = 255 ; RGB_g = 125 ; RGB_b = 0; break;
case 2 : RGB_r = 255 ; RGB_g = 255 ; RGB_b = 0; break;
case 3 : RGB_r = 125 ; RGB_g = 255 ; RGB_b = 0; break;
case 4 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 0; break;
case 5 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 125; break;
case 6 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 255; break;
case 7 : RGB_r = 0 ; RGB_g = 255 ; RGB_b = 255; break;
case 8 : RGB_r = 0 ; RGB_g = 125 ; RGB_b = 255; break;
case 9 : RGB_r = 0 ; RGB_g = 0 ; RGB_b = 255; break;
case 10 : RGB_r = 125 ; RGB_g = 0 ; RGB_b = 255; break;
case 11 : RGB_r = 255 ; RGB_g = 0 ; RGB_b = 255; break;
case 12 : RGB_r = 255 ; RGB_g = 125 ; RGB_b = 255; break;
case 13 : RGB_r = 255 ; RGB_g = 255 ; RGB_b = 255; break;
}
}
if (RGB_L <= 255){pixels.setBrightness(RGB_L);}
if (RGB_L > 255){pixels.setBrightness(510-RGB_L);}
for (int i = 0 ; i<NUMPIXELS ; ++i){
pixels.setPixelColor( i, RGB_r, RGB_g, RGB_b); }
pixels.show();
delay(8);
}
}