#include #define VAL1 30 // LEDの明るさ1 (0〜255) #define VAL2 10 // LEDの明るさ2 (VAL1より下げる) #define VAL3 5 // LEDの明るさ3 (VAL2より下げる) #define NUMPIXELS 18 // テープLEDの個数 Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, 6, NEO_GRB + NEO_KHZ800);//(個数,pin番号,NEO_GRB + NEO_KHZ800) int L1=250; int L2=500; int L3=750; int L4=1000; int LED1[37][3] = //18個の虹×2 + 白 { {VAL1,0,0}, //赤 {VAL1,VAL3,0}, //赤により近いイエロー {VAL1,VAL2,0}, //赤にやや近いイエロー {VAL2,VAL2,0}, //イエロー {VAL2,VAL1,0}, //緑にやや近いイエロー {VAL3,VAL1,0}, //緑により近いイエロー {0,VAL1,0}, //緑 {0,VAL1,VAL3}, //緑により近いシアン {0,VAL1,VAL2}, //緑にやや近いシアン {0,VAL2,VAL2}, //シアン {0,VAL2,VAL1}, //青にやや近いシアン {0,VAL3,VAL1}, //青により近いシアン {0,0,VAL1}, //青 {VAL3,0,VAL1}, //青により近いマゼンタ {VAL2,0,VAL1}, //青にやや近いマゼンタ {VAL2,0,VAL2}, //マゼンタ {VAL1,0,VAL2}, //赤にやや近いマゼンタ {VAL1,0,VAL3}, //赤により近いマゼンタ {VAL1,0,0}, //赤 {VAL1,VAL3,0}, //赤により近いイエロー {VAL1,VAL2,0}, //赤にやや近いイエロー {VAL2,VAL2,0}, //イエロー {VAL2,VAL1,0}, //緑にやや近いイエロー {VAL3,VAL1,0}, //緑により近いイエロー {0,VAL1,0}, //緑 {0,VAL1,VAL3}, //緑により近いシアン {0,VAL1,VAL2}, //緑にやや近いシアン {0,VAL2,VAL2}, //シアン {0,VAL2,VAL1}, //青にやや近いシアン {0,VAL3,VAL1}, //青により近いシアン {0,0,VAL1}, //青 {VAL3,0,VAL1}, //青により近いマゼンタ {VAL2,0,VAL1}, //青にやや近いマゼンタ {VAL2,0,VAL2}, //マゼンタ {VAL1,0,VAL2}, //赤にやや近いマゼンタ {VAL1,0,VAL3}, //赤により近いマゼンタ {VAL2,VAL2,VAL2} //白 (結局使わなかった) }; int melody[2][13] = { { 523, //ド 554, 587, //レ 622, 659, //ミ 698, //ファ 740, 784, //ソ 831, 880, //ラ 932, 988, //シ 1047 //ド }, { 262, //ド 277, 294, //レ 311, 330, //ミ 349, //ファ 370, 392, //ソ 415, 440, //ラ 466, 494, //シ 523 //ド }}; void setup() { strip.begin(); strip.show(); pinMode(3, INPUT); } void loop() { if(digitalRead(3) == LOW) { //タクトスイッチが押されたら開始する for (int i=0; i <= 1; i++){ //2オクターブ分 繰り返す ///////////////////ある日 森の中///////////////// noTone(8); shori1(0); delay(L1+30); tone(8, melody[i][7],L1); shori2(0); delay(L1+30); tone(8, melody[i][5],L1); shori1(2); delay(L1+30); tone(8, melody[i][7],L1); shori2(2); delay(L1+30); tone(8, melody[i][4],L4); shori3(0); delay(L4+30); noTone(8); shori1(4); delay(L1+30); tone(8, melody[i][4],L1); shori2(4); delay(L1+30); tone(8, melody[i][3],L1); shori1(6); delay(L1+30); tone(8, melody[i][4],L1); shori2(6); delay(L1+30); tone(8, melody[i][0],L4); shori3(4); delay(L4+30); ///////////////////くまさんに 出会った//////////////// noTone(8); shori1(8); delay(L1+30); tone(8, melody[i][4],L1); shori2(8); delay(L1+30); tone(8, melody[i][2],L1); shori1(10); delay(L1+30); tone(8, melody[i][0],L1); shori2(10); delay(L1+30); tone(8, melody[i][2],L4); shori3(8); delay(L4+30); noTone(8); shori1(12); delay(L1+30); tone(8, melody[i][7],L1); shori2(12); delay(L1+30); tone(8, melody[i][9],L1); shori1(14); delay(L1+30); tone(8, melody[i][7],L1); shori2(14); delay(L1+30); tone(8, melody[i][4],L4); shori3(12); delay(L4+30); ///////////////////花咲く 森の道///////////////// noTone(8); shori3(0); delay(L1+30); tone(8, melody[i][7],L1); shori3(2); delay(L1+30); tone(8, melody[i][9],L1); shori3(4); delay(L1+30); tone(8, melody[i][11],L1); shori3(6); delay(L1+30); tone(8, melody[i][12],L2); shori3(8); delay(L2+30); tone(8, melody[i][7],L2); shori3(10); delay(L2+30); tone(8, melody[i][4],L2); shori3(12); delay(L2+30); tone(8, melody[i][0],L2); shori3(14); delay(L2+30); tone(8, melody[i][9],L4); shori3(16); delay(L4+30); ///////////////////くまさんに 出会った///////////////// noTone(8); shori3(1); delay(L1+30); tone(8, melody[i][9],L1); shori3(3); delay(L1+30); tone(8, melody[i][11],L1); shori3(5); delay(L1+30); tone(8, melody[i][9],L1); shori3(7); delay(L1+30); tone(8, melody[i][7],L2); shori3(9); delay(L2+30); tone(8, melody[i][5],L2); shori3(11); delay(L2+30); tone(8, melody[i][4],L2); shori3(13); delay(L2+30); tone(8, melody[i][2],L2); shori3(15); delay(L2+30); tone(8, melody[i][0],L4); shori3(17); delay(L4+30); for (int i=0; i <= NUMPIXELS; i++){ strip.clear(); strip.show(); } } } } //////ここから関数/////////////////////////////// void shori1(int s) { //奇数番のLEDを光らせる for (int i=1; i <= NUMPIXELS; i++){ strip.clear(); strip.show();} for (int i=0; i <= NUMPIXELS; i=i+2){ strip.setPixelColor(i, strip.Color(LED1[i+s][0],LED1[i+s][1],LED1[i+s][2])); strip.show();} } void shori2(int s) { //偶数番のLEDを光らせる for (int i=1; i <= NUMPIXELS; i++){ strip.clear(); strip.show();} for (int i=1; i <= NUMPIXELS; i=i+2){ strip.setPixelColor(i, strip.Color(LED1[i+s][0],LED1[i+s][1],LED1[i+s][2])); strip.show();} } void shori3(int s) { //全てのLEDを光らせる for (int i=0; i <= NUMPIXELS; i++){ strip.setPixelColor(i, strip.Color(LED1[i+s][0],LED1[i+s][1],LED1[i+s][2])); strip.show(); } }