# include Adafruit_NeoPixel pixels(138,6,NEO_GRB + NEO_KHZ800); int loop_speed, loop_timer=0; int disp1, target1, sw1_new, sw1_old=1, counter1; int disp2, target2, sw2_new, sw2_old=1, counter2; int disp3, target3, sw3_new, sw3_old=1, counter3; int rgb[138][3], musicScale[] = {523,587,659,698,784,880,988,1047}; int mapp[] = {7,8,9,10,11,12,21,22,31,30,29,28,27,26,17,16,15,14,13,12,21,22,31, 30,29,28,27,26, 17,18,19,20,21,32,33,34,35,36,37,38,39,40,41,22,23,24,25,26,27, 28,29,30,31,42,43,44,45,46, 37,36,35,34,33,32,41,42,51,50,49,48,47,46,37,36,35, 34,33,32,41,42,51,52,53,54,55,56,47,46,37,38,39,40,41,22,23,24,25,26,17,16}; int mapq[] = {6,0,1,2,3,4,5,0,1,2,3,4,5,6,70,64,65,66,67,68,69,64,65,66,67,68,69,70, 63,60,61,62,57,58,59,60,61,62,57,58,59,63,77,74,75,76,71,72,73,74,75,76,71,72,73,77}; void setup(){ randomSeed(analogRead(5)); pixels.begin(); tone(4,880); delay(50); noTone(4); delay(50); tone(4,1760); delay(50); noTone(4); target1 = random(60); counter1 = random(60); target2 = random(100); counter2 = random(100); target3 = random(56); counter3 = random(56); rgb_clear(); delay(500); } void loop(){ loop_speed = map(analogRead(A0), 0, 1023, 800, 0); if(++loop_timer > loop_speed){ loop_timer = 0; dot_display(); sw1_scan(); sw2_scan(); sw3_scan(); } sw1_scan(); sw2_scan(); sw3_scan(); } void sw1_scan(){ sw1_new = digitalRead(7); if(sw1_new != sw1_old){ sw1_old = sw1_new; if(sw1_new == 0){ if(disp1 == target1){ rgb_clear(); for(int i=0; i<9; i++){ tone(4, musicScale[i]); delay(40); noTone(4); delay(60); } nice_clear(); target1 = random(60); counter1 = random(60); delay(200); } else{ tone(4,700); delay(150); noTone(4); delay(20); } } } } void sw2_scan(){ sw2_new = digitalRead(8); if(sw2_new != sw2_old){ sw2_old = sw2_new; if(sw2_new == 0){ if(disp2 == target2){ rgb_clear(); for(int i=0; i<9; i++){ tone(4, musicScale[i]); delay(40); noTone(4); delay(60); } nice_clear(); target2 = random(100); counter2 = random(100); delay(200); } else{ tone(4,700); delay(150); noTone(4); delay(20); } } } } void sw3_scan(){ sw3_new = digitalRead(9); if(sw3_new != sw3_old){ sw3_old = sw3_new; if(sw3_new == 0){ if(disp3 == target3){ rgb_clear(); for(int i=0; i<9; i++){ tone(4, musicScale[i]); delay(40); noTone(4); delay(60); } nice_clear(); target3 = random(56); counter3 = random(56); delay(200); } else{ tone(4,700); delay(150); noTone(4); delay(20); } } } } void dot_display(){ int i,j; rgb_clear(); if(++counter1 > 59) counter1 = 0; i = counter1; disp1 = i; color_set(i); pixels.setPixelColor(i, pixels.Color(rgb[i][0],rgb[i][1],rgb[i][2])); target1_set(); if(++counter2 > 99) counter2 = 0; i = counter2; disp2 = i; j = mapp[i] + 60; color_set(j); pixels.setPixelColor(j, pixels.Color(rgb[j][0],rgb[j][1],rgb[j][2])); target2_set(); if(++counter3 > 55) counter3 = 0; i = counter3; disp3 = i; j = mapq[i] + 60; color_set(j); pixels.setPixelColor(j, pixels.Color(rgb[j][0],rgb[j][1],rgb[j][2])); target3_set(); pixels.show(); } void rgb_clear(){ int i,j; for(i=0;i<138;i++){ for(j=0;j<3;j++){ rgb[i][j] = 0; pixels.setPixelColor(i, pixels.Color(rgb[i][0],rgb[i][1],rgb[i][2])); } } } void target1_set(){ int i,j; i = target1; for(j=0;j<3;j++) rgb[i][j] = 25; pixels.setPixelColor(i, pixels.Color(rgb[i][0],rgb[i][1],rgb[i][2])); } void target2_set(){ int i,j; i = mapp[target2] + 60; for(j=0;j<3;j++) rgb[i][j] = 25; pixels.setPixelColor(i, pixels.Color(rgb[i][0],rgb[i][1],rgb[i][2])); } void target3_set(){ int i,j; i = mapq[target3] + 60; for(j=0;j<3;j++) rgb[i][j] = 25; pixels.setPixelColor(i, pixels.Color(rgb[i][0],rgb[i][1],rgb[i][2])); } void color_set(int i){ int dice = random(1,7); switch(dice){ case 1: rgb[i][0]=25; rgb[i][1]=0; rgb[i][2]=0; break; case 2: rgb[i][0]=0; rgb[i][1]=25; rgb[i][2]=0; break; case 3: rgb[i][0]=0; rgb[i][1]=0; rgb[i][2]=25; break; case 4: rgb[i][0]=15; rgb[i][1]=15; rgb[i][2]=0; break; case 5: rgb[i][0]=15; rgb[i][1]=0; rgb[i][2]=15; break; case 6: rgb[i][0]=0; rgb[i][1]=15; rgb[i][2]=15; break; } } void nice_clear(){ int i,j; for(i=0;i<138;i++){ for(j=0;j<3;j++){ rgb[i][j] = random(1,9); pixels.setPixelColor(i, pixels.Color(rgb[i][0],rgb[i][1],rgb[i][2])); } } pixels.show(); delay(250); for(i=0;i<138;i++){ for(j=0;j<3;j++){ rgb[i][j] = random(1,18); pixels.setPixelColor(i, pixels.Color(rgb[i][0],rgb[i][1],rgb[i][2])); } } pixels.show(); delay(250); for(i=0;i<138;i++){ for(j=0;j<3;j++){ rgb[i][j] = random(1,27); pixels.setPixelColor(i, pixels.Color(rgb[i][0],rgb[i][1],rgb[i][2])); } } pixels.show(); delay(250); for(i=0;i<138;i++){ for(j=0;j<3;j++){ rgb[i][j] = 0; pixels.setPixelColor(i, pixels.Color(rgb[i][0],rgb[i][1],rgb[i][2])); } } pixels.show(); }