¡ü256LED #include Adafruit_NeoPixel pixels(256,6,NEO_GRB + NEO_KHZ800); int rgb[3], timing[3], paw[4], mode=0, paw_mode=0, PAW_point; int pattern[256], color_mode=0; int musicScale[] = {523,587,659,698,784,880,988,1047}; float para[5] = {0.9, 0.6, 0.4, 0.2, 0.1}; void setup(){ pixels.begin(); tone(4,880); delay(50); noTone(4); delay(50); tone(4,1760); delay(50); noTone(4); pinMode(8, OUTPUT); pinMode(9, OUTPUT); digitalWrite(8, LOW); digitalWrite(9, LOW); pattern_set(); color_mode = random(0,6); nice_initial(); } void loop(){ int i=0,j; if(++timing[0] > 1000){ timing[0] = 0; if(++timing[1] > 40){ timing[1] = 0; if(++timing[2] > 4){ timing[2] = 0; pattern[32 + random(192)] = 1; color_mode = (color_mode + random(1,4)) % 6; } } PAW_sensor_read(); all_clear(); for(i=0;i<256;i++){ if(pattern[i] != 0){ color_set(color_mode); for(j=0;j<3;j++) rgb[j] = rgb[j] * para[timing[2]]; point_disp(i); } } PAW_point_display(); pixels.show(); pattern[PAW_point] = 0; clear_check(); } } void clear_check(){ int i,j = 0; for(i=0;i<256;i++){ if(pattern[i] == 0) j++; } if(j == 256){ for(i=0; i<9; i++){ tone(4, musicScale[i]); delay(40); noTone(4); delay(60); } pattern_set(); color_mode = random(0,6); nice_initial(); } } void pattern_set(){ int i; for(i=0;i<256;i++){ pattern[i] = 0; if((i & 0x10) == 0){ if(i%2 == 0) pattern[i] = 1; } else{ if(i%2 != 0) pattern[i] = 1; } } pattern[0] = 0; pattern[14] = 0; pattern[31] = 0; pattern[224] = 0; pattern[241] = 0; pattern[255] = 0; } void PAW_point_display(){ int d1, d2, d3, d4; d1 = ( 110 + map(paw[3],409,58,0,220) - map(paw[0],512,74,0,220) ) / 2; d2 = map( constrain(d1,0,100), 0, 100, 0, 15); d3 = ( 110 + map(paw[1],363,53,0,220) - map(paw[2],418,58,0,220) ) / 2; d4 = map( constrain(d3,0,100), 0, 100, 0, 15) * 16; PAW_point = d2 + d4; color_set(6); point_disp(PAW_point); } void PAW_sensor_read(){ switch(paw_mode){ case 0: digitalWrite(8, HIGH); break; case 1: paw[0] = analogRead(A0); paw[1] = analogRead(A1); digitalWrite(8, LOW); break; case 2: digitalWrite(9, HIGH); break; case 3: paw[2] = analogRead(A0); paw[3] = analogRead(A1); digitalWrite(9, LOW); break; } paw_mode = (paw_mode + 1) % 4; } void point_disp(int i){ int p = 255 - i; if(((p >> 4) & 1) == 0) p = (p & 0xf0) - (p & 0x0f) + 15; pixels.setPixelColor(p, pixels.Color(rgb[0],rgb[1],rgb[2])); } void all_clear(){ for(int i=0;i<256;i++) pixels.setPixelColor(i, pixels.Color(0,0,0)); } void color_set(int mode){ switch(mode){ case 0: rgb[0]=30; rgb[1]=0; rgb[2]=0; break; case 1: rgb[0]=0; rgb[1]=30; rgb[2]=0; break; case 2: rgb[0]=0; rgb[1]=0; rgb[2]=36; break; case 3: rgb[0]=20; rgb[1]=20; rgb[2]=0; break; case 4: rgb[0]=20; rgb[1]=0; rgb[2]=20; break; case 5: rgb[0]=0; rgb[1]=20; rgb[2]=20; break; case 6: rgb[0]=25; rgb[1]=25; rgb[2]=25; break; } } void nice_initial(){ int i,j; for(i=0;i<256;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<256;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<256;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); all_clear(); pixels.show(); }