//currently laz0r polaris driving prog in progress.. loosing 2 IOs maybe cuttent to high is driving 9x 5V 5mW laserdiods by switching ground to 5V so the 9th laserdiode is now switched by s8058b //*laserdiods driven without lense for having no problems if watching in radiation // 6x RGB 0603 micro SMD leds (2 on one channe ontimes) caused need one rgb output left fro 3W RGB led over DB237 in polarisscenter // supply: 4xli-ion, 2400mAh 18650 parralwel, 1x5V2A stepup, 2x (up to 2A li-ion charger) //Project by marderchen MEOW =^.^= have fun use it ifyou want , its working but not finished now #define rot1 PB9 #define grun1 PB8 //#define blau1 PB3 #define rot2 PC13 #define grun2 PC14 #define blau2 PC15 #define rot3 PA0 #define grun3 PA1 #define blau3 PA2 #define rot4 PA3 #define grun4 PA4 #define blau4 PA5 #define rot5 PA6 #define grun5 PA7 #define blau5 PB0 #define rot6 PB1 #define grun6 PB10 #define blau6 PB11 #define laz0r1 PB12 #define laz0r2 PB13 #define laz0r3 PB14 #define laz0r4 PB15 #define laz0r5 PA8 #define laz0r6 PA9 #define laz0r7 PA10 //#define laz0r8 PB3 #define laz0r9 PB5 //#define t1 PA15 //#define t2 PA12 //#define weis PB4 int ledmeng=6; int laz0rmeng=7; int duty[8]; int ledata[10][10]; int ledist[10][10]; int dutys[27]; int dutysol[27][10]; //0 = farbesol,1 farbespeed,2 farbeadd, 3= hellsol, 4hellspeed, 5 helladd, int RGBledsso[8][3]; // 0 =farbe (0-1600) //1 farbhelligkeit (0-800) // 2 weisbeimischen (0-400) int sHIGHly,zeitchange,zeitchange2,farbenso,irgentwas,rainbow,brightcach,bouncer,zwicker; int zufallcach[3][12]; int zeit[12]; int zeitlimitz=10,zeitlimit9=0,zeitlimit10=0; int denda,zeitlimitscach; int rainbowcach,bright; int wuseldiezeit1=5; int wuseldiezeit2=3; int rainzspeedy=1; int brightspeedy=1; int bouncefa =false; int bouncebri =false; long maintime=millis(); long maintime2=micros(); long maintime3=millis(); int16_t brighty=400; void setup() { 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(laz0r1, OUTPUT); pinMode(laz0r2, OUTPUT); pinMode(laz0r3, OUTPUT); pinMode(laz0r4, OUTPUT); pinMode(laz0r5, OUTPUT); pinMode(laz0r6, OUTPUT); pinMode(laz0r7, OUTPUT); // pinMode(laz0r8, OUTPUT); pinMode(laz0r9, OUTPUT); // possible input pins: PA12, PA15 // pinMode(t1, INPUT); //using it later still writi9ng maybe to sett brightenes or speed spectrum // pinMode(t2, INPUT); } void loop() { zeitreise(); laz0rpower(); wuschelgesamtspeed(); nofading(); autocolor(); assimilier(); rainbowcalc(); machlicht(); } void wuseldieabwechslung(void) { if (sHIGHly >zeitchange) {zeitchange=random(15,90); sHIGHly=0; farbenso=1; //random farbenso=1; if knightrider only if (irgentwas > zeitchange2) {zeitchange2=random(10,30); irgentwas=0; }} if (farbenso==0) {} if (farbenso==1 ){ } if (farbenso==2) { } if (farbenso==3) { } if (farbenso==4) { } if (farbenso==6) { } if (farbenso==7) { } if (farbenso==8) { } if (farbenso==9) { } } int laz0rdings[8][8]; //0sol 1 upspeed 2 adder,3 downsped 4 downad, 5t1,6t2 int rainc,nenrandy,brightc,brightcc; int bouncer2=0; int laz0orone=0; void nofading(void) { if (zeit[9] > zeitlimit9) {zeit[9]=0; bouncer=random(0,25); bouncer2=random(0,20); zeitlimit9=random(5,20); nenrandy=random(0,22); if (bouncer <=15) {bouncefa=false;} if (bouncer >15) {bouncefa=true;} if (bouncer2 <=15) {bouncebri=false;} if (bouncer2 >15) {bouncebri=true;}} } void wuschelgesamtspeed(void) { if (zeit[10] > zeitlimit10) {zeit[10]=0; zeitlimit10=random(5,30); wuseldiezeit1=random(3,5); wuseldiezeit2=random(2,4); }//ori wusel1 =5, ori wusel2 =400 } int zeitc1,zeitc2,zeitc3,zeitc4; int lasorb,lasortup,lasortdown,lasoradd; //0sol 1 upspeed 2 adder,3 downsped 4 downad, 5t1,6t2 int linearmove=1; void autocolor(void){ if (zeitc1 >200) { rainc=random(1,5);zeitc1=random(0,150);} if (zeitc2 >rainc) { zeitc2=0; if(linearmove==1) { for( int atall = 0; atall < ledmeng; atall++) { RGBledsso[atall][0]+=dutysol[atall][2]; if( RGBledsso[atall][0] > (4800-dutysol[atall][2])) {RGBledsso[atall][0]=0;} }}} if (zeitc3 >250) { suchausRGB(); suchausLAZ0R(); //int farbe,int hellig,int whitig,int colorspeed,int brightpeedy, int steppz, int farbeauch center // (int powder,int schnellhell,int schnelldunkel, int schnellschritt) if (nenrandy <5) { zeitc3=random(0,150); linearmove=1; zusammenRGB(0,random(100,300),0,0,random(20,200),random(5,20), 0,random(5,50)); zusammenLAZ0R(random(0,1200),random(2,6),random(1,4),random(3,20)); } if (nenrandy >= 5 && nenrandy <9) { zeitc3=random(50,200); linearmove=1; zusammenRGB(random(0,4800),random(200,500),0,random(1,8),random(1,10), random(1,20), 1,random(40,100)); zusammenLAZ0R(random(200,1200),random(1,3),random(1,4),random(4,20)); } if (nenrandy >= 9 && nenrandy <13) { zeitc3=random(100,220); linearmove=0; zusammenRGB(random(0,1000),random(0,800),random(0,50),random(2,40),random(40,80), random(1,3), 0,random(10,150)); zusammenLAZ0R(random(0,200),random(1,3),random(10,40),random(4,20)); } if (nenrandy >= 13 && nenrandy <17) { zeitc3=random(100,220); linearmove=0; zusammenRGB(random(0,1000),random(0,800),random(0,50),random(2,30),random(20,80), random(1,5), 0,random(10,200)); zusammenLAZ0R(random(0,200),random(1,3),random(10,40),random(4,20)); } if (nenrandy >= 17 && nenrandy <20) { zeitc3=random(200,250); linearmove=1; zusammenRGB(random(2700,3200),random(000,700),random(0,100),random(1,8),random(1,10), random(1,20), 1,random(50,200)); zusammenLAZ0R(random(300,1200),random(1,2),random(1,4),random(6,20)); } if (nenrandy >= 20 ) {zeitc3=random(200,250); linearmove=1; zusammenRGB(random(0,1600),random(0,800),random(20,400),random(1,20),random(60,80), random(1,3), 1,random(200,800)); zusammenLAZ0R(random(700,1200),random(0,3),random(0,4),random(6,20)); } } } void suchausRGB(void) { for( int dieda= 0; dieda < ledmeng; dieda++) { zufallcach[0][dieda]=random(0,2); } } void zusammenRGB(int farbe,int hellig,int whitig,int colorspeed,int brightzipeedy, int steppz, int farbeauch,int cbright) { for( int dasda= 0; dasda < ledmeng; dasda++) { if (zufallcach[0][dasda]==1) { RGBledsso[dasda][1]=hellig; RGBledsso[dasda][2]=whitig; dutysol[dasda][5]=brightzipeedy; dutysol[dasda][6]=steppz; dutysol[dasda][2]=steppz; if (farbeauch==1) {RGBledsso[dasda][0]=farbe; dutysol[dasda][1]=colorspeed; dutysol[dasda][2]=steppz*2; } if (dasda==0) {RGBledsso[dasda][1]=cbright;} }} } void suchausLAZ0R(void) { for( int denda= 0; denda < laz0rmeng; denda++) { zufallcach[1][denda]=random(0,2); } } void zusammenLAZ0R(int powder,int schnellhell,int schnelldunkel, int schnellschritt) { for( int derda= 0; derda < laz0rmeng; derda++) { if (zufallcach[1][derda]==1) { laz0rdings[derda][0]=powder; laz0rdings[derda][1]=schnellhell; laz0rdings[derda][3]=schnelldunkel; laz0rdings[derda][2]=schnellschritt; }} } void assimilier(void){//0 = farbesol,1 farbespeed,2 farbeadd,3farbec, 4= hellsol, 5hellspeed, 6 helladd,7,hellc.8farberreciht for( int katzenkoennennichtzaehlen = 0; katzenkoennennichtzaehlen < ledmeng; katzenkoennennichtzaehlen++) { dutysol[katzenkoennennichtzaehlen][0]=RGBledsso[katzenkoennennichtzaehlen][0]; dutysol[katzenkoennennichtzaehlen][4]=RGBledsso[katzenkoennennichtzaehlen][1]; dutysol[katzenkoennennichtzaehlen][9]=RGBledsso[katzenkoennennichtzaehlen][2]; if (dutysol[katzenkoennennichtzaehlen][3] > dutysol[katzenkoennennichtzaehlen][1]) { if (bouncefa ==false || linearmove==0){ if (ledata[katzenkoennennichtzaehlen][0] < (dutysol[katzenkoennennichtzaehlen][0]-dutysol[katzenkoennennichtzaehlen][2])){ ledata[katzenkoennennichtzaehlen][0]+=dutysol[katzenkoennennichtzaehlen][2];} if (ledata[katzenkoennennichtzaehlen][0] > (dutysol[katzenkoennennichtzaehlen][0]+dutysol[katzenkoennennichtzaehlen][2])){ ledata[katzenkoennennichtzaehlen][0]-=dutysol[katzenkoennennichtzaehlen][2];} if (ledata[katzenkoennennichtzaehlen][0] >= (dutysol[katzenkoennennichtzaehlen][0]-20)|| ledata[katzenkoennennichtzaehlen][0] <= (dutysol[katzenkoennennichtzaehlen][0]+20) ){ dutysol[katzenkoennennichtzaehlen][8]=1;} }dutysol[katzenkoennennichtzaehlen][3]=0; } if (dutysol[katzenkoennennichtzaehlen][7] > dutysol[katzenkoennennichtzaehlen][5]) {if (bouncebri ==false){ if (ledata[katzenkoennennichtzaehlen][1] < (dutysol[katzenkoennennichtzaehlen][4]-dutysol[katzenkoennennichtzaehlen][6])){ ledata[katzenkoennennichtzaehlen][1]+=dutysol[katzenkoennennichtzaehlen][6];} if (ledata[katzenkoennennichtzaehlen][1] > (dutysol[katzenkoennennichtzaehlen][4]+dutysol[katzenkoennennichtzaehlen][6])){ ledata[katzenkoennennichtzaehlen][1]-=dutysol[katzenkoennennichtzaehlen][6];} if (ledata[katzenkoennennichtzaehlen][2] < (dutysol[katzenkoennennichtzaehlen][9]-dutysol[katzenkoennennichtzaehlen][6])){ ledata[katzenkoennennichtzaehlen][2]+=dutysol[katzenkoennennichtzaehlen][6];} if (ledata[katzenkoennennichtzaehlen][2] > (dutysol[katzenkoennennichtzaehlen][9]+dutysol[katzenkoennennichtzaehlen][6])){ ledata[katzenkoennennichtzaehlen][2]-=dutysol[katzenkoennennichtzaehlen][6];} if (ledata[katzenkoennennichtzaehlen][1] >= (dutysol[katzenkoennennichtzaehlen][4]-20)|| ledata[katzenkoennennichtzaehlen][1] <= (dutysol[katzenkoennennichtzaehlen][4]+20) ){ dutysol[katzenkoennennichtzaehlen][8]=1;} }dutysol[katzenkoennennichtzaehlen][7]=0; } if (bouncefa ==true) {ledata[katzenkoennennichtzaehlen][0]=dutysol[katzenkoennennichtzaehlen][0];} if (bouncebri ==true) {ledata[katzenkoennennichtzaehlen][1]=dutysol[katzenkoennennichtzaehlen][4];} }} void laz0rpower(void) { for( int lazor = 0; lazor < laz0rmeng; lazor++) { if (laz0rdings[lazor][5] > laz0rdings[lazor][1]){ if (laz0rdings[lazor][7]==0) {dutys[lazor]+=laz0rdings[lazor][2];} laz0rdings[lazor][5]=0;} if (laz0rdings[lazor][6] > laz0rdings[lazor][3]){ if (laz0rdings[lazor][7]==1) {dutys[lazor]-=laz0rdings[lazor][2];} laz0rdings[lazor][6]=0;} if (dutys[lazor] <= laz0rdings[lazor][2] && laz0rdings[lazor][7]==1){laz0rdings[lazor][7]=0;} if (dutys[lazor] > (laz0rdings[lazor][0]-laz0rdings[lazor][2]) && laz0rdings[lazor][7]==0){laz0rdings[lazor][7]=1;} }} void zeitreise(void){ while ((millis()- maintime) >= wuseldiezeit1) { for( int ticktack2 = 0; ticktack2 < ledmeng; ticktack2++) {} sHIGHly++; zeitc1++; zeitc3++;zeitc2++; maintime = millis(); } while ((micros()- maintime2) >= wuseldiezeit2) { zeitc4++; maintime2 = micros(); } while ((millis()- maintime3) >= 1000) { zeit[9]++; zeit[10]++; zeit[11]++; maintime3 = millis(); }} //recalc for 800fadingsteps void rainbowcalc(void) { for( int dirg = 0; dirg < ledmeng; dirg ++) { rainbow=ledata[dirg][0]; brighty=ledata[dirg][1]; if(rainbow >=0 && rainbow <=800) {duty[0] =800; duty[1] =rainbow; duty[2] =0;} //rot ->gelb (rotmax grün+ blau0) if(rainbow >=801 && rainbow <=1601) {duty[0] =(800 -(rainbow -801)); duty[1] =800; duty[2] =0;} //gelb ->grün (rot- grünmax blau0) if(rainbow >=1602 && rainbow <=2402) {duty[0] =0; duty[1] =800; duty[2] =(rainbow - 1602);} //grün ->cyan (rot0 grünmax blau+) if(rainbow >=2403 && rainbow <=3203) {duty[0] =0; duty[1] =(800 -(rainbow - 2403)); duty[2] =800;} //cyan ->blau (rot0 grün- blaumax) if(rainbow >=3204 && rainbow <=4004) {duty[0] =(rainbow-3204); duty[1] =0; duty[2] =800;} //blau ->lila (rot+ grün0 blaumax) if(rainbow >=4005 && rainbow <=4805) {duty[0] =800; duty[1] =0; duty[2] =(800- (rainbow -4006));} //lila ->rot (rotmax grün0 blau-) if(rainbow >= 4806) {rainbow =0; ledata[dirg][0]=0;} ledist[dirg][0]=round(duty[0]/(800/brighty)); ledist[dirg][1]=round(duty[1]/(800/brighty)); ledist[dirg][2]=round(duty[2]/(800/brighty)); //zort seens to beloosing colors by this way of set brighteness without changing colors so made more reinbowsteps }} long startriger=micros(); void machlicht(void) { while ((micros()-startriger) >= 2) { for (int32_t fcount1=1; fcount1 <(1202); fcount1++) { if (fcount1 == (801-ledist[0][0])) {digitalWrite(rot2,HIGH);} //3W if (fcount1 == (801-ledist[0][1])) {digitalWrite(grun2,HIGH);} if (fcount1 == (801-ledist[0][2])) {digitalWrite(blau2,HIGH);} if (fcount1 == (801-ledist[1][0])) {digitalWrite(rot1,LOW);} if (fcount1 == (801-ledist[1][1])) {digitalWrite(grun1,LOW);} // if (fcount1 == (1201-ledist[1][2])) {digitalWrite(blau1,LOW);} if (fcount1 == (801-ledist[2][0])) {digitalWrite(rot3,LOW);} if (fcount1 == (801-ledist[2][1])) {digitalWrite(grun3,LOW);} if (fcount1 == (801-ledist[2][2])) {digitalWrite(blau3,LOW);} if (fcount1 == (801-ledist[3][0])) {digitalWrite(rot4,LOW);} if (fcount1 == (801-ledist[3][1])) {digitalWrite(grun4,LOW);} if (fcount1 == (801-ledist[3][2])) {digitalWrite(blau4,LOW);} if (fcount1 == (801-ledist[4][0])) {digitalWrite(rot5,LOW);} if (fcount1 == (801-ledist[4][1])) {digitalWrite(grun5,LOW);} if (fcount1 == (801-ledist[4][2])) {digitalWrite(blau5,LOW);} if (fcount1 == (801-ledist[5][0])) {digitalWrite(rot6,LOW);} if (fcount1 == (801-ledist[5][1])) {digitalWrite(grun6,LOW);} if (fcount1 == (801-ledist[5][2])) {digitalWrite(blau6,LOW);} if (fcount1 == (1200-dutys[0])) {digitalWrite(laz0r1,LOW);} if (fcount1 == (1200-dutys[1])) {digitalWrite(laz0r2,LOW);} if (fcount1 == (1200-dutys[2])) {digitalWrite(laz0r3,LOW);} if (fcount1 == (1200-dutys[3])) {digitalWrite(laz0r4,LOW);} if (fcount1 == (1200-dutys[4])) {digitalWrite(laz0r5,LOW);} if (fcount1 == (1200-dutys[5])) {digitalWrite(laz0r6,LOW);} if (fcount1 == (1200-dutys[6])) {digitalWrite(laz0r7,LOW);} //if (fcount1 == (1201-dutys[7])) {digitalWrite(laz0r8,LOW);} if (fcount1 == (1200-dutys[7])) {digitalWrite(laz0r9,LOW);} if (fcount1 == (801+ledata[0][2])) { digitalWrite(rot2, LOW ); digitalWrite(grun2, LOW ); digitalWrite(blau2, LOW); } if (fcount1 == (801+ledata[1][2])) { digitalWrite(rot1, HIGH ); digitalWrite(grun1, HIGH );} if (fcount1 == (801+ledata[2][2])) { digitalWrite(rot3, HIGH ); digitalWrite(grun3, HIGH ); digitalWrite(blau3, HIGH );} if (fcount1 == (801+ledata[3][2])) { digitalWrite(rot4, HIGH ); digitalWrite(grun4, HIGH ); digitalWrite(blau4, HIGH );} if (fcount1 == (801+ledata[4][2])) { digitalWrite(rot5, HIGH ); digitalWrite(grun5, HIGH ); digitalWrite(blau5, HIGH );} if (fcount1 == (801+ledata[5][2])) { digitalWrite(rot6, HIGH ); digitalWrite(grun6, HIGH ); digitalWrite(blau6, HIGH ); } if (fcount1 >= 1201) { digitalWrite(laz0r1, HIGH ); digitalWrite(laz0r2, HIGH ); digitalWrite(laz0r3, HIGH ); digitalWrite(laz0r4, HIGH ); digitalWrite(laz0r5, HIGH ); digitalWrite(laz0r6, HIGH ); digitalWrite(laz0r7, HIGH ); //digitalWrite(laz0r8, HIGH ); digitalWrite(laz0r9, HIGH ); } } for( int lazor2 = 0; lazor2 < laz0rmeng; lazor2++) {laz0rdings[lazor2][5]++; laz0rdings[lazor2][6]++;} for( int endtime = 0; endtime < ledmeng; endtime++) {dutysol[endtime][7]++;dutysol[endtime][3]++;} startriger = micros(); } }