//just simple RGB + white colorchangebrightenessfader code for anode/kathode RGB (SMD) leds ** 20xy RGB 0603 parralel over s8050 NPN transistor rot,grun,blau (5V) // 4channel a 3x 0603 RGB SMD parrallel switched negative to 5V (red over N4007 diode as resistor) rot,grun,blau (1,2,3,4) // 3 x RGB 5mm STRAW head led rot,grun,blau (5,6,7) switching 3V3 to GND, 6x 0.5Watt SMD OSRAM WHITE over 1 N4007 diode to s8050 NPN (5V) //[MEOW] its free have fun use it or parts if something usefull :3 //its rainbow (should use more red colors) sign shining for X-Mas radio FM broadcasting station/project // usind: STM32F103C8T6 72Mhz 128kB FLASH 32bit, 20kB RAM saued much I/Os and cheap //MEOW =^.^= #define rot PC13 #define grun PC14 #define blau PC15 #define rot1 PA0 #define grun1 PA1 #define blau1 PA2 #define rot2 PA3 #define grun2 PA4 #define blau2 PA5 #define rot3 PA6 #define grun3 PA7 #define blau3 PB0 #define rot4 PB1 #define grun4 PB10 #define blau4 PB14 #define rot5 PB12 #define grun5 PB13 #define blau5 PB14 #define rot6 PB15 #define grun6 PA8 #define blau6 PA9 #define rot7 PA10 #define grun7 PB5 #define blau7 PB6 #define weis PB7 int duty[4]; int ledmeng=9; int32_t leddata[10][18]; //0rainbowcolor 1bright (auto 2rot 3grun 4blau 5time bright 6time color 7zufallzeit long maintime=millis(); long maintime2=micros(); int32_t rainbow; void setup() { pinMode(rot, OUTPUT); pinMode(grun, OUTPUT); pinMode(blau, OUTPUT); pinMode(rot1, OUTPUT); pinMode(grun1, OUTPUT); pinMode(blau1, OUTPUT); pinMode(rot2, OUTPUT); pinMode(grun2, OUTPUT); pinMode(blau2, OUTPUT); pinMode(rot3, OUTPUT); pinMode(grun3, OUTPUT); pinMode(blau3, OUTPUT); pinMode(rot4, OUTPUT); pinMode(grun4, OUTPUT); pinMode(blau4, OUTPUT); pinMode(rot5, OUTPUT); pinMode(grun5, OUTPUT); pinMode(blau5, OUTPUT); pinMode(rot6, OUTPUT); pinMode(grun6, OUTPUT); pinMode(blau6, OUTPUT); pinMode(rot7, OUTPUT); pinMode(grun7, OUTPUT); pinMode(blau7, OUTPUT); pinMode(weis, OUTPUT); } void loop() { autocolor(); zeitreise(); rainbowcalc(); machlicht(); } //0rainbowcolor 1bright (auto 2rot 3grun 4blau 5timebright 6timecolor 7zufallzeitc 8zufallzeitmax 9brightsol 10colorist 11zufall 12timebrightc 13brightplus 14darkplus 15timecolorc int16_t weisbright,weistime,weistimec,weisbrightsol; void autocolor(void){ for( int diren = 0; diren < ledmeng; diren ++) { if (leddata[diren][7] >leddata[diren][8] || leddata[diren][1] == leddata[diren][9]) { leddata[diren][7]=0; leddata[diren][8]=random(5,30); leddata[diren][11]=random(0,20); leddata[diren][6]=random(5,40); if (leddata[diren][11] <7) { leddata[diren][1]=random(10,100); leddata[diren][5]=random(50,100);} if (leddata[diren][11] >= 17 && leddata[diren][11] <15) { leddata[diren][1]=random(100,300); leddata[diren][5]=random(10,100);} if (leddata[diren][11] >= 15 ) { leddata[diren][1]=random(300,400); leddata[diren][5]=random(3,20);}} if (leddata[diren][12] > leddata[diren][5]) {//bright if (leddata[diren][1] > leddata[diren][9]) {leddata[diren][9]++;} if (leddata[diren][1] < leddata[diren][9]) {leddata[diren][9]--;}leddata[diren][12]=0;} //color if (leddata[diren][16] > leddata[diren][6]) { leddata[diren][0]+=2; leddata[diren][16]=0;} } if(weistimec > weistime) {weistimec=0; if(weisbright > weisbrightsol) {weisbright--;} if(weisbright < weisbrightsol) {weisbright++;} if(weisbright == weisbrightsol) {weisbrightsol=random(10,600); weistime=random(20,130);}} } long maintime3=millis(); void zeitreise(void){ while ((millis()- maintime) >= 5) { maintime = millis(); } while ((micros()- maintime2) >= 5) { for( int dirun = 0; dirun < ledmeng; dirun ++) { leddata[dirun][12]++; leddata[dirun][16]++;} weistimec++; maintime2 = micros(); } while ((millis()- maintime3) >= 1000) { for( int diran = 0; diran < ledmeng; diran ++) { leddata[diran][7]++; } maintime3 = millis();} } void rainbowcalc(void) { for( int dirg = 0; dirg < ledmeng; dirg ++) { rainbow=leddata[dirg][0]; 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; leddata[dirg][0]=0;} leddata[dirg][2]=duty[0]; leddata[dirg][3]=duty[1]; leddata[dirg][4]=duty[2]; }} //10light //11darkness //12cach long startriger=micros(); void machlicht(void) { for( int dien = 0; dien < ledmeng; dien ++) { if (leddata[dien][9] > 200){leddata[dien][13]=leddata[dien][9]-200; leddata[dien][14]=0;} if (leddata[dien][9] <=200){leddata[dien][14]=200-(leddata[dien][9]); leddata[dien][13]=0;} } while ((micros()-startriger) >= 2) { for (int32_t fcount1=0; fcount1 <604; fcount1++) { if (fcount1 == ((401+leddata[1][14])-leddata[1][2])) { digitalWrite(rot, HIGH );} if (fcount1 == ((401+leddata[1][14])-leddata[1][3])) { digitalWrite(grun, HIGH );} if (fcount1 == ((401+leddata[1][14])-leddata[1][4])) { digitalWrite(blau, HIGH );} if (fcount1 == ((401+leddata[2][14])-leddata[2][2])) { digitalWrite(rot1, LOW );} if (fcount1 == ((401+leddata[2][14])-leddata[2][3])) { digitalWrite(grun1, LOW );} if (fcount1 == ((401+leddata[2][14])-leddata[2][4])) { digitalWrite(blau1, LOW );} if (fcount1 == ((401+leddata[3][14])-leddata[3][2])) { digitalWrite(rot2, LOW );} if (fcount1 == ((401+leddata[3][14])-leddata[3][3])) { digitalWrite(grun2, LOW );} if (fcount1 == ((401+leddata[3][14])-leddata[3][4])) { digitalWrite(blau2, LOW );} if (fcount1 == ((401+leddata[4][14])-leddata[4][2])) { digitalWrite(rot3, LOW );} if (fcount1 == ((401+leddata[4][14])-leddata[4][3])) { digitalWrite(grun3, LOW );} if (fcount1 == ((401+leddata[4][14])-leddata[4][4])) { digitalWrite(blau3, LOW );} if (fcount1 == ((401+leddata[5][14])-leddata[5][2])) { digitalWrite(rot4, LOW );} if (fcount1 == ((401+leddata[5][14])-leddata[5][3])) { digitalWrite(grun4, LOW );} if (fcount1 == ((401+leddata[5][14])-leddata[5][4])) { digitalWrite(blau4, LOW );} if (fcount1 == ((401+leddata[6][14])-leddata[6][2])) { digitalWrite(rot5, HIGH );} if (fcount1 == ((401+leddata[6][14])-leddata[6][3])) { digitalWrite(grun5, HIGH );} if (fcount1 == ((401+leddata[6][14])-leddata[6][4])) { digitalWrite(blau5, HIGH );} if (fcount1 == ((401+leddata[7][14])-leddata[7][2])) { digitalWrite(rot6, HIGH );} if (fcount1 == ((401+leddata[7][14])-leddata[7][3])) { digitalWrite(grun6, HIGH );} if (fcount1 == ((401+leddata[7][14])-leddata[7][4])) { digitalWrite(blau6, HIGH );} if (fcount1 == ((401+leddata[8][14])-leddata[8][2])) { digitalWrite(rot7, HIGH );} if (fcount1 == ((401+leddata[8][14])-leddata[8][3])) { digitalWrite(grun7, HIGH );} if (fcount1 == ((401+leddata[8][14])-leddata[8][4])) { digitalWrite(blau7, HIGH );} if (fcount1 == (601-weisbright )) { digitalWrite(weis, HIGH );} if (fcount1 >= (402+leddata[1][13]) ) { digitalWrite(rot, LOW ); digitalWrite(grun, LOW ); digitalWrite(blau, LOW );} if (fcount1 >= (402+leddata[2][13]) ) { digitalWrite(rot1, HIGH ); digitalWrite(grun1, HIGH ); digitalWrite(blau1, HIGH );} if (fcount1 >= (402+leddata[3][13]) ) { digitalWrite(rot2, HIGH ); digitalWrite(grun2, HIGH ); digitalWrite(blau2, HIGH );} if (fcount1 >= (402+leddata[4][13]) ) { digitalWrite(rot3, HIGH ); digitalWrite(grun3, HIGH ); digitalWrite(blau3, HIGH );} if (fcount1 >= (402+leddata[5][13]) ) { digitalWrite(rot4, HIGH ); digitalWrite(grun4, HIGH ); digitalWrite(blau4, HIGH );} if (fcount1 >= (402+leddata[6][13]) ) { digitalWrite(rot5, LOW ); digitalWrite(grun5, LOW ); digitalWrite(blau5, LOW );} if (fcount1 >= (402+leddata[7][13]) ) { digitalWrite(rot6, LOW ); digitalWrite(grun6, LOW ); digitalWrite(blau6, LOW );} if (fcount1 >= (402+leddata[8][13]) ) { digitalWrite(rot7, LOW ); digitalWrite(grun7, LOW ); digitalWrite(blau7, LOW );} if (fcount1 >= 600) { digitalWrite(weis, LOW);} startriger = micros(); } }} //*its marten code so never verry efficient or often used standart variablenames for me just codwriting musst be kind of fun not monotonous thingi.. but stil working fine =^.^=* //its cheaper to buy 4pin none chip RGB leds than WS2812B ever its more solderin work but less powerconsumtion and more brightenes, differen shapes,.....