Permalink
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
212 lines (175 sloc) 4.54 KB
#include <Adafruit_NeoPixel.h>
#define MAX_VAL 255
#define DELAY_TIME 13
#define DELAY_TIME2 1
Adafruit_NeoPixel strip = Adafruit_NeoPixel(16, 5, NEO_GRB + NEO_KHZ800);
int sencerVal = 1;//センサーの割り込み防止
int colorVal =0;//色の順番の判定
int waitVal = 0;//待機フラグへ突入
int nowColorR = 0;//現在のカラーの値
int nowColorG = 0;
int nowColorB = 0;
int standbyFlag = 0;//待機フラグ
int standbyColorFlag = 0;//待機中の色のフラグ
int standbyColorR =0; //待機中の色のフラグ
int standbyColorG =0;
int standbyColorB =0;
void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
//Serial.begin(9800);
}
void loop() {
if(waitVal >30000){//オーバーフロー対策
waitVal = 1800;
}
int val =0;
for(int i=0; i< 10 ;i++){//センサー値のカウント
val = val+ digitalRead(3);
delay(5);
}
//Serial.println(val);
//Serial.print("sencerVal pre");
// Serial.println(sencerVal);
if(sencerVal == 1 && val <= 5){
standbyFlag = 0;
waitVal = 0;
sencerVal = 0;
//Serial.print("sencerVal if");
// Serial.println(sencerVal);
switch(colorVal){
case 0:
// Serial.println("loop0");
colorGradation(MAX_VAL, 0, 0, DELAY_TIME); // Red
colorVal++;
break;
case 1:
// Serial.println("loop1");
colorGradation(0, MAX_VAL, 0, DELAY_TIME); // Green
colorVal++;
break;
case 2:
// Serial.println("loop2");
colorGradation(MAX_VAL, MAX_VAL, 0, DELAY_TIME); // Yellow
colorVal++;
break;
case 3:
// Serial.println("loop3");
colorGradation(0, 0, MAX_VAL, DELAY_TIME); // Blue
colorVal++;
break;
case 4:
// Serial.println("loop4");
colorGradation(MAX_VAL, 0, MAX_VAL, DELAY_TIME); // Purple
colorVal++;
break;
case 5:
// Serial.println("loop5");
colorGradation(0, MAX_VAL, MAX_VAL, DELAY_TIME); // Cyan
colorVal++;
break;
case 6:
// Serial.println("loop6");
colorGradation(MAX_VAL, MAX_VAL, MAX_VAL, DELAY_TIME); // White
colorVal = 0;
break;
default :
// Serial.println("loop default");
colorVal = 0;
break;
}
}
else if(val >= 6 && waitVal>= 1800){
// Serial.print("standby");
sencerVal = 1;
standbyColor(DELAY_TIME2);
}
else if(val >= 6){
sencerVal = 1;
waitVal++;
}
delay(10);
}
void colorGradation (int setR,int setG,int setB,uint8_t wait){//グラデーション機能
int preR = nowColorR;//現在のLEDカラーの読み込み
int preG = nowColorG;
int preB = nowColorB;
int R = 0;//グラデーションで点灯するLEDの色
int G = 0;
int B = 0;
for(int i= 0; i<=50 ;i++){//セットする色と現在の色の差を50分割して徐々にセットする色に近づけていく
float d = (float)i/50;
// Serial.print("distance");
// Serial.println(d);
R = (setR-preR)*d+preR;
G = (setG-preG)*d+preG;
B = (setB-preB)*d+preB;
for(uint16_t p=0; p<strip.numPixels(); p++) {
strip.setPixelColor(p, strip.Color(R, G, B));
}
strip.show();
delay(wait);
// Serial.print("setColor");
// Serial.print(R);
// Serial.print(G);
// Serial.println(B);
}
if(R>255){
R = 255;
}
if(G>255){
G= 255;
}
if(B>255){
B = 255;
}
nowColorR = R;
nowColorG = G;
nowColorB = B;
}
void standbyColor(int wait){//待機モード機能
if(standbyFlag == 0){
standbyFlag = 1;
standbyColorR =255;
standbyColorG =255;
standbyColorB =255;
}
if(standbyFlag ==1){
if(standbyColorFlag == 0){ //白から緑にする処理
standbyColorR -= 10;
standbyColorB -= 10;
}
else if (standbyColorFlag == 1){ //緑から白にする処理
standbyColorR += 3;
standbyColorB += 3;
}
if( standbyColorR > 255){
standbyColorR =255;
standbyColorFlag =0;
}
if( standbyColorG > 255){
standbyColorG =255;
}
if( standbyColorB > 255){
standbyColorB =255;
}
if( standbyColorR < 0){
standbyColorR =0;
standbyColorFlag =1;
}
if( standbyColorG < 0){
standbyColorG =0;
}
if( standbyColorB < 0){
standbyColorB =0;
}
nowColorR = standbyColorR;
nowColorG = standbyColorG;
nowColorB = standbyColorB;
for(uint16_t p=0; p<strip.numPixels(); p++) {
strip.setPixelColor(p, strip.Color(standbyColorR, standbyColorG, standbyColorB));
}
strip.show();
delay(wait);
}
}