//stm kote for 25x WS2812B USB 3butons+Wheel pc mice case rainbowmod :3 (WS2812B pin PB8) //2 additional buttons (left and right) build into case (left reduce brightenes, right more brighteness) //5x 5mW lazers in casecover shining on roomcover powerd 3V3 GPIO direct 5Vheatresistior on cheapdiodes bridged //powber by mice usb wire + 2 electrolyte capazitors a 10V 1000yF to reduce ws2812b pulscurrent in usb wire //have fun :3 [MEOW] thanks to fastled lib use kote or parts of it if usefull (STM board: STM32F103C8T6 minimum system board , decompiler ARDUINO, dongle STlink-V2) #include //set stm flash to 128kB for fine function #define screeny 26//bit longer than stripe CRGBPalette16 currentPalette; TBlendType currentBlending; extern CRGBPalette16 myRedWhiteBluePalette; CRGB leds[screeny]; uint16_t beat=2246;// need more time for adjusting #define control PC13 #define t1 PB12 #define t2 PB13 #define lazer1 PB11 #define lazer2 PB10 #define lazer3 PB1 #define lazer4 PB0 #define lazer5 PA7 void setup(){ delay(1000); FastLED.addLeds(leds, screeny); FastLED.setBrightness(255); currentPalette = RainbowColors_p; currentBlending = BLEND; pinMode(t1, INPUT); pinMode(t2, INPUT); pinMode(lazer1,OUTPUT); pinMode(lazer2,OUTPUT); pinMode(lazer3,OUTPUT); pinMode(lazer4,OUTPUT); pinMode(lazer5,OUTPUT); pinMode(control,OUTPUT); digitalWrite(control,LOW); delay(300); } uint8_t onpress[4]; uint8_t bright=255; boolean lazers[7]={true,true,true,true,true,true,true}; uint8_t stepz,lazersp; uint16_t stepcount; void loop(){zeitreise();} long maintime=millis();long littletime=micros();long slowtime=millis(); void zeitreise(void){ while ((millis()- maintime) >= 5){maintime=millis();onpress[10]++;istinput();digitalWrite(control,LOW);} while ((millis()- slowtime) >= 100){slowtime = millis();digitalWrite(control,HIGH); lazersp++;if (lazersp >10) {lazersp=1;} if(lazersp <=5){lazers[lazersp]=true;}else{lazers[lazersp-5]=false;} } while ((micros()- littletime) >= (beat*10)){littletime = micros();powderlazers(); stepz+=10;if (stepz>255){stepz=0;} for( int y2 = 0; y2 < 7; y2++) { leds[(25-y2)-1] = ColorFromPalette( currentPalette,stepcount,bright,currentBlending); } stepcount=stepz; for( int y = 0; y < 9; y++) {stepcount+=25; leds[y] = ColorFromPalette( currentPalette,stepcount,bright,currentBlending); leds[(18-y)-1] = ColorFromPalette( currentPalette,stepcount,bright,currentBlending); } FastLED.show();} } void powderlazers(void){ if (lazers[1]==true) {digitalWrite(lazer1,HIGH);}else{digitalWrite(lazer1,LOW);} if (lazers[2]==true) {digitalWrite(lazer2,HIGH);}else{digitalWrite(lazer2,LOW);} if (lazers[3]==true) {digitalWrite(lazer3,HIGH);}else{digitalWrite(lazer3,LOW);} if (lazers[4]==true) {digitalWrite(lazer4,HIGH);}else{digitalWrite(lazer4,LOW);} if (lazers[5]==true) {digitalWrite(lazer5,HIGH);}else{digitalWrite(lazer5,LOW);} } void istinput(void){ if (onpress[10] >2) { if (digitalRead(t1) == HIGH && onpress[0] ==0 && bright <=245) { onpress[0] =1; bright+=10;} if (onpress[0] == 1) { onpress[1]++;} if (onpress[1] >= 10) { onpress[1] =0; onpress[0]=0; } if (digitalRead(t2) == HIGH && onpress[2] ==0 && bright >=10) { onpress[2] =1; bright-=10;} if (onpress[2] == 1) { onpress[3]++;} if (onpress[3] >= 5) { onpress[3] =0; onpress[2]=0; } onpress[10]=0; }}