Using a for loop in a switch case and else if doesn't work

Hi guys,

I’m making a program in which several programs (switch cases) represent the way a LED will blink. Every one of them works now except for the last in which I want the RGB LED to pulsate in order in different colours. The principle of the pulsating works, only the LEDS all light up at the same time, even though I used switch case states and now i’ve used if else states. In all the other programs the LEDS work.

What am I doing wrong.

if else:

if (kleur == 0){
                  for (int i = 0; i < knipper; i++)
                  {
                           if(redup == true){
                             if (redlight == 0){
                               redlight = redlight + 1;
                               myDelay(10); 
                              }
                              else if (redlight < 50){
                                redlight = redlight + 1; 
                                myDelay(5);
                              }
                              else if (redlight < 255){
                                redlight = redlight + 1; 
                                myDelay(2);
                              }
                              else{
                               redup = false;
                              }
                           }
                           else if(redup == false)
                           {
                             if (redlight > 150){
                                redlight = redlight - 1;
                                myDelay(3); 
                             }
                             else if (redlight > 0){
                                redlight = redlight - 1; 
                               myDelay(1);
                             }
                             else {
                               redlight = 0; 
                               redup = true;
                             }
                            } 
                     analogWrite(redled, redlight);
                     }
                   kleur = 1;  
             }
             
             else if(kleur == 1){
                  for (int j = 0; j < knipper; j++)
                  {
                       if(blueup == true){
                             if (bluelight == 0){
                               bluelight = bluelight + 1;
                               myDelay(10); 
                              }
                              else if (bluelight < 50){
                                bluelight = bluelight + 1; 
                                myDelay(5);
                              }
                              else if (bluelight < 255){
                                bluelight = bluelight + 1; 
                                myDelay(2);
                              }
                              else{
                               blueup = false;
                              }
                       }
                       else if(blueup == false)
                       {
                         if (bluelight > 150){
                            bluelight = bluelight - 1;
                            myDelay(3); 
                         }
                         else if (bluelight > 0){
                            bluelight = bluelight - 1; 
                           myDelay(1);
                         }
                         else {
                           bluelight = 0; 
                           blueup = true;
                         }
                       }
                       analogWrite(blueled, bluelight);
                       }
                       kleur = 2;
             }
                  
                 else if(kleur == 2){
                 for (int k = 0; k < knipper; k++)
                 {
                       if(greenup == true){
                             if (greenlight == 0){
                               greenlight = greenlight + 1;
                               myDelay(10); 
                              }
                              else if (greenlight < 50){
                                greenlight = greenlight + 1; 
                                myDelay(5);
                              }
                              else if (greenlight < 255){
                                greenlight = greenlight + 1; 
                                myDelay(2);
                              }
                              else{
                               greenup = false;
                              }
                       }
                       else if(greenup == false)
                       {
                         if (greenlight > 150){
                            greenlight = greenlight - 1;
                            myDelay(3); 
                         }
                         else if (greenlight > 0){
                            greenlight = greenlight - 1; 
                           myDelay(1);
                         }
                         else {
                           greenlight = 0; 
                           greenup = true;
                         }
                       }
                       analogWrite(greenled, greenlight);
                     }
                  kleur = 0;
                }

and here’s the switch case variant:

case 3:     // programma 4 - snelle pulse
            switch (kleur){
              case 0:
               for (int i = 0; i < knipper; i++)
                  {
                        if (redup == true)
                        {
                          if (redlight < 50)
                          {
                            redlight = redlight++;
                            myDelay(5);
                          }
                          else if (redlight < 255)
                          {
                            redlight = redlight++;
                            myDelay(2);
                          }
                          else redup = false; 
                        }
                        else if (redup == false)
                        {
                          if (redlight > 150)
                          {
                            redlight = redlight--;
                            myDelay(3); 
                          }
                          else if (redlight > 0)
                          {
                            redlight = redlight--;
                            myDelay(1); 
                          }
                          else {
                            redlight = 0;
                            redup = true;
                          }
                        }
                    analogWrite(redled, redlight);
                    }
                  if (i >= knipper){
                   kleur = 1;
                    i = 0; 
                  }
                  break;
                  
               case 1:
              {
                  for (int i = 0; i < knipper; i++)
                  {
                        if (blueup == true)
                        {
                          if (bluelight < 50)
                          {
                            bluelight = bluelight++;
                            myDelay(5);
                          }
                          else if (bluelight < 255)
                          {
                            bluelight = bluelight++;
                            myDelay(2);
                          }
                          else blueup = false; 
                        }
                        else if (blueup == false)
                        {
                          if (bluelight > 150)
                          {
                            bluelight = bluelight--;
                            myDelay(3); 
                          }
                          else if (bluelight > 0)
                          {
                            bluelight = bluelight--;
                            myDelay(1); 
                          }
                          else {
                            bluelight = 0;
                            blueup = true;
                          }
                        }
                    analogWrite(blueled, bluelight);
                    }
                  if (i >= knipper){
                   kleur = 2;
                    i = 0; 
                  }
               break;
              }

thanks in advance

Snippets-r-us is down the road a ways. Here, we want to see ALL of your code.

                           if(redup == true){
                           }
                           else if(redup == false)
                           {

First, consistent placement of the { is a good thing. Either on a new line (which I prefer) or on the end of the statement, separated by a space. But, NOT jammed up tight against the end of the statement and NOT a mix of styles.

Second, the == true is not needed. The variable, by itself (assuming it is a boolean), is either true or false.

Finally, if it isn’t true, it can hardly be anything else BUT false. So, the second if test is useless.

                               redlight = redlight + 1;

Perhaps you’ve noticed that the programming language for the Arduino is not called C=C+1. Learn to use, and embrace, the compound operators, like ++, --, +=, -=, etc.

                              else if (redlight < 50){
                                redlight = redlight + 1; 
                                myDelay(5);
                              }
                              else if (redlight < 255){
                                redlight = redlight + 1; 
                                myDelay(2);
                              }

For what values of redlight will the first if statement be false such that the second if statement will be true?

                   kleur = 1;  
             }
             
             else if(kleur == 1){

Being an else if, the if statement will not be evaluated after you assign kleur a value, until the whole snippet of code is called again.
Please use Tools + Auto Format before posting code again, AND use the # button when posting code.

Ok, so I cleaned up the program case 3, will do the other later, but these already work.
I believe the first statement will be false and the second true whenever the value will be in between 50 and 255

I added the code as an attachment as it exceeded the maximum allowed message length
How would you recommend assigning kleur a different values. In the other cases of the program (for instance case 2) I assign the kleur a value and it still evaluated it. Recommend returning it into a case switch again?

Rick_programma_ifelse.ino (11.6 KB)