//rainbow solarPOLARstern driver for 4RGB leds kathodetoground ledpins to direct to STM I/Os //its martencode so its free so used it in any kind you want buts its marten code so its chaotic.. //short code but its variating colors and brightness asnd speed of changing colors/and brightness in full rainbow+HSLspectrum totaly randomly leds never total black, leds somthimes white full seperate calculation for every RGB led //MEOW =^.^= #define rot PC13 #define grun PC15 #define blau PC14 #define blau1 PB12 #define grun1 PB13 #define rot1 PB14 #define blau2 PB15 #define grun2 PA8 #define rot2 PA9 #define blau3 PA0 #define grun3 PA1 #define rot3 PA2 int duty[10]; int ledmeng=5; //need to change 5 i using more RGB leds int32_t zeiten[6][15]; //need to change 6 i using more RGB leds int32_t ledata[6][15]; //0rot 1grun 2blau 3color 4regenbogenspeedv 5regenbogencolor 6 bright 7 brightspeedbrigthc 8brightcc 9nenrand 10bright1 11bright2 //need to change 6 i using more RGB leds int32_t ledataf[6][15];//need to change 6 i using more RGB leds long maintime=millis(); long maintime2=micros(); int16_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); } void loop() { zeitreise(); rainbowcalc(); autocolor(); machlicht(); } void autocolor(void){ for( int diren = 0; diren < ledmeng; diren ++) { if (zeiten[diren][5] >200) { ledata[diren][4]=random(0,10);zeiten[diren][5]=random(0,150);} if (zeiten[diren][2] >ledata[diren][4]) {ledata[diren][5]++; zeiten[diren][2]=0;} if (zeiten[diren][3] >200) {ledata[diren][9]=random(0,20); if (ledata[diren][9] <14) {ledata[diren][7]=random(20,350); ledata[diren][8]=random(1,5);zeiten[diren][3]=random(0,90); } if (ledata[diren][9] >= 14 && ledata[diren][9] <17) {ledata[diren][7]=random(100,410); ledata[diren][8]=random(2,7); zeiten[diren][3]=random(20,100); ledata[diren][14]=random(50,100);} if (ledata[diren][9] >= 17 ) {ledata[diren][7]=random(400,650); ledata[diren][8]=random(1,5); zeiten[diren][3]=random(0,50); }} if(zeiten[diren][4] > ledata[diren][8]) { if (ledata[diren][6] > ledata[diren][7]) {ledata[diren][6]--;} if (ledata[diren][6] < ledata[diren][7]) {ledata[diren][6]++;}zeiten[diren][4]=0;} if (zeiten[diren][6] > ledata[diren][14]) {ledata[diren][13]=random(1,30); zeiten[diren][6]=0;} }} long maintime3=millis(); void zeitreise(void){ while ((millis()- maintime) >= 5) { for( int dirun = 0; dirun < ledmeng; dirun ++) { zeiten[dirun][1]++; zeiten[dirun][3]++; zeiten[dirun][5]++;} maintime = millis(); } while ((micros()- maintime2) >= 350) { for( int diran = 0; diran < ledmeng; diran ++) { zeiten[diran][2]++; zeiten[diran][4]++; zeiten[diran][6]++; } maintime2 = micros(); }} void rainbowcalc(void) { for( int dirg = 0; dirg < ledmeng; dirg ++) { rainbow=ledata[dirg][5]; 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; ledata[dirg][5]=0;} ledata[dirg][0]=duty[0]; ledata[dirg][1]=duty[1]; ledata[dirg][2]=duty[2]; }} //10light //11darkness //12cach long startriger=micros(); int32_t light,darkness,dcach; //1//3//4 void machlicht(void) { for( int dien = 0; dien < ledmeng; dien ++) { if (ledata[dien][6] > 400){ledata[dien][10]=ledata[dien][6]-400; ledata[dien][12]=0;} if (ledata[dien][6] <=400){ledata[dien][12]=(400-(ledata[dien][6]))/2; ledata[dien][10]=0;} ledata[dien][11]=(ledata[dien][12]*ledata[dien][12])/1.8; } for( int smoth = 0; smoth < ledmeng; smoth ++) { for( int smoth2 = 0; smoth2 < ledmeng; smoth2 ++) { if ( ledataf[smoth][smoth2] > ledata[smoth][smoth2]) { ledataf[smoth][smoth2]-=ledata[smoth][13];} if ( ledataf[smoth][smoth2] <= ledata[smoth][smoth2]) { ledataf[smoth][smoth2]+=ledata[smoth][13];} }} while ((micros()-startriger) >= 4) { for (int32_t fcount1=0; fcount1 <(904); fcount1++) { if (fcount1 == ((401+ledataf[1][11])-ledataf[1][0])) { digitalWrite(rot, HIGH );} if (fcount1 == ((401+ledataf[1][11])-ledataf[1][1])) { digitalWrite(grun, HIGH );} if (fcount1 == ((401+ledataf[1][11])-ledataf[1][2])) { digitalWrite(blau, HIGH );} if (fcount1 == ((401+ledataf[2][11])-ledataf[2][0])) { digitalWrite(rot1, HIGH );} if (fcount1 == ((401+ledataf[2][11])-ledataf[2][1])) { digitalWrite(grun1, HIGH );} if (fcount1 == ((401+ledataf[2][11])-ledataf[2][2])) { digitalWrite(blau1, HIGH );} if (fcount1 == ((401+ledataf[3][11])-ledataf[3][0])) { digitalWrite(rot2, HIGH );} if (fcount1 == ((401+ledataf[3][11])-ledataf[3][1])) { digitalWrite(grun2, HIGH );} if (fcount1 == ((401+ledataf[3][11])-ledataf[3][2])) { digitalWrite(blau2, HIGH );} if (fcount1 == ((401+ledataf[4][11])-ledataf[4][0])) { digitalWrite(rot3, HIGH );} if (fcount1 == ((401+ledataf[4][11])-ledataf[4][1])) { digitalWrite(grun3, HIGH );} if (fcount1 == ((401+ledataf[4][11])-ledataf[4][2])) { digitalWrite(blau3, HIGH );} if (fcount1 >= (402 + ledataf[1][10] + ledataf[1][11]) ) { digitalWrite(rot, LOW ); digitalWrite(grun, LOW ); digitalWrite(blau, LOW );} if (fcount1 >= (402 + ledataf[2][10] + ledataf[2][11]) ) { digitalWrite(rot1, LOW ); digitalWrite(grun1, LOW ); digitalWrite(blau1, LOW );} if (fcount1 >= (402 + ledataf[3][10] + ledataf[3][11]) ) { digitalWrite(rot2, LOW ); digitalWrite(grun2, LOW ); digitalWrite(blau2, LOW );} if (fcount1 >= (402 + ledataf[4][10] + ledataf[4][11]) ) { digitalWrite(rot3, LOW ); digitalWrite(grun3, LOW ); digitalWrite(blau3, LOW );} } startriger = micros(); } }