So I am new to Arduino and C++ coding as you can tell by the basic project I am starting off with, so I decided to build a control system for an RGB LED similar to that of Christmas lights except only using one LED. I have a set up with 2 buttons and 1 controls the color of the LED, while the other controls the "mode" of the LED which are on,blinking, and fading in and out. So after the code was done and working I was looking to make some improvements however I have no clue how to make these improvements, and am hoping someone can help me out with these.
Looking to change:
-Use some shortcuts in code to make it shorter as it is quite long.
-Find a way so the mode/color changed immediately when I press the button so I don't need to hold it and wait for the cycle (blink/fade) to finish.
-Add a mode where the LED fades in a color and then fades into a random color, then fades out.
-Also taking suggestions for any more.
So here is the code I have (it's quite long):
//////////////PIN VARIABLES///////////
const int LEDB = 11;
const int LEDG = 10;
const int LEDR = 9;
const int CBUTTON = 7;
const int MBUTTON = 4;
///////////COLOR VARIABLES////////////
int R = 0;
int G = 0;
int B = 0;
int Y = 0;
int P = 0;
int Cy = 0;
int W = 0;
///////////////BUTTON VARIABLES////////////
int Cval = 0;
int C = 0;
int M = 1;
int Mval = 0;
////////////////////////////////
//////////LED CONTROL////////
////////////RED///////////
void RED()
{
if(C==1)
{
if(M==1)
{
analogWrite(LEDR, 255);
analogWrite(LEDG, 0);
analogWrite(LEDB, 0);
}
if(M==2)
{
if((Cval==LOW) && (Mval==LOW))
{
analogWrite(LEDB, 0);
analogWrite(LEDG, 0);
analogWrite(LEDR, 255);
delay(1000);
analogWrite(LEDR, 0);
delay(1000);
}
}
if(M==3)
{
if((Cval==LOW) && (Mval==LOW))
{
for(R=0;R<255;R++)
{
analogWrite(LEDR, R);
delay(10);
}
for(R=255;R>0;R--)
{
analogWrite(LEDR, R);
delay(10);
}
}
}
}
}
////////////GREEN///////
void GREEN()
{
if(C==2)
{
if(M==1)
{
analogWrite(LEDR, 0);
analogWrite(LEDG, 255);
analogWrite(LEDB, 0);
}
if(M==2)
{
if((Cval==LOW) &&(Mval==LOW))
{
analogWrite(LEDR, 0);
analogWrite(LEDB, 0);
analogWrite(LEDG, 255);
delay(1000);
analogWrite(LEDG, 0);
delay(1000);
}
}
if(M==3)
{
if((Cval==LOW) &&(Mval==LOW))
{
for(G=0;G<255;G++)
{
analogWrite(LEDG, G);
delay(10);
}
for(G=255;G>0;G--)
{
analogWrite(LEDG, G);
delay(10);
}
}
}
}
}
/////////BLUE/////////
void BLUE()
{
if(C==3)
{
if(M==1)
{
analogWrite(LEDR, 0);
analogWrite(LEDG, 0);
analogWrite(LEDB, 255);
}
if(M==2)
{
if((Cval==LOW) && (Mval==LOW))
{
analogWrite(LEDR, 0);
analogWrite(LEDG, 0);
analogWrite(LEDB, 255);
delay(1000);
analogWrite(LEDB, 0);
delay(1000);
}
}
if(M==3)
{
if((Cval==LOW) && (Mval==LOW))
{
for(B=0;B<255;B++)
{
analogWrite(LEDB, B);
delay(10);
}
for(B=255;B>0;B--)
{
analogWrite(LEDB, B);
delay(10);
}
}
}
}
}
//////////YELLOW/////////
void YELLOW()
{
if(C==4)
{
if(M==1)
{
analogWrite(LEDB, 0);
analogWrite(LEDR, 255);
analogWrite(LEDG, 255);
}
if(M==2)
{
if((Cval==LOW) && (Mval==LOW))
{
analogWrite(LEDB,0);
analogWrite(LEDR, 255);
analogWrite(LEDG, 255);
delay(1000);
analogWrite(LEDR, 0);
analogWrite(LEDG, 0);
delay(1000);
}
}
if(M==3)
{
if((Cval==LOW) && (Mval==LOW))
{
for(Y=0;Y<255;Y++)
{
analogWrite(LEDR, Y);
analogWrite(LEDG, Y);
delay(10);
}
for(Y=255;Y>0;Y--)
{
analogWrite(LEDR, Y);
analogWrite(LEDG, Y);
delay(10);
}
}
}
}
}
/////////PURPLE////////////
void PURPLE()
{
if(C==5)
{
if(M==1)
{
analogWrite(LEDR, 255);
analogWrite(LEDB, 255);
analogWrite(LEDG, 0);
}
if(M==2)
{
if((Cval==LOW) && (Mval==LOW))
{
analogWrite(LEDG, 0);
analogWrite(LEDR, 255);
analogWrite(LEDB, 255);
delay(1000);
analogWrite(LEDR,0);
analogWrite(LEDB, 0);
delay(1000);
}
}
if(M==3)
{
if((Cval==LOW) && (Mval==LOW))
{
for(P=0;P<255;P++)
{
analogWrite(LEDR, P);
analogWrite(LEDB, P);
delay(10);
}
for(P=255;P>0;P--)
{
analogWrite(LEDR, P);
analogWrite(LEDB, P);
delay(10);
}
}
}
}
}
/////////////CYAN/////////
void CYAN()
{
if(C==6)
{
if(M==1)
{
analogWrite(LEDR, 0);
analogWrite(LEDB, 255);
analogWrite(LEDG, 255);
}
if(M==2)
{
if((Cval==LOW) && (Mval==LOW))
{
analogWrite(LEDR, 0);
analogWrite(LEDG, 255);
analogWrite(LEDB, 255);
delay(1000);
analogWrite(LEDG, 0);
analogWrite(LEDB, 0);
delay(1000);
}
}
if(M==3)
{
if((Cval==LOW) && (Mval==LOW))
{
for(Cy=0;Cy<255;Cy++)
{
analogWrite(LEDG, Cy);
analogWrite(LEDB, Cy);
delay(10);
}
for(Cy=255;Cy>0;Cy--)
{
analogWrite(LEDG, Cy);
analogWrite(LEDB, Cy);
delay(10);
}
}
}
}
}
//////////////WHITE///////////
void WHITE()
{
if(C==7)
{
if(M==1)
{
analogWrite(LEDG, 255);
analogWrite(LEDR, 255);
analogWrite(LEDB, 255);
}
if(M==2)
{
if((Cval==LOW) && (Mval==LOW))
{
analogWrite(LEDG, 255);
analogWrite(LEDB, 255);
analogWrite(LEDR, 255);
delay(1000);
analogWrite(LEDG, 0);
analogWrite(LEDB, 0);
analogWrite(LEDR, 0);
delay(1000);
}
}
if(M==3)
{
if((Cval==LOW) && (Mval==LOW))
{
for(W=0;W<255;W++)
{
analogWrite(LEDR, W);
analogWrite(LEDB, W);
analogWrite(LEDG, W);
delay(10);
}
for(W=255;W>0;W--)
{
analogWrite(LEDR, W);
analogWrite(LEDG, W);
analogWrite(LEDB, W);
delay(10);
}
}
}
}
}
///////////////COLOR CONTROL///////////
void CMLED()
{
///////////////OFF///////////
if(C==0)
{
analogWrite(LEDR, 0);
analogWrite(LEDG, 0);
analogWrite(LEDB, 0);
}
else
{
RED();
GREEN();
BLUE();
YELLOW();
PURPLE();
CYAN();
WHITE();
}
}
///////////////////////
////////////PIN SETUP///////////////////
void setup()
{
pinMode(LEDB, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDR, OUTPUT);
pinMode(CBUTTON, INPUT);
pinMode(MBUTTON, INPUT);
Serial.begin(57600);
}
//////////////////////////////
/////////////BUTTON CONTROL/////////////
void loop()
{
Cval = digitalRead(CBUTTON);
Mval = digitalRead(MBUTTON);
if((Cval==HIGH) && (C < 7))
{
C = C + 1;
delay(2000);
Serial.print(C);
}
Cval = digitalRead(CBUTTON);
Mval = digitalRead(MBUTTON);
if((Cval==HIGH) && (C == 7))
{
C = 0;
delay(2000);
Serial.print(C);
}
Cval = digitalRead(CBUTTON);
Mval = digitalRead(MBUTTON);
if((Mval==HIGH) && (M < 3))
{
M = 1 + M;
delay(2000);
Serial.print(M);
}
Cval = digitalRead(CBUTTON);
Mval = digitalRead(MBUTTON);
if((Mval==HIGH) && (M == 3))
{
M = 1;
delay(2000);
Serial.print(M);
}
CMLED();
}
/////////////////////////////
Moderator edit: BLOODY CODE TAGS, AGAIN.