/***********************************************************
Zufall Ein/Aus mit variablen Ausgang 25.04.2024
************************************************************/
int pinOut1 = 10;
int switch1in = 6;
int pinLed = 9;
int adj1 = 0;
int out = 0;
int freq;
int lum;
int fun =0;
int x=1;
unsigned long runTime; //Run
unsigned long breakTime; //Pause
unsigned long blink1millis;
unsigned long switch1millis;
unsigned long aktiv1millis;
unsigned long fun1millis;
bool led1on;
bool switch1pusch;
bool switch1short;
bool switch1shortAktiv;
bool switch1shortON;
bool switch1long;
bool switch1longAktiv;
bool switch1longON;
bool switch1verylong;
bool switch1verylongAktiv;
bool switch1verylongON;
bool firstAktiv=false;
bool aktiv =false;
bool runAktiv = false;
bool breakAktiv =false;
bool testAktiv=false;
// ***** für Final Run **********
unsigned long powerMinMax [2] = {50,250};
unsigned long firstMinMax [2] = {120000,300000};
unsigned long runMinMax [2] = {30000,120000};
unsigned long breakMinMax [2] = {5000,60000};
unsigned long funMinMax [2] = {1,10};
// ******* Final Run ENDE *******/
// ***** TEST *******
/*
unsigned long powerMinMax [2] = {20,250};
unsigned long firstMinMax [2] = {2000,5000};
unsigned long runMinMax [2] = {10000,40000};
unsigned long breakMinMax [2] = {2000,5000};
unsigned long funMinMax [2] = {1,10};
// ******* TEST ENDE *******
*/
int funtime = 1; // millisekung raufzählen
int funfast = 10; // schneller zählen
void setup() {
Serial.begin(9600);
pinMode(pinOut1, OUTPUT);
pinMode(switch1in, INPUT_PULLUP);
pinMode(pinLed, OUTPUT);
blink1millis = millis();
randomSeed(analogRead(A1));
lum=200;
freq=1000;
}
void loop() {
switch1();
//print1();
LED();
blink1(freq,lum);
random1();
first();
run1();
test1();
}
void switch1(){
switch1pusch = !digitalRead(switch1in);
if(switch1pusch==false){
switch1millis = millis();
}
// SHORT START
if(aktiv==false){
if (switch1pusch==true && switch1shortAktiv==false && millis() - switch1millis >20){
switch1shortAktiv = true;
}
if(switch1pusch==false && switch1shortAktiv == true && testAktiv==true){
testAktiv = false;
analogWrite(pinOut1, LOW);
lum=200;
freq=1000;
switch1shortAktiv = false;
}
if (switch1pusch==false && switch1shortAktiv == true){
switch1shortON = true;
if (switch1shortON==true){
switch1longON=false;
switch1verylong=false;
testAktiv=false;
lum=50;
freq=100;
firstAktiv=true;
switch1shortON=false;
}
switch1shortAktiv = false;
testAktiv=false;
// SHORT END
}
}
// LONG START
if (switch1pusch==true && switch1longAktiv==false && millis() - switch1millis >2000){
switch1longAktiv = true;
switch1shortAktiv=false;
}
if (switch1pusch==false && switch1longAktiv == true){
switch1longON = true;
switch1shortON=false;
if (switch1longON==true){
firstAktiv=false;
aktiv =false;
runAktiv = false;
breakAktiv =false;
analogWrite(pinOut1, LOW);
lum=200;
freq=1000;
}
switch1longAktiv = false;
}
// LONG END
// very LONG START
if (switch1pusch==true && switch1verylongAktiv==false && millis() - switch1millis >5000){
switch1verylongAktiv = true;
switch1shortAktiv=false;
switch1longAktiv=false;
}
if (switch1pusch==false && switch1verylongAktiv == true){
switch1verylongON = true;
switch1shortON=false;
switch1longON=false;
firstAktiv=false;
aktiv =false;
switch1verylongAktiv=false;
runAktiv = false;
breakAktiv =false;
testAktiv=true;;
lum=200;
freq=10;
}
// very LONG END
}
void first(){
if (firstAktiv == true && aktiv == false) {
breakTime = random(firstMinMax[0],firstMinMax[1]);
aktiv1millis=millis();
analogWrite(pinOut1, LOW);
aktiv=true;
}
if (firstAktiv == true && aktiv == true){
if(millis()-aktiv1millis > breakTime){
firstAktiv = false;
aktiv = false;
runAktiv = true;
lum=0;
freq=0;
digitalWrite(pinLed, LOW);
}
}
}
void run1(){
// run START
if (runAktiv == true && aktiv == false) {
runTime = random(runMinMax[0],runMinMax[1]);
breakTime=0;
adj1 = random(powerMinMax[0],powerMinMax[1]);
aktiv1millis=millis();
analogWrite(pinOut1, adj1);
aktiv=true;
analogWrite(pinLed, 10);
}
if(fun!=5&&runAktiv==true){
if (runAktiv == true && aktiv == true){
if(millis()-aktiv1millis > runTime){
runAktiv = false;
aktiv = false;
breakAktiv = true;
fun1millis=millis();
x=1*funfast;
analogWrite(pinLed, 10);
}
}
} else{
if (runAktiv == true && aktiv == true){
funfast=random(1,20);
if (millis()-fun1millis>funtime){
adj1=adj1+x;
fun1millis = millis();
analogWrite(pinOut1, adj1);
if(adj1>=powerMinMax[1]){x=-funfast;}
if(adj1<=powerMinMax[0]){x=funfast;}
analogWrite(pinLed, 10);
}
if(millis()-aktiv1millis > 2* runTime){
runAktiv = false;
aktiv = false;
breakAktiv = true;
fun=3;
}
}
}
// run END
// break START
if (breakAktiv == true && aktiv == false) {
breakTime = random(breakMinMax[0],breakMinMax[1]);
runTime=0;
aktiv1millis=millis();
analogWrite(pinOut1, LOW);
aktiv=true;
analogWrite(pinLed, LOW);
}
if (breakAktiv == true && aktiv == true){
if(millis()-aktiv1millis > breakTime){
breakAktiv = false;
aktiv = false;
runAktiv = true;
fun = random(funMinMax[0],funMinMax[1]);
analogWrite(pinLed, LOW);
}
}
// break END
}
void break1(){
}
void random1(){
if (switch1shortON==true && breakAktiv== true){
breakTime=random(breakMinMax[0],breakMinMax[1]);
}
if (switch1longON==true && runAktiv == true){
runTime=random(runMinMax[0],runMinMax[1]);
}
}
void random2(){
}
void blink1(int freq, int lum){
if (millis()- blink1millis > freq){
led1on = !led1on;
blink1millis = millis();
}
}
void LED(){
if (led1on == true) {
analogWrite(pinLed, lum);
} else {
digitalWrite(pinLed, LOW);
}
}
void test1(){
if (testAktiv==true){
funfast=random(1,20);
//Serial.print(" adj "); Serial.println(adj1);
if (millis()-fun1millis>funtime){
adj1=adj1+x;
fun1millis = millis();
analogWrite(pinOut1, adj1);
if(adj1>=powerMinMax[1]){x=-funfast;}
if(adj1<=powerMinMax[0]){x=funfast;}
}
}
}
void print1(){
/*/switsh START
Serial.print("sw= ");
Serial.print(switch1pusch);
Serial.print(" swONshort= ");
Serial.print(switch1shortON);
Serial.print(" swONlong= ");
Serial.print(switch1longON);
Serial.print(" shortAkt= ");Serial.print(switch1shortAktiv);
//Serial.print(" SW-Millis= "); Serial.print(switch1millis);
// switch END
*/
/*/ blink START
Serial.print(" Akt "); Serial.print(aktiv);
Serial.print(" LUM ");
Serial.print(lum);
Serial.print(" FREQ ");
Serial.print(freq);
// Serial.print(" BL millis "); Serial.print(blink1millis);
//blink END */
// Random START
Serial.print(" Pause "); Serial.print(breakTime);Serial.print(" - "); Serial.print(millis()-aktiv1millis);
Serial.print(" RUN "); Serial.print(runTime);
//Random END
Serial.print(" AKT "); Serial.print(aktiv);
//Serial.print(" RunAkt "); Serial.print(runAktiv);
//Serial.print(" BreakAkt "); Serial.print(breakAktiv);
Serial.print(" adj "); Serial.print(adj1);
Serial.print(" fun "); Serial.print(fun);
Serial.print(" fast "); Serial.print(funfast);
Serial.print(" Test "); Serial.print(testAktiv);
Serial.println();
}