//kote for mother present > high preformance twinkle polarisstar //used 3Watt RGB high powder led but its soldered on much cooper(heatsink) and have 33yF tantal capacitor parraslel to each color so powering wit over D882 3A //SMD NPN transistor direct to 5V (3300yF 10V parralel to 5V to mild the USB power supply) >> RGB should be powder light up to 4.5Watt //D882 pulsed by STM32F103C8T6 GPIO over 470R; //led changing continius fadingspeed,fading interfall,brighteness and color :3 //8 taster switching 3V3 to 470R groundet STM GPIO first 3 forbidden single colors press 3 to forbidd green purple/red/blue star is cute.. press again to became green back //taster 4-8 maximum brightness 4=maximum 8=minimum rest steps between (better just simple tomanage) #define t1 PA0 #define t2 PA1 #define t3 PA2 #define t4 PA3 #define t5 PA4 #define t6 PA5 #define t7 PA6 #define t8 PA7 #define rot PC13 #define grun PC15 #define blau PC14 #define LED1 PB12 #define LED2 PB13 #define LED3 PB14 #define LED4 PB15 #define LED5 PA8 #define LED6 PA9 #define LED7 PA10 #define LED8 PB5 uint8_t onpress[16]; uint16_t duty[10]; long maintime=millis();long maintime2=micros();long startriger=micros(); int zeit1,zeit2,zeit3,zeit4,zeit5,sonne; uint16_t rainbow; uint16_t bright =300; uint16_t maximalhelligkeit=0; boolean roton=true,blauon=true,grunon=true; boolean leds[8]={false,false,false,false,false,false,false,false}; void setup() { delay(500);//charge capacitor pinMode(rot, OUTPUT);pinMode(grun, OUTPUT);pinMode(blau, OUTPUT); pinMode(LED1,OUTPUT);pinMode(LED2,OUTPUT);pinMode(LED3,OUTPUT);pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT);pinMode(LED6,OUTPUT);pinMode(LED7,OUTPUT);pinMode(LED8,OUTPUT); pinMode(t1, INPUT);pinMode(t2, INPUT);pinMode(t3, INPUT);pinMode(t4, INPUT); pinMode(t5, INPUT);pinMode(t6, INPUT);pinMode(t7, INPUT);pinMode(t8, INPUT); } void loop() { zeitreise(); autocolor(); rainbowcalc(); } int16_t brightc,brightcc,nenrandy,rainc; void autocolor(void){ if (zeit5 >200) { rainc=random(0,10);zeit5=random(0,150);} if (zeit2 >rainc) {rainbow++; zeit2=0;} if (zeit3 >200) {nenrandy=random(0,25); if (nenrandy <5) {brightc=random(20,350); brightcc=random(1,5);zeit3=random(0,90); } if (nenrandy >= 5 && nenrandy <15) {brightc=random(100,410); brightcc=random(2,7); zeit3=random(20,100); } if (nenrandy >= 20 ) {brightc=random(400,650); brightcc=random(1,5);zeit3=random(0,50); } } duty[3]= (brightcc+rainc+(zeit3/20))*10; if(zeit4 > brightcc) { if (bright > brightc) {bright--;} if (bright < brightc) {bright++;}zeit4=0;} } void drueckmich(void){ if (onpress[15] >15) { if (digitalRead(t1) == HIGH && onpress[0] ==0) { onpress[0]=1;anausrot();} if (onpress[0] == 1) { onpress[1]++;} if (onpress[1] >= 5) { onpress[1]=0; onpress[0]=0;} if (digitalRead(t2) == HIGH && onpress[2] ==0) { onpress[2]=1;anausblau();} if (onpress[2] == 1) { onpress[3]++;} if (onpress[3] >= 5) { onpress[3]=0; onpress[2]=0;} if (digitalRead(t3) == HIGH && onpress[4] ==0) { onpress[4]=1;anausgrun();} if (onpress[4] == 1) { onpress[5]++;} if (onpress[5] >=5) { onpress[5]=0; onpress[4]=0;} if (digitalRead(t4) == HIGH && onpress[6] ==0) { onpress[6]=1;maximalhelligkeit=0;} if (onpress[6] == 1) { onpress[7]++;} if (onpress[7] >=5) { onpress[7]=0; onpress[6]=0;} if (digitalRead(t5) == HIGH && onpress[8] ==0) { onpress[8]=1;maximalhelligkeit=200;} if (onpress[8] == 1) { onpress[9]++;} if (onpress[9] >=5) { onpress[9]=0; onpress[8]=0;} if (digitalRead(t6) == HIGH && onpress[10] ==0) { onpress[10]=1;maximalhelligkeit=400;} if (onpress[10] == 1) { onpress[11]++;} if (onpress[11] >=5) { onpress[11]=0; onpress[10]=0;} if (digitalRead(t7) == HIGH && onpress[12] ==0) { onpress[12]=1;maximalhelligkeit=700;} if (onpress[12] == 1) { onpress[13]++;} if (onpress[13] >=5) { onpress[13]=0; onpress[12]=0;} if (digitalRead(t8) == HIGH && onpress[14] ==0) { onpress[14]=1;maximalhelligkeit=1000;} if (onpress[14] == 1) { onpress[15]++;} if (onpress[15] >=5) { onpress[15] =0; onpress[14]=0;} schaltleds(); // digitalWrite(control,HIGH); // for(uint8_t durchgeh=0;durchgeh<8;durchgeh++){if(onpress[durchgeh*2]>0){digitalWrite(control,LOW);}} onpress[15]=0; }} void anausrot(void){if(roton==true){roton=false;}else{roton=true;}} void anausblau(void){if(blauon==true){blauon=false;}else{blauon=true;}} void anausgrun(void){if(grunon==true){grunon=false;}else{grunon=true;}} void schaltleds(void){ for(uint8_t malalle=0;malalle<8;malalle++){leds[malalle]=false;} if(roton==true){leds[0]=true;} if(blauon==true){leds[1]=true;} if(grunon==true){leds[2]=true;} if(maximalhelligkeit==0){leds[3]=true;}if(maximalhelligkeit==200){leds[4]=true;}if(maximalhelligkeit==400){leds[5]=true;} if(maximalhelligkeit==700){leds[6]=true;}if(maximalhelligkeit==1000){leds[7]=true;}} void zeitreise(void){ while ((millis()- maintime) >= 5) { onpress[15]++;drueckmich(); zeit3++; zeit5++; maintime = millis(); } while ((micros()- maintime2) >= 400) { zeit2++; zeit4++; maintime2 = micros(); } while ((micros()-startriger) >= 10) { machlicht(); startriger = 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;} } uint16_t light,darkness,dcach; void machlicht(void) { if (bright > 400){light=bright-400; dcach=0;} if (bright <=400){dcach=(400-(bright))/2; light=0;} darkness=(dcach*dcach)/1.8; for (uint32_t fcount1=0; fcount1 <(403+light+darkness+(maximalhelligkeit*2)); fcount1++) { if (fcount1 ==((401+darkness)-duty[0])&& roton==true) { digitalWrite(rot, HIGH );} if (fcount1 ==((401+darkness)-duty[1])&& blauon==true) { digitalWrite(grun, HIGH );} if (fcount1 ==((401+darkness)-duty[2])&& grunon==true) { digitalWrite(blau, HIGH );} if (fcount1==(300 + light + darkness)){ if(leds[0]==true){digitalWrite(LED1,HIGH);}if(leds[1]==true){digitalWrite(LED2,HIGH);}if(leds[2]==true){digitalWrite(LED3,HIGH);} if(leds[3]==true){digitalWrite(LED4,HIGH);}if(leds[4]==true){digitalWrite(LED5,HIGH);}if(leds[5]==true){digitalWrite(LED6,HIGH);} if(leds[6]==true){digitalWrite(LED7,HIGH);}if(leds[7]==true){digitalWrite(LED8,HIGH);}} if (fcount1 >= (402 + light + darkness) ) {allesaus();}}} void allesaus(void){digitalWrite(rot, LOW ); digitalWrite(grun, LOW ); digitalWrite(blau, LOW ); digitalWrite(LED1,LOW);digitalWrite(LED2,LOW);digitalWrite(LED3,LOW);digitalWrite(LED4,LOW);digitalWrite(LED5,LOW);digitalWrite(LED6,LOW);digitalWrite(LED7,LOW);digitalWrite(LED8,LOW);}