# include Adafruit_NeoPixel pixels(64,6,NEO_GRB + NEO_KHZ800); int loop_speed, sw_new, sw_old=1, counter, loop_timer=0, target, conv_rot; int table[98] = {0,9,18,27,36,45,54,63,62,53,44,35,26,17,8,1,10,19,28,37,46,55, 62,61,52,43,34,25,16,9,2,11,20,29,38,47,54,61,60,51,42,33,24,17,10,3,12,21,30, 39,46,53,60,59,50,41,32,25,18,11,4,13,22,31,38,45,52,59,58,49,40,33,26,19,12,5, 14,23,30,37,44,51,58,57,48,41,34,27,20,13,6,15,22,29,36,43,50,57}; int rgb[3], convert[64][4], musicScale[] = {523,587,659,698,784,880,988,1047}; int current, zanzou[6][4]; // [0=start,1-5][color0-2,point] void setup(){ pixels.begin(); tone(4,880); delay(50); noTone(4); delay(50); tone(4,1760); delay(50); noTone(4); convert_setting(); randomSeed(analogRead(5)); screen_initial(); } void loop(){ loop_speed = map(analogRead(A0), 0, 1023, 1000, 1); if(++loop_timer > loop_speed){ loop_timer = 0; zanzou_display(); address_calculate(); current_disp(); target_disp(); pixels.show(); } sw_scan(); } void zanzou_display(){ int i,j; for(j=0;j<3;j++) pixels.setPixelColor(zanzou[5][3], pixels.Color(0,0,0)); for(j=5;j>0;j--){ zanzou[j][3] = zanzou[j-1][3]; for(i=0;i<3;i++){ rgb[i] = 0.48 * zanzou[j-1][i]; zanzou[j][i] = rgb[i]; } pixels.setPixelColor(zanzou[j][3], pixels.Color(rgb[0],rgb[1],rgb[2])); } } void current_disp(){ color_set(); pixels.setPixelColor(current, pixels.Color(rgb[0],rgb[1],rgb[2])); zanzou[0][3] = current; for(int j=0;j<3;j++) zanzou[0][j] = rgb[j]; } void target_disp(){ for(int j=0;j<3;j++) rgb[j] = 25; pixels.setPixelColor(target, pixels.Color(rgb[0],rgb[1],rgb[2])); } void address_calculate(){ if(++counter > 97){ counter = 0; if(++conv_rot > 3) conv_rot = 0; } current = convert[table[counter]][conv_rot]; } void screen_initial(){ target = random(64); rgb_clear(); target_disp(); pixels.show(); counter = 0; conv_rot = 0; } void sw_scan(){ sw_new = digitalRead(8); if(sw_new != sw_old){ sw_old = sw_new; if(sw_new == 0){ if(current == target){ for(int i=0; i<9; i++){ tone(4, musicScale[i]); delay(40); noTone(4); delay(60); } nice_clear(); screen_initial(); delay(200); } else{ tone(4,500); delay(500); noTone(4); delay(200); } } } } void rgb_clear(){ int i,j; for(i=0;i<64;i++) pixels.setPixelColor(i, pixels.Color(0,0,0)); for(i=0;i<6;i++){ for(j=0;j<4;j++) zanzou[i][j] = 0; } } void color_set(){ switch(random(1,7)){ case 1: rgb[0]=30; rgb[1]=0; rgb[2]=0; break; case 2: rgb[0]=0; rgb[1]=30; rgb[2]=0; break; case 3: rgb[0]=0; rgb[1]=0; rgb[2]=36; break; case 4: rgb[0]=20; rgb[1]=20; rgb[2]=0; break; case 5: rgb[0]=20; rgb[1]=0; rgb[2]=20; break; case 6: rgb[0]=0; rgb[1]=20; rgb[2]=20; break; } } void convert_setting(){ for(int i=0;i<64;i++){ convert[i][0] = i; convert[i][1] = 8*(7-(i%8)) + ((i/8)%8); convert[i][2] = 63-i; convert[i][3] = 8*(i%8) + (7-(i/8)%8); } } void nice_clear(){ int i,j; for(i=0;i<64;i++){ for(j=0;j<3;j++){ rgb[j] = random(1,8); pixels.setPixelColor(i, pixels.Color(rgb[0],rgb[1],rgb[2])); } } pixels.show(); delay(250); for(i=0;i<64;i++){ for(j=0;j<3;j++){ rgb[j] = random(1,20); pixels.setPixelColor(i, pixels.Color(rgb[0],rgb[1],rgb[2])); } } pixels.show(); delay(250); for(i=0;i<64;i++){ for(j=0;j<3;j++){ rgb[j] = random(1,33); pixels.setPixelColor(i, pixels.Color(rgb[0],rgb[1],rgb[2])); } } pixels.show(); delay(250); }