//MEOW :3 a timed driver vor 2RGB channel (STM32->220R->BD237->(2A1000Vdiod(red2x),whitenone)->30singlecolor0805 SMD leds parralel(eachcolor, reg,green,blue,white)) channel 1 on top from ACRYL backlight plate, chanel 2 on bottom)->negativ switched , +5V all same) *g //used 12 x 3mm yellow utrabright 20-30mA 2V4 as status leds, (soltered positive poel together.. ups so switching negaive one.. postitive over 2A100V diode to 3V3 to 3V3 direct on stm GPIO //tasters switching 3V3 to GPIOs (GPIOS groundet with 220R resistors) //picture printet modified psychedelic.jpeg (~94KB caused seens to be no better quality aviable file: http://www.marderchen.de/NEU/psychedelic_mod.png printet on colorlaser qualified transparent foil (2layers for more contrast) // some pics http://www.marderchen.de/NEU/RGBW_colorshift_ARTbacklight.jpg http://www.marderchen.de/NEU/RGBW_colorshiftartbacklight_ledtest.jpg http://www.marderchen.de/NEU/transparent_colorlaserprint.jpg http://www.marderchen.de/NEU/moving_art_RGBW-backlightprogress.jpg // have calculated the 142bpm and adjustet to compensate the timelossing durring switching fading the leds // result AWESOME! *purrr* // Hihi have a moving psychedelic flashing colors rainbow glowing ART picture its kind of hypnotising =^.^= // if changing colors in linear rainbow spectrum in backlight and have art with linear rainbowspectrum course lines, the lines moving also linear just simple^^ //have fun use it or parts is usefull thingys in martenkote #define weis1 PC13 #define weis2 PB13 #define rot1 PB12 #define grun1 PC15 #define blau1 PC14 #define rot2 PA8 #define grun2 PB15 #define blau2 PB14 #define to PA0 #define tu PA1 #define t1 PA12 #define t2 PA15 #define t3 PB6 #define gelbt1 PA9 #define gelbt2 PA10 #define gelb1 PA2 #define gelb2 PA3 #define gelb3 PA4 #define gelb4 PA5 #define gelb5 PA6 #define gelb6 PA7 #define gelb7 PB0 #define gelb8 PB1 #define gelb9 PB10 #define gelb10 PB11 int rainbow=0; uint16_t darkness,light; uint16_t duty[12]; long maintime=millis(); long blinblin=micros(); int beatstep=0; int16_t beatfine=1000; uint8_t onpress[7]; int steppery=1204; int whiter2=200; int bright=401; uint16_t gelbgelb1,gelbgelb2,whiteboost; void setup (){ pinMode(weis1,OUTPUT); pinMode(weis2,OUTPUT); pinMode(rot1,OUTPUT); pinMode(grun1,OUTPUT); pinMode(blau1,OUTPUT); pinMode(rot2,OUTPUT); pinMode(grun2,OUTPUT); pinMode(blau2,OUTPUT); pinMode(gelb1,OUTPUT); pinMode(gelb2,OUTPUT); pinMode(gelb3,OUTPUT); pinMode(gelb4,OUTPUT); pinMode(gelb5,OUTPUT); pinMode(gelb6,OUTPUT); pinMode(gelb7,OUTPUT); pinMode(gelb8,OUTPUT); pinMode(gelb9,OUTPUT); pinMode(gelb10,OUTPUT); //gelb10oben pinMode(tu,INPUT); pinMode(to,INPUT); pinMode(t1,INPUT); pinMode(t2,INPUT); pinMode(t3,INPUT); pinMode(gelbt1,OUTPUT); pinMode(gelbt2,OUTPUT); } void loop(){ zeitreise(); rainbowcalc(); machlicht(); drueckmich(); } int beatcount2=0; void istbeat(void){ if (beatstep==1) {digitalWrite(gelb1,LOW); duty[6]=20+whiteboost;} if (beatstep==2) {digitalWrite(gelb2,LOW);} if (beatstep==3) {digitalWrite(gelb3,LOW);} if (beatstep==4) {digitalWrite(gelb4,LOW);} if (beatstep==5) {digitalWrite(gelb5,LOW);} if (beatstep==6) {digitalWrite(gelb6,LOW); duty[6]=10+(whiteboost/4);} if (beatstep==7) {digitalWrite(gelb7,LOW);} if (beatstep==8) {digitalWrite(gelb8,LOW);} if (beatstep==9) {digitalWrite(gelb9,LOW);} if (beatstep==10){digitalWrite(gelb10,LOW);} if (beatcount2==1) {} } void gelbweg(void) { digitalWrite(gelb1,HIGH); digitalWrite(gelb2,HIGH); digitalWrite(gelb3,HIGH); digitalWrite(gelb4,HIGH); digitalWrite(gelb5,HIGH); digitalWrite(gelb6,HIGH); digitalWrite(gelb7,HIGH); digitalWrite(gelb8,HIGH); digitalWrite(gelb9,HIGH); digitalWrite(gelb10,HIGH); } void drueckmich(void){ if (onpress[4] >=15) { if (digitalRead(tu) == HIGH && onpress[0] ==0 ) { onpress[0]=1; beatfine+=50; } if (onpress[0] == 1) { onpress[1]++;digitalWrite(gelb1,LOW); } if (onpress[1] >= 20) { onpress[1] =0; onpress[0]=0; } if (digitalRead(to) == HIGH && onpress[2] ==0 ) { onpress[2] =1; beatfine-=50;} if (onpress[2] == 1) { onpress[3]++;digitalWrite(gelb10,LOW); } if (onpress[3] >= 20) { onpress[3] =0; onpress[2]=0; } if (digitalRead(t1) == HIGH && onpress[5] ==0 ) { onpress[5] =1; steppery+=400; if (steppery >2406) {steppery=0;}} if (onpress[5] == 1) { onpress[6]++; gelbgelb1=steppery/3; } if (onpress[6] >= 20) { onpress[6] =0; onpress[5]=0; } if (digitalRead(t2) == HIGH && onpress[7] ==0 ) { onpress[7] =1; whiter2+=40; if (whiter2 >400) {whiter2=0;} bright=200+whiter2;} if (onpress[7] == 1) { onpress[8]++; gelbgelb1=whiter2*2; } if (onpress[8] >= 20) { onpress[8] =0; onpress[7]=0; } if (digitalRead(t3) == HIGH && onpress[9] ==0 ) { onpress[9] =1; whiteboost+=50; if (whiteboost >700) {whiteboost=0;}} if (onpress[9] == 1) { onpress[10]++; gelbgelb2=whiteboost;} if (onpress[10] >= 20) { onpress[10] =0; onpress[9]=0; } onpress[4]=0; }} void zeitreise(void){ while ((millis()- maintime) >= 2) { maintime = millis(); onpress[4]++; rainbow+=8; if (gelbgelb1 >0) {gelbgelb1--;} if (gelbgelb2 >0) {gelbgelb2--;} } while ((micros()- blinblin) >= (81807+beatfine)) {//MEOW the PSY beat trigger beatstep++; rainbow+=150; // rainbow+=100; beatcount2++; if (beatcount2 >28) {beatcount2=0;} if (beatstep >=11) {beatstep=1; rainbow=steppery; }duty[6]=900; gelbweg(); istbeat(); blinblin = micros(); } } void rainbowcalc(void) { if(rainbow >=0 && rainbow <=400) {duty[0] =400; duty[1] =rainbow; duty[2] =0;} //rot ->gelb (rotmax grün+ blau0) if(rainbow >=401 && rainbow <=801) {duty[0] =(400 -(rainbow -401)); duty[1] =400; duty[2] =0;} //gelb ->grün (rot- grünmax blau0) if(rainbow >=802 && rainbow <=1202) {duty[0] =0; duty[1] =400; duty[2] =(rainbow - 802);} //grün ->cyan (rot0 grünmax blau+) if(rainbow >=1203 && rainbow <=1603) {duty[0] =0; duty[1] =(400 -(rainbow - 1203)); duty[2] =400;} //cyan ->blau (rot0 grün- blaumax) if(rainbow >=1604 && rainbow <=2004) {duty[0] =(rainbow-1604); duty[1] =0; duty[2] =400;} //blau ->lila (rot+ grün0 blaumax) if(rainbow >=2005 && rainbow <=2405) {duty[0] =400; duty[1] =0; duty[2] =(400- (rainbow -2006));} //lila ->rot (rotmax grün0 blau-) if(rainbow >= 2406) {rainbow =0;} duty[3]=duty[0]; duty[4]=duty[1]; duty[5]=duty[2]; duty[7]=duty[6]; } long startriger=micros(); void machlicht(void) { if (bright > 400){light=bright-400; darkness=0;} if (bright <=400){darkness=(400-(bright)); light=0;} while ((micros()-startriger) >= 2) { for (int16_t fcount1=0; fcount1 <(802); fcount1++) { if (fcount1 >=1 ) { if (fcount1 == ((401+darkness)-duty[0])) { digitalWrite(rot1, HIGH );} if (fcount1 == ((401+darkness)-duty[1])) { digitalWrite(grun1, HIGH );} if (fcount1 == ((401+darkness)-duty[2])) { digitalWrite(blau1, HIGH );} if (fcount1 == ((401+darkness)-duty[3])) { digitalWrite(rot2, HIGH );} if (fcount1 == ((401+darkness)-duty[4])) { digitalWrite(grun2, HIGH );} if (fcount1 == ((401+darkness)-duty[5])) { digitalWrite(blau2, HIGH );} if (fcount1 == ((801)-duty[6])) { digitalWrite(weis1, HIGH );} if (fcount1 == ((801)-duty[7])) { digitalWrite(weis2, HIGH );} if (fcount1 == ((801)-gelbgelb1)) { digitalWrite(gelbt1, LOW );} if (fcount1 == ((801)-gelbgelb2)) { digitalWrite(gelbt2, LOW );} } if (fcount1 >= (402 + light) ) { digitalWrite(rot1, LOW ); digitalWrite(grun1, LOW ); digitalWrite(blau1, LOW ); digitalWrite(rot2, LOW ); digitalWrite(grun2, LOW ); digitalWrite(blau2, LOW );} if (fcount1 >= 800) { digitalWrite(weis1, LOW ); digitalWrite(weis2, LOW ); digitalWrite(gelbt1, HIGH ); digitalWrite(gelbt2, HIGH );} } startriger = micros();}}