Trouble with code

// RGB Light
int switchPin = 2;              
int redPin = 5;
int greenPin = 6;
int bluePin = 3;

int val;                        
int val2;                       
int buttonState;              

int lightMode = 0;           
void setup() 
{
  pinMode(switchPin, INPUT);    

  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  
  Serial.begin(9600);          
  buttonState = digitalRead(switchPin);   
}

void loop(){
  val = digitalRead(switchPin);      
  delay(10);                         
  val2 = digitalRead(switchPin);    
  if (val == val2) {                 
    if (val != buttonState) {          
      if (val == LOW) {             
        if (lightMode == 0) {          
          lightMode = 1;             
        } else {
          if (lightMode == 1) {       
            lightMode = 2;            
          } else {
            if (lightMode == 2) {      
              lightMode = 3;         
            } else {
           if (lightMode == 3) {
             lightMode = 4;
            }   else { 
                lightMode = 0;          
              }
                  }
          }
      
    }
        
      }
    }
    buttonState = val;          
  }

  // 
  if (lightMode == 0) {
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
  }

  if (lightMode == 1) { 
    analogWrite(redPin, 255);
    analogWrite(bluePin, 255);
    analogWrite(greenPin, 0);
  }

  if (lightMode == 2) { 
    analogWrite(redPin, 255);
    analogWrite(bluePin, 0);
    analogWrite(greenPin, 255);
    
    
  }
  if (lightMode == 3)  { 
    analogWrite(redPin, 0);
    analogWrite(greenPin, 255);
    analogWrite(bluePin, 255);
    
    
  if (lightMode == 4) {
    analogWrite(redPin, 255);
    delay(500);
    analogWrite(greenPin, 255);
    delay(500);
    analogWrite(redPin, 100);
    analogWrite(greenPin, 180);
    delay(500);
    analogWrite(redPin, 0);
    analogWrite(greenPin, 255);
    analogWrite(bluePin, 255);
    delay(500);
    analogWrite(redPin, 0);
    analogWrite(bluePin, 100);
    analogWrite(greenPin, 100);
    delay(500);
    analogWrite(redPin, 255);
    analogWrite(greenPin, 255);
    analogWrite(bluePin, 0);
    delay(500);
    analogWrite(redPin, 0);
    analogWrite(greenPin, 170);
    analogWrite(bluePin, 80);
    
 
  

  }

  }
}

Works fine till I press the button the 4th time to the delayed analogWrite.
I adapted from lady ada's code.

Works fine

Define "fine" (or the opposite)

 if (lightMode == 3)  {
    analogWrite(redPin, 0);
    analogWrite(greenPin, 255);
    analogWrite(bluePin, 255);


  if (lightMode == 4) {

Are you missing a "}" somewhere in there? (since lightMode can't be 3 and 4 simultaneously)

Things become clearer if you use the Auto Format tool:

int switchPin = 2;
int redPin = 5;
int greenPin = 6;
int bluePin = 3;

int val;
int val2;
int buttonState;

int lightMode = 0;
void setup()
{
  pinMode(switchPin, INPUT);

  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

  Serial.begin(9600);
  buttonState = digitalRead(switchPin);
}

void loop(){
  val = digitalRead(switchPin);
  delay(10);
  val2 = digitalRead(switchPin);
  if (val == val2) {
    if (val != buttonState) {
      if (val == LOW) {
        if (lightMode == 0) {
          lightMode = 1;
        } 
        else {
          if (lightMode == 1) {
            lightMode = 2;
          } 
          else {
            if (lightMode == 2) {
              lightMode = 3;
            } 
            else {
              if (lightMode == 3) {
                lightMode = 4;
              }   
              else {
                lightMode = 0;
              }
            }
          }

        }

      }
    }
    buttonState = val;
  }

  //
  if (lightMode == 0) {
    analogWrite(redPin, 0);
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 0);
  }

  if (lightMode == 1) {
    analogWrite(redPin, 255);
    analogWrite(bluePin, 255);
    analogWrite(greenPin, 0);
  }

  if (lightMode == 2) {
    analogWrite(redPin, 255);
    analogWrite(bluePin, 0);
    analogWrite(greenPin, 255);


  }
  if (lightMode == 3)  {
    analogWrite(redPin, 0);
    analogWrite(greenPin, 255);
    analogWrite(bluePin, 255);


    if (lightMode == 4) {
      analogWrite(redPin, 255);
      delay(500);
      analogWrite(greenPin, 255);
      delay(500);
      analogWrite(redPin, 100);
      analogWrite(greenPin, 180);
      delay(500);
      analogWrite(redPin, 0);
      analogWrite(greenPin, 255);
      analogWrite(bluePin, 255);
      delay(500);
      analogWrite(redPin, 0);
      analogWrite(bluePin, 100);
      analogWrite(greenPin, 100);
      delay(500);
      analogWrite(redPin, 255);
      analogWrite(greenPin, 255);
      analogWrite(bluePin, 0);
      delay(500);
      analogWrite(redPin, 0);
      analogWrite(greenPin, 170);
      analogWrite(bluePin, 80);




    }

  }
}

Yes it uploads fine... Problem is when hits button 4 it wont physically do whats in the code...:

if (lightMode == 4) {
      analogWrite(redPin, 255);
      delay(500);
      analogWrite(greenPin, 255);
      delay(500);
      analogWrite(redPin, 100);
      analogWrite(greenPin, 180);
      delay(500);
      analogWrite(redPin, 0);
      analogWrite(greenPin, 255);
      analogWrite(bluePin, 255);
      delay(500);
      analogWrite(redPin, 0);
      analogWrite(bluePin, 100);
      analogWrite(greenPin, 100);
      delay(500);
      analogWrite(redPin, 255);
      analogWrite(greenPin, 255);
      analogWrite(bluePin, 0);
      delay(500);
      analogWrite(redPin, 0);
      analogWrite(greenPin, 170);
      analogWrite(bluePin, 80);

I was missing a }
:slight_smile: