IR issue with being able to break a while

hey guys, first time coder. currently having a issue with trying to loop the PLAY section of my code and be able to stop it and use another function via IR remote. i have currently left the While code in here. i have spent about 20 hours trying to figure out where im going wrong. at the point where i feel im writing the code complete wrong and need a different angle. any input will be helpful thanks!

#include <IRremote.h>
#include <Servo.h>
 
int pos = 0;
int RECV_PIN = 4;
IRrecv irrecv(RECV_PIN);
decode_results results;
Servo myservo;
Servo myservo2; 

#define ONE 0xFD08F7
#define TWO 0xFD8877
#define THREE 0xFD48B7
#define FOUR 0xFD28D7
#define FIVE 0xFDA857
#define SIX 0xFD6897
#define SEVEN 0xFD18E7
#define EIGHT 0xFD9867
#define HOLD 0xFFFFFFFF
#define LEFT 0xFF22DD
#define RIGHT 0xFF02FD
#define PLAY 0xFFC23D
#define EQ 0xFF906F


void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  myservo.attach(7); 
  myservo2.attach(8);
 
}

void loop()
{
  if (irrecv.decode(&results))
  {
   while (results.value == PLAY)
   
      Serial.println("PLAY");
     
    
      for(pos = 50; pos <= 100; pos += 1)
      { 
      myservo.write(pos); 
      myservo2.write(190-pos);    
      delay(20);  
      }
      for (pos = 100; pos >= 50; pos -= 1) {
      myservo.write(pos);
      myservo2.write(190-pos);
      delay(20);  }                                 
  

   {
   
    if (results.value == RIGHT)
    {
      Serial.println("RIGHT");
      for (pos = 50; pos <= 100; pos += 1) {
    // in steps of 1 degree
    myservo.write(pos); 
    myservo2.write(190-pos);    
    delay(20);  
    
    }}
    else if (results.value == LEFT)
    {
      Serial.println("LEFT");
   for (pos = 100; pos >= 50; pos -= 1) {
    myservo.write(pos);
    myservo2.write(190-pos);
    delay(20); 
   
     }}

    
    else {
      Serial.println("IR RECV Code Value Not Defined or Button was Held Down");
    }

    Serial.print("IR RECV Code = 0x ");
    Serial.println(results.value, HEX);
    irrecv.resume();
  }
}
   }
  1. Do a tools → auto format on your code in the IDE. You’ll see that the structure is different to that which is implied by your own indentation.
  2. A “while” statement in the loop is not usually a good idea, especially in this case. It will get stuck because results.value will never change.
   while (results.value == PLAY)
   
      Serial.println("PLAY");

Why would you use a while loop to do one thing? EVERY while, if, and do/while statement should have curly braces following it, to make it crystal clear that you KNOW that it is only executing one statement, and to make it crystal clear to you that the while loop can never end.

Then, you can write the code properly.