int switc=2; //is switch engaged
int red=9; // red led
int green=10; //green led
int blue=11; //blue led
int buttons; //button state
int lstate=2; //light state
int time; //time current
int timeold=0; //old time
int timetemp; //temperary time changes based off each state in cycle 2
float I=0.0; //intensity
int x=0; //counter
int m=0; //switch for if held for 2 seconds
int buttontime; //time buttons held
void setup() {
// put your setup code here, to run once:
// setting inputs and outputs
pinMode(switc, INPUT);
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
buttons=digitalRead(switc); //original button state
//starting color state
analogWrite(blue,5);
analogWrite(green,5);
analogWrite(red,5);
}
void loop() {
// put your main code here, to run repeatedly:
// decides light state option
time=millis(); //gets current time
int val=digitalRead(switc); //debounce system start
delay(200);
int val2 = digitalRead(switc); //debounce system end
if (val == val2){ //if debounce values ar equal after delay
if (val != buttons){ //if button state dose not equal original state
if (m == 0){ //m set button timeing so if on for 2 seconds dose not switch state
buttontime=millis(); //sets buttons hold time
m=1; //stops from entering this loop until unheld
}
if (val == LOW){ //when button is let go
if ((time-buttontime)<2000){ //checks if held for more than 2 seconds
m=0; //re intizializes earlier m loop to start button held time
if (lstate==1){ //Light stat 1 sets all hues to 5
lstate=2; // say next state is 2
analogWrite(blue,5);
analogWrite(green,5);
analogWrite(red,5);
timeold=millis(); //starts old time
}
else if (lstate==2){ // set lights state 2
lstate=3; //says next light state
}
else{ //light state 3
lstate=1; //say 1st light state will be next
}
}
else{
m=0; //re intizializes earlier m loop to start button held time
}
}
}
}
buttons=val;//re-initizalies the buttons value
//state 2 cycle code
// all if statements subtract time old from current time to see how long cycle has been runing
if (lstate == 3){
if((time-timeold)<=600){ //if less than 600ms runs this hue
analogWrite(red,80);
analogWrite(green,0);
analogWrite(blue,0);
}
else if((time-timeold)<=700){ //elseif less than 700ms runs this hue
analogWrite(red,255);
analogWrite(green,255);
analogWrite(blue,255);
}
else if((time-timeold)<=800){ //elseif less than 800ms runs this hue
analogWrite(red,0);
analogWrite(green,0);
analogWrite(blue,0);
}
else if((time-timeold)<=900){ //elseif less than 900ms runs this hue
analogWrite(red,255);
analogWrite(green,255);
analogWrite(blue,255);
}
else if((time-timeold)<=1000){ //elseif less than 1000ms runs this hue
analogWrite(red,0);
analogWrite(green,0);
analogWrite(blue,0);
}
else if((time-timeold)<=1100){ //elseif less than 1100ms runs this hue
analogWrite(red,255);
analogWrite(green,255);
analogWrite(blue,255);
}
else if((time-timeold)<=1200){ //elseif less than 1200 ms runs this hue
analogWrite(red,0);
analogWrite(green,0);
analogWrite(blue,0);
}
else if((time-timeold)<=1800){ //elseif less than 1800 ms runs this hue
analogWrite(red,0);
analogWrite(green,0);
analogWrite(blue,80);
}
else{
timeold=millis(); //resets cycle by setting time old to current time
}
}
// state 3 cycle code
if (lstate == 1){
if((time-timeold)<=500){ //for first 500 ms
if(x==0){
timetemp=millis(); //sets a new temp time so that it can set correct hue through function
x=1; //makes sure to only run if on first cylce
}
I=pow(((490-(time-timetemp))/20),(1.732)); //Runs function for I
I=int(I); //makes I an int
analogWrite(red,I);
analogWrite(blue,0);
analogWrite(green,0);
}
else if((time-timeold)<=1000){ //for second 500 ms
if(x==1){
timetemp=millis(); //sets a new temp time so that it can set correct hue through function
x=2; //makes sure to only run if on first cylce
}
I=pow(((490-(time-timetemp))/20),(1.732)); //Runs function for I
I=int(I); //makes I an int
analogWrite(red,I);
analogWrite(blue,I);
analogWrite(green,I);
}
else if((time-timeold)<=1500){ //for third 500 ms
if(x==2){
timetemp=millis(); //sets a new temp time so that it can set correct hue through function
x=0; //makes sure to only run if on first cylce
}
I=pow(((490-(time-timetemp))/20),(1.732)); //Runs function for I
I=int(I); //makes I an int
analogWrite(red,0);
analogWrite(blue,I);
analogWrite(green,0);
}
else{
timeold=millis(); //resets cycle by setting time old to current time
}
}
}