consulta bucles - solucionado

Hola gente. nuevamente consultando aqui
estoy en un proyecto con ardu y ethernet
mediante una pequeña aplicacion hecha en processing, envio mediante udp los comandos en forma de String.
cuando ardu los recibe ejecuta funciones. para ello utilizo if. si recibe led1on entonces enciende led1. :sleeping:

el problema viene cuando quiero alguna fucion repetitiva hasta que le envie el comando de apagado
por ejemplo que mueva un servo de 0 a 180º y 180 a 0 repetidamente, hasta que le envie el comando off.
he intentado con while. mediante if comprueba el comando , cambia el valor de una variable "x=1" y luego while x==1 ejecutar movimientos del servo.
el tema es que no puedo salir del bucle while salvo con break. ya que el while parece que solo comprueba cambios en variables pero con sensores externos. no con el mensaje por udp etc

no lo he logrado al menos

alguna sugerencia?

este seria parte del codigo

if ((String)CadenaEntrada=="apon")
{    ap = true;
     
      while (ap == true)
      {xServo.write(xMin);
      delay(2000);
      xServo.write(xInit);
      delay(2000);
      xServo.write(xMax);
      delay(2000);
      xServo.write(xInit);
      delay(2000);
        
    }  if ((String)CadenaEntrada=="apoff") //intento salir del while con esto pero no funciona.puesto aqui ni dentro del while...
{ap = false;}
       
}

Una idea:

bool Automatico=false;
byte Posicion=0;
...

if ((String)CadenaEntrada=="apon") {Automatico=true;}
if ((String)CadenaEntrada=="apoff") {Automatico=false;}

if (Automatico)
{
switch (Posicion)
{
case 0:
xServo.write(xMin);
Posicion++;
break;
case 1:
xServo.write(xInit);
Posicion++;
break;
case 2:
xServo.write(xMax);
Posicion++;
break;
case 4:
xServo.write(xInit);
Posicion=0;
break;
}
delay(2000);
}

A mi se me ocurre que uses una interrupción por timer por ejemplo, que asegure leer los comandos a intervalos de 1mseg, al recibir el comando, incorpora una variable bool 0 o 1 p.ej: estado, que cambiará al recibir el comando y luego incorpora esta variable con un

if (estado)
break;

No se si 1 mseg es un tiempo apropiado para leer el comando por UDP, eso lo dejo a tu criterio pero por ahi va mi idea.

hola gente
gracias por responder
al final pude solucionar de una manera un poco brusca.
dividi la funcion en dos etapas. un while dentro de otro while
tambien cree una tarea, que se encara de chequear el estado del boolean o valor de la variable true false 1 o 0......
luego en la funcion que queria cortar el bucle while, ejecuta la primera etapa, una tercera tarea, luego chequea con la funcion, y si todo sigue igual pasa al siguiente while. este hace lo mismo al finalizar una etapa, chequea y sale.si el estado de la variable de control cambió entonces el while general sale.

por alguna razon de la estructura general del codigo no salia del bucle, haciendo el chequeo dentro de el mismo....
me falta entender mas sobre esto pero al menos por ahora esta solucionado.
gracias.