If statement in nested if does not run, send it back to top of void loop instead

Hello and good day!

This is my code:

void loop() {
  // BUTTONS
if(digitalRead(14) == 1 || digitalRead(15) == 1 || digitalRead(16) == 1)
      {
        clearLCD();
        lcd.setCursor(0,0);
        lcd.print("No Serial Monitor?");
        delay(1400);
        lcd.setCursor(0,1);
        lcd.print("No problem!");
        delay(1500);
        clearLCD();
        delay(400);
        lcd.setCursor(0,0);
        lcd.print("Use the buttons!");
                   delay(2000);
                   clearLCD();
                   lcd.setCursor(0,0);
                   lcd.print("Press button 1");
                   lcd.setCursor(0,1);
                   lcd.print("for");
                   delay(1500);
                   clearLCD();
                   lcd.setCursor(0,0);
                   lcd.print("Say Something");   
                   lcd.setCursor(0,1);
                   lcd.print("Great Big World");  
                              delay(2000);
                              clearLCD();
                              lcd.setCursor(0,0);
                              lcd.print("Press button 2");
                              lcd.setCursor(0,1);
                              lcd.print("for");
                              delay(1500);
                              clearLCD();
                              lcd.setCursor(0,0);
                              lcd.print("Lazarus");  
                              lcd.setCursor(0,1);
                              lcd.print("by David Bowie");   
                                         delay(2000);
                                         clearLCD();
                                         lcd.setCursor(0,0);
                                         lcd.print("Press button 3");
                                         lcd.setCursor(0,1);
                                         lcd.print("for");
                                         delay(1500);
                                         clearLCD();
                                         lcd.setCursor(0,0);
                                         lcd.print("Space Oddity");   
                                         lcd.setCursor(0,1);
                                         lcd.print("by David Bowie");  
                                         delay(2000);
        clearLCD();
        lcd.setCursor(0,0);
        lcd.print("Now you can");
        lcd.setCursor(0,1);
        lcd.print("choose a song");
        delay(1500);
        clearLCD();
        lcd.setCursor(0,0);
        lcd.print("by pressing");
        lcd.setCursor(0,1);
        lcd.print("button 1,2,or 3");
        x++;
                  if(x==1)
                  {
                    if(digitalRead(16) == 1)
                    {
                      clearLCD();
                      lcd.setCursor(0,0);
                      lcd.print("You have chosen:");
                      delay(1500);
                      clearLCD();
                      lcd.setCursor(0,0);
                      lcd.print("Say Something");
                      lcd.setCursor(0,1);
                      lcd.print("Great big world");
                      delay(2000);
                      //NJ MUSIC VOID
                      startup2();
                     
                    }
                    
                    if(digitalRead(15) == 1)
                    {
                      clearLCD();
                      lcd.setCursor(0,0);
                      lcd.print("You have chosen:");
                      delay(1500);
                      clearLCD();
                      lcd.setCursor(0,0);
                      lcd.print("Lazarus"); // 
                      lcd.setCursor(0,1);
                      lcd.print("by David Bowie"); 
                      delay(2000);
                      //Echo's music void
                      startup2();
                     
                    }
                    
                    if(digitalRead(14) == 1)
                    {
                      clearLCD();
                      lcd.setCursor(0,0);
                      lcd.print("You have chosen:");
                      delay(1500);
                      clearLCD();
                      lcd.setCursor(0,0);
                      lcd.print("Space Oddity"); 
                      lcd.setCursor(0,1);
                      lcd.print("by David Bowie"); 
                      delay(2000);
                      Space_oddity();
                      startup();
                      
                    }
                  }
      }

Expectation:
My code will run the code and when it gets to the if(x==1) part, I should be able to run the code of the corresponding button.

Reality:
My code runs and when I get to the if(x==1) part and I push a button, the whole thing loops back to the start.

I have a suspicion it has to do with the top/first if statement, like when i get to the if(x==1) part and then i press a button, it executes the top again, but I have no idea how to fix it and I need ideas. Thank you

What does the variable x do? I wouldn't have to ask if you had given it a descriptive name.

Since much of your code is missing I have to assume that 'x' is a global and either automatically or explicitly initialized to zero. If you are not ALREADY holding down a button when the LCD displays "by pressing button 1,2,or 3" the (x==1) will complete very quickly as there is nothing to do. Once x==2 on the second path it won't even bother looking for button presses except to display the instructions again.

void loop() {
  // BUTTONS
  if (digitalRead(14) == 1 || digitalRead(15) == 1 || digitalRead(16) == 1)
  {
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("No Serial Monitor?");
    delay(1400);
    lcd.setCursor(0, 1);
    lcd.print("No problem!");
    delay(1500);
    clearLCD();
    delay(400);
    lcd.setCursor(0, 0);
    lcd.print("Use the buttons!");
    delay(2000);
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("Press button 1");
    lcd.setCursor(0, 1);
    lcd.print("for");
    delay(1500);
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("Say Something");
    lcd.setCursor(0, 1);
    lcd.print("Great Big World");
    delay(2000);
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("Press button 2");
    lcd.setCursor(0, 1);
    lcd.print("for");
    delay(1500);
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("Lazarus");
    lcd.setCursor(0, 1);
    lcd.print("by David Bowie");
    delay(2000);
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("Press button 3");
    lcd.setCursor(0, 1);
    lcd.print("for");
    delay(1500);
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("Space Oddity");
    lcd.setCursor(0, 1);
    lcd.print("by David Bowie");
    delay(2000);
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("Now you can");
    lcd.setCursor(0, 1);
    lcd.print("choose a song");
    delay(1500);
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("by pressing");
    lcd.setCursor(0, 1);
    lcd.print("button 1,2,or 3");
    
    x++;
    
    if (x == 1)
    {
      if (digitalRead(16) == 1)
      {
        clearLCD();
        lcd.setCursor(0, 0);
        lcd.print("You have chosen:");
        delay(1500);
        clearLCD();
        lcd.setCursor(0, 0);
        lcd.print("Say Something");
        lcd.setCursor(0, 1);
        lcd.print("Great big world");
        delay(2000);
        //NJ MUSIC VOID
        startup2();
      }

      if (digitalRead(15) == 1)
      {
        clearLCD();
        lcd.setCursor(0, 0);
        lcd.print("You have chosen:");
        delay(1500);
        clearLCD();
        lcd.setCursor(0, 0);
        lcd.print("Lazarus"); //
        lcd.setCursor(0, 1);
        lcd.print("by David Bowie");
        delay(2000);
        //Echo's music void
        startup2();
      }

      if (digitalRead(14) == 1)
      {
        clearLCD();
        lcd.setCursor(0, 0);
        lcd.print("You have chosen:");
        delay(1500);
        clearLCD();
        lcd.setCursor(0, 0);
        lcd.print("Space Oddity");
        lcd.setCursor(0, 1);
        lcd.print("by David Bowie");
        delay(2000);
        Space_oddity();
        startup();
      }
    }
  }
}

If you want the instructions to show once at startup and after each song has finished playing:

void setup() {

 .
 .
 .
   showInstructions();
}

void showInstructions() {
  clearLCD();
  lcd.setCursor(0, 0);
  lcd.print("No Serial Monitor?");
  delay(1400);
  lcd.setCursor(0, 1);
  lcd.print("No problem!");
  delay(1500);
  clearLCD();
  delay(400);
  lcd.setCursor(0, 0);
  lcd.print("Use the buttons!");
  delay(2000);
  clearLCD();
  lcd.setCursor(0, 0);
  lcd.print("Press button 1");
  lcd.setCursor(0, 1);
  lcd.print("for");
  delay(1500);
  clearLCD();
  lcd.setCursor(0, 0);
  lcd.print("Say Something");
  lcd.setCursor(0, 1);
  lcd.print("Great Big World");
  delay(2000);
  clearLCD();
  lcd.setCursor(0, 0);
  lcd.print("Press button 2");
  lcd.setCursor(0, 1);
  lcd.print("for");
  delay(1500);
  clearLCD();
  lcd.setCursor(0, 0);
  lcd.print("Lazarus");
  lcd.setCursor(0, 1);
  lcd.print("by David Bowie");
  delay(2000);
  clearLCD();
  lcd.setCursor(0, 0);
  lcd.print("Press button 3");
  lcd.setCursor(0, 1);
  lcd.print("for");
  delay(1500);
  clearLCD();
  lcd.setCursor(0, 0);
  lcd.print("Space Oddity");
  lcd.setCursor(0, 1);
  lcd.print("by David Bowie");
  delay(2000);
  clearLCD();
  lcd.setCursor(0, 0);
  lcd.print("Now you can");
  lcd.setCursor(0, 1);
  lcd.print("choose a song");
  delay(1500);
  clearLCD();
  lcd.setCursor(0, 0);
  lcd.print("by pressing");
  lcd.setCursor(0, 1);
  lcd.print("button 1,2,or 3");
}


void loop() {
  boolean B1 = digitalRead(14);
  boolean B2 = digitalRead(15);
  boolean B3 = digitalRead(16);

  if (B1)
  {
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("You have chosen:");
    delay(1500);
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("Say Something");
    lcd.setCursor(0, 1);
    lcd.print("Great big world");
    delay(2000);
    //NJ MUSIC VOID
    showInstructions();
  }

  if (B2)
  {
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("You have chosen:");
    delay(1500);
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("Lazarus"); //
    lcd.setCursor(0, 1);
    lcd.print("by David Bowie");
    delay(2000);
    //Echo's music void
    showInstructions();
  }

  if (B3)
  {
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("You have chosen:");
    delay(1500);
    clearLCD();
    lcd.setCursor(0, 0);
    lcd.print("Space Oddity");
    lcd.setCursor(0, 1);
    lcd.print("by David Bowie");
    delay(2000);
    Space_oddity();
    showInstructions();
  }
}

X is just a random variable i used so that the statement wont loop over and over again while waiting for the button. But now you say it would just skip the x==1 statement and make x=2, it makes sense. But now I have no idea how to fix it. Any ideas how I could only leave if statements in if(x==1) to work without using x?

Okay, thank you for the great help! I realized that the solution won’t work, or atleast i don’t know how to make it work. Sorry for being unproffesional, I thought the only showing the part of the code I suspected is at fault would be enough.
Here is my full code:

int Recieved;
String recievedS;
 #include<LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);

 void startup()
 {
  lcd.setCursor(0,0);
  lcd.print("I.T PROJECT!! :)");
   digitalWrite(6,1);
   delay(200);
   digitalWrite(7,1);
   delay(200);
   digitalWrite(13,1);
   delay(200);
   digitalWrite(17,1);
   delay(200);
   digitalWrite(18,1);
   delay(200);
   digitalWrite(19,1);
   delay(500);
   digitalWrite(6,0);
   digitalWrite(7,0);
   digitalWrite(13,0);
   digitalWrite(17,0);
   digitalWrite(18,0);
   digitalWrite(19,0);
   lcd.setCursor(0,0);
   lcd.print("                 ");
   lcd.setCursor(0,0);
   lcd.print("Use Serial");
   lcd.setCursor(0,1);
   lcd.print("or any button!");
   Serial.println("Enter anything so we know you can use your serial monitor");
 }
 
 void clearSerial()
 {
  int cs;
  for(cs=0;cs<=99;cs++)
  {
    Serial.println("");
  }
 }
 void clearLCD()
 {
   lcd.setCursor(0,0);
   lcd.print("                    ");
   lcd.setCursor(0,1);
   lcd.print("                   ");
 } 

 void buttons(){
 if(digitalRead(14) == 1 || digitalRead(15) == 1 || digitalRead(16) == 1)
      {
        
    
        
        clearLCD();
        lcd.setCursor(0,0);
        lcd.print("No Serial Monitor?");
        delay(1400);
        lcd.setCursor(0,1);
        lcd.print("No problem!");
        delay(1500);
        clearLCD();
        delay(400);
        lcd.setCursor(0,0);
        lcd.print("Use the buttons!");
                   delay(2000);
                   clearLCD();
                   lcd.setCursor(0,0);
                   lcd.print("Press button 1");
                   lcd.setCursor(0,1);
                   lcd.print("for");
                   delay(1500);
                   clearLCD();
                   lcd.setCursor(0,0);
                   lcd.print("Say Something");   
                   lcd.setCursor(0,1);
                   lcd.print("Great Big World");  
                              delay(2000);
                              clearLCD();
                              lcd.setCursor(0,0);
                              lcd.print("Press button 2");
                              lcd.setCursor(0,1);
                              lcd.print("for");
                              delay(1500);
                              clearLCD();
                              lcd.setCursor(0,0);
                              lcd.print("Lazarus");  
                              lcd.setCursor(0,1);
                              lcd.print("by David Bowie");   
                                         delay(2000);
                                         clearLCD();
                                         lcd.setCursor(0,0);
                                         lcd.print("Press button 3");
                                         lcd.setCursor(0,1);
                                         lcd.print("for");
                                         delay(1500);
                                         clearLCD();
                                         lcd.setCursor(0,0);
                                         lcd.print("Space Oddity");   
                                         lcd.setCursor(0,1);
                                         lcd.print("by David Bowie");  
                                         delay(2000);
        clearLCD();
        lcd.setCursor(0,0);
        lcd.print("Now you can");
        lcd.setCursor(0,1);
        lcd.print("choose a song");
        delay(1500);
        clearLCD();
        lcd.setCursor(0,0);
        lcd.print("by pressing");
        lcd.setCursor(0,1);
        lcd.print("button 1,2,or 3");
      }
 }
 void serial()
 {
   if(Serial.available() > 0)
  {
    clearSerial();
    Serial.println("Yay you have a serial monitor!(makes my job easier");
    delay(1000);
    Serial.println("Choose a song:");
    Serial.println("1. Say Something");
    Serial.println("  by A Great Big World");
    delay(1000);
    Serial.println("2. Lazarus(2016)");
    Serial.println("  by David Bowie");
    delay(1000);
    Serial.println("3. Space Oddity(2016)");
    Serial.println("  by David Bowie");
    delay(1000);
    Serial.println("");
    Serial.println("");
    Serial.println("You can choose a song by typing the number or the song title");
  }
 }
 //===================================================================================

void setup() {
  Serial.begin(9600);
  lcd.begin(16,2);
  //LEDs
  pinMode(6,1);
  pinMode(7,1);
  pinMode(13,1);
  pinMode(17,1);
  pinMode(18,1);
  pinMode(19,1);
  //Buttons
  pinMode(14,0);
  pinMode(15,0);
  pinMode(16,0);
  //Speakers
  pinMode(8,1);
  pinMode(9,1);
  pinMode(10,0);
  
  startup();
  buttons();
  serial();
  
}

void loop() {
                   
                    if(digitalRead(16) == 1)
                    {
                      clearLCD();
                      lcd.setCursor(0,0);
                      lcd.print("You have chosen:");
                      delay(1500);
                      clearLCD();
                      lcd.setCursor(0,0);
                      lcd.print("Say Something");
                      lcd.setCursor(0,1);
                      lcd.print("Great big world"); 
                      delay(2000);
                     
                     
                    }
                    
                    if(digitalRead(15) == 1)
                    {
                      clearLCD();
                      lcd.setCursor(0,0);
                      lcd.print("You have chosen:");
                      delay(1500);
                      clearLCD();
                      lcd.setCursor(0,0);
                      lcd.print("Lazarus"); // 
                      lcd.setCursor(0,1);
                      lcd.print("by David Bowie"); 
                      delay(2000);
                      //Echo's music void
                     
                    }
                    
                    if(digitalRead(14) == 1)
                    {
                      clearLCD();
                      lcd.setCursor(0,0);
                      lcd.print("You have chosen:");
                      delay(1500);
                      clearLCD();
                      lcd.setCursor(0,0);
                      lcd.print("Space Oddity"); 
                      lcd.setCursor(0,1);
                      lcd.print("by David Bowie"); 
                      delay(2000);
                      Space_oddity();
                      
                    }
                  
      
      
 
    
    while(Serial.available() == 0) {}
    Recieved=Serial.read();
    recievedS=Serial.readString();
    if(Recieved == '1' || recievedS == "something" || recievedS == "Something")
    {
      clearSerial();
      Serial.println("You have chosen:");
      delay(800);
      Serial.println("Say something");
      Serial.println("by A Great Big World");
      delay(2000);
      Serial.println("============================================================");
     // NJ_Music();
    }
    if(Recieved == '2' || recievedS == "Lazarus" || recievedS == "lazarus")
    {
      clearSerial();
      Serial.println("You have chosen:");
      delay(800);
      Serial.println("Lazarus");
      Serial.println("By David Bowie");
      delay(2000);
      Serial.println("============================================================");
      //Echo_Music();
    }
    if(Recieved == '3' || recievedS == "Space oddity" || recievedS == "Space Oddity" || recievedS == "space oddity" || recievedS == "space Oddity")
    {
      clearSerial();
      Serial.println("You have chosen:");
      delay(800);
      Serial.println("Space Oddity");
      Serial.println("By David Bowie");
      delay(2000);
      Serial.println("============================================================");
      Space_oddity();
    }
  }

Expectation of my code:
It would run the startup, then i could either press a button or input something into the serial monitor. When I press a button, the instructions of the button would run and I can now proceed to the void loop, press a button, and the code would work normally. Similarly, If i input something into the serial, it would display instructions for the serial and allow me to use the serial monitor code in the void loop.

Reality:
It runs the startup, shows the instructions, and then I can't do anything.

Sorry for being so unprofessional, lack of experience and such. I don't know how to fix it. Thank you!

CaptainCorndoge:
X is just a random variable i used so that the statement wont loop over and over again while waiting for the button. But now you say it would just skip the x==1 statement and make x=2, it makes sense. But now I have no idea how to fix it. Any ideas how I could only leave if statements in if(x==1) to work without using x?

Ask yourself what you are trying to represent. Is it a logical state, like something is the case, or not the case? If so, then use a boolean variable and give it the name of the entity that it represents. Then you assign and test with "true" and "false", for example:

boolean waitingForButtonPress = true;
...
if (waitingForButtonPress) {...

CaptainCorndoge:
…I thought the only showing the part of the code I suspected is at fault would be enough. …

Two things:

  1. The cause of the problem may be far removed from the code that is misbehaving.

  2. It appears you are using a garden variety 16x2 LCD. If so…

clearLCD();
lcd.setCursor(0,0);
//
//  These two statements, repeated throughout, can be replaced by
//
lcd.clear();