Problema al leer posición dentro de un bucle

Buenas, tengo un programa con varios motores paso a paso, la cuestión es que en esta parte del programa, cuando llega a los pasos indicados el motor se para, que es lo que yo quiero:

  if (BTval=='e'){
    while (BTval != '0' &&  cont4<500)
    {
       digitalWrite(dirPin3,LOW);
       digitalWrite(stepPin3,HIGH);
       BTval=Serial.read();
       delayMicroseconds(vel3); 
       digitalWrite(stepPin3,LOW);
       BTval=Serial.read();
       delayMicroseconds(vel3); 
       cont4++;       
       fc4= digitalRead(final4);

    }
  }

Ahora intento hacer lo mismo con otro motor controlado por un MPU Gy521, quiero que cuando la posición x sea superior o igual a 16 se pare. Cuando es mayor de 16 no me deja actuar pero si es menor pasa de 16 y no se para. ¿Como puedo hacer para que lea esa posición mientras pulso ‘g’?

  if (BTval=='g') {
     while (BTval != '0' && accel_ang_x <= 16.00){
     mpu.getAcceleration(&ax, &ay, &az);                                                                          // Leer las aceleraciones 
 
   //Calcular los angulos de inclinacion
   float accel_ang_x = atan(ax / sqrt(pow(ay, 2) + pow(az, 2)))*(180.0 / 3.14);
   float accel_ang_y = atan(ay / sqrt(pow(ax, 2) + pow(az, 2)))*(180.0 / 3.14);
  

   
       digitalWrite(dirPin4,LOW);
       digitalWrite(dirPin5,LOW);
       digitalWrite(stepPin4,HIGH);
       digitalWrite(stepPin5,HIGH);
       BTval=Serial.read();
       delayMicroseconds(vel4); 
       digitalWrite(stepPin4,LOW);
       digitalWrite(stepPin5,LOW);
       BTval=Serial.read();
       delayMicroseconds(vel4); 
       BTval=Serial.read();
       accel_ang_x=Wire.read();
       accel_ang_x=Serial.read();
       accel_ang_y=Wire.read();
       accel_ang_y=Serial.read();
    }
   
  }

No se lee así el puerto serie.

Esta documentado por todos lados como es la manera correcta, preguntando si hay o no datos en el puerto serie y dejarlos

debes consultar si hay datos de este modo

if (Serial.available() > 0) {
   BTval=Serial.read();
}

Asi vas leyendo de a caracter, de modo que si recibes mas de uno, debes integrarlos o concatenarlos para discriminar lo que estas recibiendo.

En tu caso veo que esperas 'e', perfecto
luego hay otro caso donde recibes 'g' y terminas con '0'

entonces en tu código del puerto serie haces asi

if (Serial.available() > 0) {
   BTval=Serial.read();
   switch(BTval) {
      case 'e': // tarea1
                 break;
      case 'g': // tarea2
                 break;
      case '0': // fin de accion
                   // acciona un flag por ejemplo
                   break;
   }
}