Push button Problem to loop, stop and start

I am trying to program a push button so that the lullaby should play once a button is pressed, and loop until the same button is pressed. Hence I have a problem to code it. Thanks in advance

// notes and frequencies used
//note frequency
// c 261 Hz
// d 294 Hz
// e 329 Hz
// f 349 Hz
// g 392 Hz
// a 440 Hz
// b 493 Hz
#include <LiquidCrystal.h>

int notes[] = {261,392,440,349,294,329,493}; //declaring the notes Frequencies

LiquidCrystal lcd( 12, 11, 5, 4, 3, 2);

int speaker = 9;
const int pushButton = 7;
int led = 8;

int switchState = 0;
int prevSwitchState = 0;

void setup() {
Serial.begin(9600);
pinMode(pushButton, INPUT);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("Press to play");
lcd.setCursor(0,1);
lcd.print("Baby Lullaby");
}

void loop() {
switchState = digitalRead(pushButton);
if( switchState != prevSwitchState){
while (switchState == LOW){

lcd.clear();

noTone(speaker);
delay(10);

lcd.setCursor(4,0);
lcd.print("Twinkle");

tone(speaker, notes[0]); //verse 1: ccggaag
delay(200);
noTone(speaker);
delay(50);
tone(speaker, notes[0]);
delay(200);

lcd.clear();
delay(10);

lcd.setCursor(4,0);
lcd.print("Twinkle");

tone(speaker, notes[1]);
delay(500);
noTone(8);
delay(50);
tone(speaker, notes[1]);
delay(300);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("Little");

tone(speaker, notes[2]);
delay(350);
noTone(speaker);
delay(50);
tone(speaker, notes[2]);
delay(350);

lcd.clear();

lcd.setCursor(6,0);
lcd.print("Star");

tone(speaker, notes[1]);
delay(1000);

lcd.clear();

lcd.setCursor(6,0);
lcd.print("How");

tone(speaker, notes[3]); //verse 2: ffeeddc
delay(400);
noTone(speaker);
delay(50);

lcd.clear();

lcd.setCursor(7,0);
lcd.print("I");

tone(speaker, notes[3]);
delay(400);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("Wonder");

tone(speaker, notes[5]);
delay(500);
noTone(speaker);
delay(50);
tone(speaker, notes[5]);
delay(500);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("What");

tone(speaker, notes[4]);
delay(500);
noTone(speaker);
delay(20);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("You");

tone(speaker, notes[4]);
delay(500);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("Are");

tone(speaker, notes[0]);
delay(1000);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("Up");

tone(speaker, notes[1]); //verse 3: ggffeed
delay(600);
noTone(speaker);
delay(20);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("Above");

tone(speaker, notes[1]);
delay(500);
tone(speaker, notes[3]);
delay(400);
noTone(speaker);
delay(50);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("The");

tone(speaker, notes[3]);
delay(400);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("World");

tone(speaker, notes[5]);
delay(400);
noTone(speaker);
delay(50);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("So");

tone(speaker, notes[5]);
delay(400);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("High");

tone(speaker, notes[4]);
delay(500);
noTone(speaker);
delay(30);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("Like");

tone(speaker, notes[1]); //verse 4: ggffeed
delay(650);
noTone(speaker);
delay(20);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("A");

tone(speaker, notes[1]);
delay(300);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("Diamond");

tone(speaker, notes[3]);
delay(400);
noTone(speaker);
delay(50);
tone(speaker, notes[3]);
delay(400);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("In");

tone(speaker, notes[5]);
delay(400);
noTone(speaker);
delay(50);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("The");

tone(speaker, notes[5]);
delay(400);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("Sky");

tone(speaker, notes[4]);
delay(500);
noTone(speaker);
delay(30);

lcd.clear();

lcd.setCursor(4,0);
lcd.print("Twinkle");

tone(speaker, notes[0]); //verse 5: ccggag
delay(330);
noTone(speaker);
delay(50);
tone(speaker, notes[0]);
delay(330);

lcd.clear();
delay(10);

lcd.setCursor(4,0);
lcd.print("Twinkle");

tone(speaker, notes[1]);
delay(500);
noTone(speaker);
delay(50);
tone(speaker, notes[1]);
delay(500);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("Little");

tone(speaker, notes[2]);
delay(500);
noTone(speaker);
delay(50);
tone(speaker, notes[2]);
delay(500);

lcd.clear();

lcd.setCursor(6,0);
lcd.print("Star");

tone(speaker, notes[1]);
delay(1000);

lcd.clear();

lcd.setCursor(6,0);
lcd.print("How");

tone(speaker, notes[3]); //verse 6: ffeedde
delay(400);
noTone(speaker);
delay(50);

lcd.clear();

lcd.setCursor(7,0);
lcd.print("I");

tone(speaker, notes[3]);
delay(400);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("Wonder");

tone(speaker, notes[5]);
delay(500);
noTone(speaker);
delay(50);
tone(speaker, notes[5]);
delay(500);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("What");

tone(speaker, notes[4]);
delay(500);
noTone(speaker);
delay(20);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("You");

tone(speaker, notes[4]);
delay(500);

lcd.clear();

lcd.setCursor(5,0);
lcd.print("Are");

tone(speaker, notes[0]);
delay(1000);

lcd.clear();

}
}

prevSwitchState = switchState;
}

how does the value of switchState ever change from LOW while repeated executing the while loop?

I have no idea this is my first project so i'm quite new to this

What does it do now if it's not what you want it to do? How is the button wired?

Steve

It starts when i press the button and keeps on looping for ever, attached is a picture of the circuit.

You don't do anything which can change switchState (like maybe read the switch again) inside the while loop so it will never end (which is what gcjr was trying to tell you).

And since you want the same action to both start the loop and then stop it you should check when the switch BECOMES pressed not just that it IS pressed. The StateChangeDetection exemple in the IDE will help you with that.

Steve