//rainbow solarPOLARstern driver rebuild+codeupgrage caused old solar case notlonge looking fine (not weatherproof) //maybe done just some speed optimizing left //new acryl (prespex)case + new polarisstar oldone often fallen down lossing some peaks *sight its the lastone i have)# //+2x 3Watt highpower RGB LED (one in star,one below star with 30° reflector +2x UV 420nm 3Watt highpowerleds //+4x awesome special 5mm with lense 90.000mcd ultrabright white spotleds //+4x 5mm 4pin RGB leds //capacitors: instar RGB every color 860uF elektroly paralel, 3watt rgb below +UV leds 66uF tantal parralel, 90kmcd leds+4x 5mm RGB 40uF tantal parralel //2x tp4056 charger, 1x 5V 2A boost stepup (2200uF parralel on uinput, 6600uF parralel on output) Li-ion cells: 5x ultrafire (used form old star) meassured 1000mAh capacity,3x Li.ion each ~2400mAh>> ~12200mAh total //solarpanel removed.. sunn newer bright enought to charge star for night with 2x 6V 1Watt solarpanel //3watt leds pulsed by D882 NPN (150R to GPIO) leds positive 5V, other leds pulsed by J3Y NPN also 150R to GPIO, red colors have inline diode as resistor //usb power port for aditional xmas decoration //taster to change programm // old old kote ~3years old much more brainbpower since writing it so not upgrade old code think its better writen a new one.. // polaris maybe psyflashmode change by taster but normaly its fading slow linear rainbow/brighteness //windowsboard solar polaris old programm: https://marderchen.lima-city.de/wuselcode/RGB_driver_for_polarstern_progress.txt /*pictuires * https://marderchen.lima-city.de/NEU+/need_torebuild_solarwindowboardpolaris_casedeforms.jpg * https://marderchen.lima-city.de/NEU+/solarpolarisparts_replaceboardcausWS2812Bable.jpg * https://marderchen.lima-city.de/NEU+/rebuild_windowboard_polaris.jpg * https://marderchen.lima-city.de/NEU+/rebuild_window_polaris_prohressfortoday.jpg * https://marderchen.lima-city.de/NEU+/windowboard_RGBpolaris_heatsink.jpg * https://marderchen.lima-city.de/NEU+/windowboard_RGBpolaris_heatsinkart.jpg * https://marderchen.lima-city.de/NEU+/windowboard_RGBpolaris_progresstoday_1.jpg * https://marderchen.lima-city.de/NEU+/windowboard_RGBpolaris_progresstoday_2.jpg * https://marderchen.lima-city.de/NEU+/new_window_RGBpolaris_polarisgluinglowpowertest%20.jpg * testrun so awesome * https://marderchen.lima-city.de/NEU+/new_window_RGBpolaris_testrun_1.jpg * https://marderchen.lima-city.de/NEU+/new_window_RGBpolaris_testrun_2.jpg * https://marderchen.lima-city.de/NEU+/new_window_RGBpolaris_testrun_3.jpg * https://marderchen.lima-city.de/NEU+/new_window_RGBpolaris_testrun_4.jpg * https://marderchen.lima-city.de/NEU+/new_window_RGBpolaris_testrun_5.jpg * https://marderchen.lima-city.de/NEU+/new_window_RGBpolaris_testrun_6.jpg * https://marderchen.lima-city.de/NEU+/new_window_RGBpolaris_testrun_7.jpg * *puRRRRRrrr this is epic high quality mindfucking (actualy fariouse speed slow fading) x-mas decoration hihihi */ #define t1 PA0 #define rot0 PB12 //3watt instern #define grun0 PB13 #define blau0 PB14 #define blau1 PA9 //3watt #define grun1 PA8 #define rot1 PB15 #define UV1 PA10 //3watt #define UV2 PB5 #define blau2 PB8 //4x 5mm RGB parralel #define grun2 PB9 #define rot2 PC13 #define ww1 PC14 //90kmcd /0.5Watt white #define ww2 PB6 #define ww3 PB7 #define ww4 PC15 #define ledviele 9 uint8_t onpress[3],modus=0; //\/bright ^0DUNKEL (==HELL-WEISE uint32_t leddata[ledviele+1][9]; //color,brighteness,cach r,g,b,cach brightadd,darkadd // || >color>>> <>0 timer1 colorinterval <>1 wartezeit <>2 colorziel <>3 interfalcounter <>4 wastun <> // \/ >bright>> <>5 timer2 brightinterfall <>6 wartezeit <>7 brightziel <>8 interfalcounter <>9 wastun <>10 brihgmaxtcount <>11 das maxhell <> 12 mehrwarten uint16_t ledzeugs[ledviele+1][13]; uint8_t sohell[11]={80,40,40,80,30,60,10,10,20}; void setup() { delay(1000); //capacitors ready pinMode(rot0, OUTPUT);pinMode(grun0, OUTPUT);pinMode(blau0, OUTPUT); pinMode(rot1, OUTPUT);pinMode(grun1, OUTPUT);pinMode(blau1, OUTPUT); pinMode(rot2, OUTPUT);pinMode(grun2, OUTPUT);pinMode(blau2, OUTPUT); pinMode(UV1,OUTPUT); pinMode(UV2,OUTPUT); pinMode(ww1,OUTPUT); pinMode(ww2,OUTPUT); pinMode(ww3,OUTPUT); pinMode(ww4,OUTPUT); pinMode(t1,INPUT); for(uint8_t daz=0;dazledzeugs[dar][0]){ledzeugs[dar][3]=0; //änderinterfall //| farbenzielsetzen | zielsuchspeed | bleib weile beim ziel | warten! | if(leddata[dar][0]==ledzeugs[dar][2]){ledzeugs[dar][2]=random(0,30)*80;ledzeugs[dar][0]=random(0,10);ledzeugs[dar][1]=random(5,20)*10;ledzeugs[dar][4]=1;} if(leddata[dar][0]> ledzeugs[dar][2]){ leddata[dar][0]--;} //änder zu farbe if(leddata[dar][0]< ledzeugs[dar][2]){ leddata[dar][0]++;}} if(ledzeugs[dar][4]==1){ledzeugs[dar][1]--;if(ledzeugs[dar][1]<1){ledzeugs[dar][4]=0;}} //warten if(ledzeugs[dar][4]==2){} //wusel helligkeit if(ledzeugs[dar][9]==0){ledzeugs[dar][8]++;} //wenn nicht warten if(ledzeugs[dar][8]>ledzeugs[dar][5]){ledzeugs[dar][8]=0; //änderinterfall if(leddata[dar][1]> ledzeugs[dar][7]){leddata[dar][1]--;} //änder zu farbe if(leddata[dar][1]< ledzeugs[dar][7]){leddata[dar][1]++;} //| bleib weile beim ziel | warte | setze maximalzufall| if(leddata[dar][1]==ledzeugs[dar][7]){ledzeugs[dar][6]=random(4,10)*50;ledzeugs[dar][9]=1; ledzeugs[dar][10]++;}} if(ledzeugs[dar][10]>10){ledzeugs[dar][10]=random(0,8); } // ledzeugs[dar][11]=random(0,5); //setze maximalhelligkeit if(ledzeugs[dar][9]==1){ledzeugs[dar][6]--;if(ledzeugs[dar][6]<1){ledzeugs[dar][9]=random(2,6);}} //wastun ?? //| hellihkeitzielsetzen | zielsuchspeed //mach andershell if(ledzeugs[dar][9]==2){ledzeugs[dar][7]=random(4,10)*sohell[ledzeugs[dar][11]];ledzeugs[dar][5]=random(1,(10-(ledzeugs[dar][7]-leddata[dar][1])/100));ledzeugs[dar][9]=0;} //| setzehellikeit0 | schnelltahin | nochmal | //mach dunkel if(ledzeugs[dar][9]>=3){ledzeugs[dar][7]=0; ledzeugs[dar][5]=random(1,(6-(ledzeugs[dar][7]-leddata[dar][1])/200));ledzeugs[dar][9]=0;} }} long maintime1=millis();long maintime2=millis();long startriger=micros(); void zeitreise(void){//digitalWrite(grun2,HIGH); while ((millis()- maintime1) >= 2){autocolor();autocolor(); maintime1=millis();} while ((millis()- maintime2) >= 100){ istinput(); maintime2=millis();} while ((micros()-startriger) >= 50) {rainbowcalc();machlicht(); startriger=micros();}} void istinput(void){onpress[2]++; if (onpress[2] >10) { if (digitalRead(t1) == HIGH && onpress[0] ==0){onpress[0]=1;modus++;if(modus>3){modus=0;}} if (onpress[0] == 1){onpress[1]++;} if(onpress[1]>=10){onpress[1]=0;onpress[0]=0;} onpress[2]=0; }} uint16_t duty[5];uint16_t rainbow; void rainbowcalc(void) {//old system i created but still best linear rainbow solution i think for(uint8_t menge=0;menge=0 && rainbow <=400) {duty[0] =400; duty[1] =rainbow; duty[2] =0;} //rot ->gelb (rotmax grün+ blau0) if(rainbow >400 && rainbow <=800) {duty[0] =(400 -(rainbow -400)); duty[1] =400; duty[2] =0;} //gelb ->grün (rot- grünmax blau0) if(rainbow >800 && rainbow <=1200) {duty[0] =0; duty[1] =400; duty[2] =(rainbow - 800);} //grün ->cyan (rot0 grünmax blau+) if(rainbow >1200 && rainbow <=1600) {duty[0] =0; duty[1] =(400 -(rainbow - 1200)); duty[2] =400;} //cyan ->blau (rot0 grün- blaumax) if(rainbow >1600 && rainbow <=2000) {duty[0] =(rainbow-1600); duty[1] =0; duty[2] =400;} //blau ->lila (rot+ grün0 blaumax) if(rainbow >2000 && rainbow <=2400) {duty[0] =400; duty[1] =0; duty[2] =(400- (rainbow -2000));}//lila ->rot (rotmax grün0 blau-) if(rainbow >= 2406) {rainbow =0;} leddata[menge][2]=duty[0];leddata[menge][3]=duty[1];leddata[menge][4]=duty[2]; }} uint16_t brightsize=400; uint16_t maxx=800,darkmulti=4,hellmulti=2; uint32_t fcc=(maxx*darkmulti);//4800^^2400 void machlicht(void) { for (uint8_t meg=0;meg=1) { leddata[0][8]++; if (leddata[0][8]==(leddata[0][5]+(maxx-(leddata[0][2]*hellmulti)))){digitalWrite(rot0,HIGH);}//800-3200(*4?)<->0-800>>4800 if (leddata[0][8]==(leddata[0][5]+(maxx-(leddata[0][3]*hellmulti)))){digitalWrite(grun0,HIGH);} if (leddata[0][8]==(leddata[0][5]+(maxx-(leddata[0][4]*hellmulti)))){digitalWrite(blau0,HIGH);} if (leddata[0][8]>=(leddata[0][5]+leddata[0][1])){leddata[0][8]=0;ledz1of();} leddata[1][8]++; if (leddata[1][8]==(leddata[1][5]+(maxx-(leddata[1][2]*hellmulti)))){digitalWrite(rot1,HIGH);} if (leddata[1][8]==(leddata[1][5]+(maxx-(leddata[1][3]*hellmulti)))){digitalWrite(grun1,HIGH);} if (leddata[1][8]==(leddata[1][5]+(maxx-(leddata[1][4]*hellmulti)))){digitalWrite(blau1,HIGH);} if (leddata[1][8]>=(leddata[1][5]+leddata[1][1])){leddata[1][8]=0;ledz2of();} leddata[2][8]++; if (leddata[2][8]==(leddata[2][5]+(maxx-(leddata[2][2]*hellmulti)))){digitalWrite(rot2,HIGH);} if (leddata[2][8]==(leddata[2][5]+(maxx-(leddata[2][3]*hellmulti)))){digitalWrite(grun2,HIGH);} if (leddata[2][8]==(leddata[2][5]+(maxx-(leddata[2][4]*hellmulti)))){digitalWrite(blau2,HIGH);} if (leddata[2][8]>=(leddata[2][5]+leddata[2][2])){leddata[2][8]=0;ledz3of();} if (fcount ==(fcc-leddata[3][1]*darkmulti)) {digitalWrite(UV1,HIGH);} if (fcount ==(fcc-leddata[4][1]*darkmulti)) {digitalWrite(UV2,HIGH);} if (fcount ==(fcc-leddata[5][1]*darkmulti)) {digitalWrite(ww1,HIGH);} if (fcount ==(fcc-leddata[6][1]*darkmulti)) {digitalWrite(ww2,HIGH);} if (fcount ==(fcc-leddata[7][1]*darkmulti)) {digitalWrite(ww3,HIGH);} if (fcount ==(fcc-leddata[8][1]*darkmulti)) {digitalWrite(ww4,HIGH);} } if (fcount >=fcc){digitalWrite(UV1,LOW);digitalWrite(UV2,LOW);digitalWrite(ww1,LOW);digitalWrite(ww2,LOW);digitalWrite(ww3,LOW);digitalWrite(ww4,LOW);}}} void ledz1of(void){digitalWrite(rot0,LOW);digitalWrite(grun0,LOW);digitalWrite(blau0,LOW);} void ledz2of(void){digitalWrite(rot1,LOW);digitalWrite(grun1,LOW);digitalWrite(blau1,LOW);} void ledz3of(void){digitalWrite(rot2,LOW);digitalWrite(grun2,LOW);digitalWrite(blau2,LOW);}