#include #include #include const byte chips = 1; // 1 chip, bit banged SPI on pins 6, 7, 8 MAX7219 display (chips, PA4, PA7, PA5); // Chips / LOAD / DIN / CLK String outzi = "Purrrrrr "; //const char message []= "Start config"; #define rot PB14 #define grun PB15 #define blau PA8 #define heatout PC15 #define speaker PC14 #define tlinks PA0 #define tmitte PA1 #define trechts PB13 #define t1 PB12 long tim = millis(); int speedb=0; int zeit1=0; int maintime =millis(); void setup () { delay(250); display.begin (); pinMode(rot, OUTPUT); pinMode(grun, OUTPUT); pinMode(blau, OUTPUT); pinMode(heatout, OUTPUT); pinMode(speaker, OUTPUT); pinMode(tlinks, INPUT); pinMode(tmitte, INPUT); pinMode(trechts, INPUT); pinMode(t1, INPUT); } int32_t long flashingtime=200; int32_t long runningtime=200; long coltest=0; int8_t denda=0; int16_t blinkz=0; int onpress[16]; boolean party=false; boolean partyblocker=true; void loop () { zeitreise(); scratchdigs(); istinput(); if (digitalRead(t1) == HIGH) {runningtime =flashingtime*10; party=false; partyblocker=false;} if (party ==true && partyblocker==false) {timeout();} if (party ==false && partyblocker==true) {standbyes();} if(digitalRead(tlinks) == HIGH){digitalWrite(heatout, HIGH);} if(digitalRead(tmitte) == HIGH){digitalWrite(speaker, HIGH);} if(digitalRead(trechts) == HIGH){digitalWrite(speaker, LOW);digitalWrite(heatout, LOW);} } void istinput() { if (zeit1 >=8) { if (digitalRead(tmitte) == HIGH && onpress[8] ==0) { onpress[8] =1; setzen(denda,false); } if (onpress[8] == 1) { onpress[9]++; }//spiel(melodie2); if (onpress[9] >= 2) { onpress[9] =0; onpress[8]=0; } if (digitalRead(tlinks) == HIGH && onpress[10] ==0) { onpress[10] =1; denda++; if(denda >=4) {denda=0;} party=false;} if (onpress[10] == 1) { onpress[11]++;} if (onpress[11] >= 2) { onpress[11] =0; onpress[10]=0; } if (digitalRead(trechts) == HIGH && onpress[6] ==0) { onpress[6] =1; setzen(denda,true); } if (onpress[6] == 1) { onpress[7]++;} if (onpress[7] >= 2) { onpress[7] =0; onpress[6]=0; } zeit1=0; }} long partytime=0; long rgbtime=millis(); int standyblitz,standybztime; void zeitreise(void){ while ((millis()- maintime) >= 10) { if (runningtime >0) {runningtime--; } if (runningtime ==0 && party == false &&partyblocker ==false) {party =true; partytime=900;} if (partytime >0){partytime--;} if (partytime ==1) {party=false; digitalWrite(heatout, LOW); partyblocker=true;} zeit1++; blinkz++; if(blinkz >14) {blinkz=0;} standyblitz++; if (standyblitz >80) {standyblitz=0; standybztime++;} maintime = millis(); } while ((millis()- rgbtime) >= 5) { coltest++; if (coltest >= 906) {coltest=0;} rgbtime=millis(); } } void setzen(int8_t denda, boolean updown){ if (denda ==0 && updown==true && flashingtime <9000) {flashingtime+=1000;} if (denda ==0 && updown==false && flashingtime >1000) {flashingtime-=1000;} if (denda ==1 && updown==true && flashingtime <9800) {flashingtime+=100;} if (denda ==1 && updown==false && flashingtime >0) {flashingtime-=100;} if (denda ==2 && updown==true && flashingtime <9880) {flashingtime+=10;} if (denda ==2 && updown==false && flashingtime >10) {flashingtime-=10;} if (denda ==3 && updown==true && flashingtime <9888) {flashingtime+=1;} if (denda ==3 && updown==false && flashingtime >1) {flashingtime-=1;} } void scratchdigs() { outzi=" "; if(flashingtime <=9) {outzi+="0";} if(flashingtime <=99) {outzi+="0";} if(flashingtime <=999) {outzi+="0";} outzi+=String(flashingtime); if(runningtime <=9) {outzi+="0";} if(runningtime <=99) {outzi+="0";} if(runningtime <=999) {outzi+="0";} outzi+=String(runningtime); for (byte i = 0; i < 8; i++){ display.sendChar (i, outzi[i+1]); if (i == denda && (blinkz >8)) {display.sendChar (i, ' '); } } } void timeout() { digitalWrite(heatout, HIGH); wuselrainbow(coltest); } void standbyes() { if ((standybztime%16)==0){digitalWrite(blau, HIGH);} if (((standybztime%16)+1)==0){digitalWrite(blau, LOW);} if ((standybztime%24)==0){digitalWrite(rot, HIGH);} if (((standybztime%24)+1)==0){digitalWrite(rot, HIGH);} if ((coltest%4)==0){digitalWrite(blau, LOW);digitalWrite(rot, LOW);digitalWrite(grun, LOW);} if (standybztime >64) {standybztime=0;} } /*don't work * wuselrainbow(coltest); long shorty=micros(); int tt=0; long cachcc=0; int frequi =3; void wuselrainbow(long color){ // while ((micros()-shorty) >= 2) { for(int16_t tt=0; tt <500; tt++) { cachcc=round(sin(color/100)*249+250); if (tt <= (cachcc)) { digitalWrite(rot, HIGH );} else {digitalWrite(rot, LOW );} // if (tt == (255-round(sin((frequi/10)*color +2)*249+500))) { digitalWrite(grun, HIGH );} // if (tt == (255-round(sin((frequi/10)*color +4)*249+500))) { digitalWrite(blau, HIGH );} // if (tt >= 1001) {digitalWrite(rot, LOW ); digitalWrite(blau, LOW ); digitalWrite(grun, LOW );} }shorty=micros();}//} */ int duty1,duty2,duty3; void rgbcalc(int RGB) { if(RGB >=0 && RGB <=150) {duty1 =150; duty2 =RGB; duty3 =0;} //rot ->gelb (rotmax grün+ blau0) if(RGB >=151 && RGB <=301) {duty1 =150 -(RGB -151);duty2 =150; duty3 =0;} //gelb ->grün (rot- grünmax blau0) if(RGB >=302 && RGB <=452) {duty1 =0; duty2 =150; duty3 =(RGB - 302);} //grün ->cyan (rot0 grünmax blau+) if(RGB >=453 && RGB <=603) {duty1 =0; duty2 =150 -(RGB - 453); duty3 =150;} //cyan ->blau (rot0 grün- blaumax) if(RGB >=604 && RGB <=754) {duty1 =(RGB-604); duty2 =0; duty3 =150;} //blau ->lila (rot+ grün0 blaumax) if(RGB >=755 && RGB <=905) {duty1 =150; duty2 =0; duty3 =150- (RGB -756);} //lila ->rot (rotmax grün0 blau-) if(RGB >= 906) {RGB=0;} } void wuselrainbow(int color){ rgbcalc(color); for(int16_t tt=0; tt <151; tt++) { if (tt <= (151-duty1)) { digitalWrite(rot, HIGH );} else{digitalWrite(rot, LOW ); } if (tt <= (151-duty2)) { digitalWrite(grun, HIGH );} else{digitalWrite(grun, LOW ); } if (tt <= (151-duty3)) { digitalWrite(blau, HIGH );} else{digitalWrite(blau, LOW ); } }}