//Simple programmb thunder+Fullcolor imitating HIGH power led device //\/ pindefinitionen/belegung #define rot PA8 //2x3Watt RGB #define grun PB15 //2x3Watt RGB #define blau PB11 //2x3Watt RGB #define weis1 PB12 //1x3Watt Weis #define weis2 PB13 //1x3Watt Weis #define weis3 PB14 //1x3Watt Weis #define power PB10 //ultrahelle 28mAh rote LED an seite #define poti PA7 //drehknopf #define opto PA0 //eingang vom detectorstecker #define modi PA1 //scheibeschalter position 1 verändern der farber position 2 verändern der helligkeit //\/zwischenspeicherwerte int duty[10]; long allfcount = micros(); long maintime = millis(); long delayz = millis(); int RGB =0; int light =400; int lights =0; int darkness =0; int zufall[8][4]; int fcount1 =0; int fcount2 =0; int zeit1 =0; int zeit2 =0; int zeit3 =0; int zeit4 =0; int zeit5 =0; int zeit6 =0; int mainspeed=100; int oftblitz=5; //0kein, 1000nur) int difid =200; int langan =120; //zeit für gewitterblitzen nach ausbleiben des detectorstecker signals ins sekunden boolean on =false; void setup() { pinMode(rot, OUTPUT); pinMode(grun, OUTPUT); pinMode(blau, OUTPUT); pinMode(weis1, OUTPUT); pinMode(weis2, OUTPUT); pinMode(weis3, OUTPUT); pinMode(power, OUTPUT); pinMode(modi, INPUT); } void loop() { wenntaster(); zeitslow(); purrpower(); machlicht(); } void wenntaster(void){ //eiongangsinfomrationen if (zeit2 > 1) { if (zeit5 analogRead(poti)/1.7 ) {RGB-=8; } if (digitalRead(modi) ==LOW && light > analogRead(poti)/5 ) {light--;} if (digitalRead(modi) ==LOW && light < analogRead(poti)/5 ) {light++;} if (analogRead(opto) > 1000) {on= true; zeit5=0;} if (analogRead(opto) < 1000) {on =false;} zeit2=0; }} void zeitslow(void){ //nur nen timmerzzzz while ((millis()-delayz) >= 1000) { zeit5++; delayz= millis(); } if (zeit5 <=langan && on ==false) {wuselzufall();} //aktion wenn kein dectetor singnal vor der langandauer(120sek) if (zeit5 >langan && on ==false) {rgbcalc(); duty[3]= light/4;duty[5]= light/4;} //aktion wenn kein dectetor singnnal nach der langandauer(120sek) } void wuselzufall(void){ // generiert umfassenden zufall für gewitterrealissmus if (zeit3 > (zufall[0][0])) { //zufallzeitgeber zufall[0][0] = random(zufall[0][2],zufall[0][3]); //basisinterfall zufall[0][2] = random(mainspeed,mainspeed+100); //minimalgrenze zufall[0][3] = random(zufall[0][2],mainspeed+240); //maximalgrenze zufall[1][0] = random(zufall[1][1],zufall[1][2]); //pegelhelligkeit zufall[1][1] = random(zufall[1][3]-100,zufall[1][3]+50); zufall[1][2] = random(zufall[1][3]+50,zufall[1][3]+100); zufall[1][3] = random(100,300); } if (zeit4 > (zufall[0][3]/2)){ //zufallsteuern der ledhelligkeit nach zeitgeber zufall[3][0]=random(0,2000); //blitz intervall if (zufall[3][0] < oftblitz) {duty[6] =random(300,400); zufall[2][0]=random(3,6); duty[round(zufall[2][0])] =random(200,400); zufall[2][0]=random(3,6); duty[round(zufall[2][0])] =random(200,400); } zufall[3][1]= random(1,10); //blitz dopwnfader if (zufall[3][0] > oftblitz) {for(int is=1; is<7; is++) { duty[is]-=zufall[3][1]/2; }} // if(duty[0] < zufall[3][2]) {duty[0]++;} // if(duty[0] > zufall[3][2]) {duty[0]--;} // if(zufall[3][1] >5 && duty[5] < (zufall[3][1]*20)) {duty[5]++;} // if(zufall[3][1] >5 && duty[5] > (zufall[3][1]*20)) {duty[5]--;} if(zufall[3][1] <5 && duty[0] < (zufall[3][1]*40)) {duty[0]++;} if(zufall[3][1] <5 && duty[0] > (zufall[3][1]*40)) {duty[0]--;} zeit4=0; } } void purrpower(void){ //updownfaden der roten led an seite if (zeit6 >(zeit5/100+2)) { if(zufall[2][1] == 1) {duty[6]++;} if(zufall[2][1] == 0) {duty[6]--;} if(duty[6] > 399) {zufall[2][1]=0;} if(duty[6] < 1) {zufall[2][1]=1;} zeit6=0; } } void rgbcalc(void) { //berechnungen für RGB farbe (regenbogen spectrum 0-2405 optimale darstellung bei light wert von 600 if (light >= 400) {darkness =0; lights = light -400;} if (light <= 399) {darkness =399 -light; lights =0;} if(RGB >=0 && RGB <=400) {duty[0] =400 -darkness; duty[1] =RGB + lights; duty[2] =0 + lights;} //rot ->gelb (rotmax grün+ blau0) if(RGB >=401 && RGB <=801) {duty[0] =(400 -(RGB -401)) +lights; duty[1] =400 -darkness; duty[2] =0 +lights;} //gelb ->grün (rot- grünmax blau0) if(RGB >=802 && RGB <=1202) {duty[0] =0+lights; duty[1] =400 -darkness; duty[2] =(RGB - 802) + lights;} //grün ->cyan (rot0 grünmax blau+) if(RGB >=1203 && RGB <=1603) {duty[0] =0+lights; duty[1] =(400 -(RGB - 1203)) +lights; duty[2] =400 -darkness;} //cyan ->blau (rot0 grün- blaumax) if(RGB >=1604 && RGB <=2004) {duty[0] =(RGB-1604) +lights; duty[1] =0 +lights; duty[2] =400 -darkness;} //blau ->lila (rot+ grün0 blaumax) if(RGB >=2005 && RGB <=2405) {duty[0] =400 -darkness; duty[1] =0+lights; duty[2] =(400- (RGB -2006)) +lights;} //lila ->rot (rotmax grün0 blau-) if(RGB >= 2406) {RGB =0;} } void machlicht(void) { //fixes pulsen der leds um verschiedene heligkeiten zu simuliweren while ((micros()-allfcount) >= 3) { fcount1++; if (fcount1 == (401-duty[0])) { digitalWrite(rot, HIGH );} if (fcount1 == (401-duty[1])) { digitalWrite(grun, HIGH );} if (fcount1 == (401-duty[2])) { digitalWrite(blau, HIGH );} if (fcount1 == (401-duty[3])) { digitalWrite(weis1, HIGH );} if (fcount1 == (401-duty[4])) { digitalWrite(weis2, HIGH );} if (fcount1 == (401-duty[5])) { digitalWrite(weis3, HIGH );} if (fcount1 == (401-duty[6])) { digitalWrite(power, HIGH );} if (fcount1 >= 410 ) { digitalWrite(rot, LOW ); digitalWrite(grun, LOW ); digitalWrite(blau, LOW ); digitalWrite(weis1, LOW ); digitalWrite(weis2, LOW ); digitalWrite(weis3, LOW ); digitalWrite(power, LOW ); fcount1 = 0; zeit1++; zeit3++; zeit2++;zeit6++;} zeit4++; allfcount = micros(); } } /*It's marderchens code mess and FREEEEE use it or parts if you want! * * ___ __ ___ ______ ____ _ __ ___ / _/ / |/ / / ____/ / __ \| | / / / / / / / /|_/ / / __/ / / / /| | /| / / / / / / / / / / / /___ / /_/ / | |/ |/ / / / / / /_/ /_/ /_____/ \____/ |__/|__/ _/ / /__/ /__/ ___ //| / _ \ |/|| _____ / // / /____/ _ _ _ \___/ _ /____/ ( )( )( ) (_) |/ |/ |/ */