Use Two Pushbuttons To Toggle Two Programs
02:58 26 Sep 2016

I am trying to make a led controller for my room rgb led strip. I am using arduino uno. I want two pushbuttons:

  1. controls static colors of led (one color at a time.cycles color on pressing that same switch again)
  2. rgb crossfade

Both programs work separately. Now I want these two programs in one sketch and toggled by two pushbuttons one for color cycle and one for crossfade sketch works but only one pushbutton is working. I have connected 2 10k ohm resistors with both buttons according to various guides and tutorials. I think the wiring is correct.

Here is the sketch:

const int buttonPin1 = 2;  // button 1
const int buttonPin2 = 3;  // button 2
const int redPin = 9;      // red led pin
const int greenPin = 11;   // green led pin
const int bluePin = 10;    // blue led pin
int pushCounter = 0;       // push counter for changing colors at each press
int buttonState = 0;       // button state i.e. HIGH or LOW
int lastButtonState = 0;   

void setup()
{
    pinMode(buttonPin1, INPUT);
    pinMode(buttonPin2, INPUT);
    pinMode(redPin, OUTPUT);
    pinMode(greenPin, OUTPUT);
    pinMode(bluePin, OUTPUT);
    setColourRgb(0,0,0);
} 

void setColor(int red, int green, int blue)  // function for setting custom colors
{
    //#ifdef COMMON_ANODE
    //red = 255 - red;
    //green = 255 - green;
    //blue = 255 - blue;
    //#endif
    analogWrite(redPin, red);
    analogWrite(greenPin, green);
    analogWrite(bluePin, blue);  
}

void setColourRgb(unsigned int red, unsigned int green, unsigned int blue) {  //function for setting crossfade colors
    analogWrite(redPin, red);
    analogWrite(greenPin, green);
    analogWrite(bluePin, blue);
}

void loop()
{
    int buttonState1 = 0;
    int buttonState2 = 0;
    buttonState1 = digitalRead(buttonPin1);          //reads button states
    buttonState2 = digitalRead(buttonPin2);

    if ((buttonState1 == HIGH) && (buttonState2 == LOW))   //compares button states of both switches to enable the correct program
    {
        buttonState = digitalRead(buttonPin1);               
        if (buttonState != lastButtonState)
        {
            if (buttonState == HIGH)      //increases pushcounter of button1 on every press
            {
                pushCounter++;
            }
        }
        //delay(1);
        lastButtonState = buttonState;

        if (pushCounter == 1)              //custom led colors
        { setColor(255, 0, 0);}; //red
        if (pushCounter == 2)
        { setColor(0, 255, 0);}; //green
        if (pushCounter == 3)
        { setColor(0, 0, 255);}; //blue
        if (pushCounter == 4)
        { setColor(255,200,255);}; //white
        if (pushCounter == 5)
        { setColor(255,255,0);}; //lime
        if (pushCounter == 6)
        { setColor(0,255,255);}; //aqua
        if (pushCounter == 7)
        { setColor(255,0,255);}; //violet
        if (pushCounter == 8)
        { setColor(128,0,128);}; //dim_violet
        if (pushCounter == 9)
        { pushCounter = 0;}

    }

    if ((buttonState1 == LOW) && (buttonState2 == HIGH))    //compares button states to load second program 
    {
        unsigned int rgbColour[3];

        // Start off with red.
        rgbColour[0] = 255;                                 //sets first color
        rgbColour[1] = 0;
        rgbColour[2] = 0;  

        // Choose the colours to increment and decrement.
        for (int decColour = 0; decColour < 3; decColour += 1)  
        {
            int incColour = decColour == 2 ? 0 : decColour + 1;

            // cross-fade the two colours.
            for(int i = 0; i < 255; i += 1)
            {
                rgbColour[decColour] -= 1;
                rgbColour[incColour] += 1;
                setColourRgb(rgbColour[0], rgbColour[1], rgbColour[2]);
                delay(30);
            }
        }
    };
}

Now if I reverse the if condition for second program... the second program runs but the first doesn't run. What is wrong here?

arduino arduino-uno