Arduino Mega control de servomotores

Hola, buenos días. Soy estudiante y necesito presentar un proyecto el cual lleva un brazo robótico controlado por servomotores, adentrándome en el tema comencé a manipular lo básico y se presentaron ciertos inconvenientes.
El control del servomotor lo realizo mediante Bluetooth por una app,

#include <servo.h>

base servo;
char dato;

void setup{

base.attach(5);
Serial.begin(9600);
}

void loop{

dato=Serial.read();
switch(dato){
case 'B':
    {
      while(Serial.read()!='x'){
      base.write(0);
          break;   
    }
 }
  case 'C':
    {
      while(Serial.read()!='x')
      {
          base.write(175);
          break;   
    }
  }

El problema esta que el servomotor se posiciona unicamente en la posicion de 0° sin poder lograr ponerlo a 175°
¿Alguien me puede explicar por que?

Ten cuidado. El código "no está muy fino" que digamos. Los break que tienes puestos afectan a cada uno de los while que los contienen. Creo que se te han "colado" y sin querer los has puesto donde no van. Ya que código del switch, tal como lo tienes ahora, es equivalente a:

  switch(dato){
    case 'B':
      {
        if (Serial.read()!='x'){
          base.write(0);
        }
      }
    case 'C':
      {
        if (Serial.read()!='x')
        {
          base.write(175);
        }
      }
  }

Fíjate que he cambiado los "while" por "if" y he quitado los "break". Porque los break lo que están haciendo es "salir" del while. Por otro lado: el switch "trabaja" de tal manera que se ejecuta el código a partir del "valor encontrado" (el case que coincida) hasta que llega al final del bloque del switch (no bloque del case) o se encuentra un break en "su nivel". Los break que existan dentro de otra estructura "switch", "while", "do while" o "for" de dentro del switch no les afecta, ya que los break dentro de alguna de estas estructuras anidadas afectan a "la última". Y no, no sirven de nada las llaves que has puesto justo después de los case.

Así que lo que creo que te está pasando es que cuando llega una 'B' se ejecuta el "base.write(0);" y acto seguido el "base.write(175);", quedando como "efectivo" este último. Mientras que cuando llega una 'C' se ejecuta únicamente el "base.write(175);".

Prueba a poner los break "fuera" del los while. Aunque sinceramente, no entiendo la finalidad de los while. Prueba poner el switch así:

  switch(dato){
    case 'B':
      {
        while (Serial.read()!='x'){
          base.write(0);
        }
        break;
      }
    case 'C':
      {
        while (Serial.read()!='x') {
        {
          base.write(175);
        }
        break;
      }
  }

Como he comentado, hay llaves que sobran, que no sirven para nada en este caso y se podría dejar así:

  switch(dato){
    case 'B':
        while (Serial.read()!='x'){
          base.write(0);
        }
        break;
    case 'C':
        while (Serial.read()!='x') {
        {
          base.write(175);
        }
        break;
  }

Aún así, sigo sin entender por qué de los while. Lo único que se me ocurre es que los terminases poniendo haciendo "pruebas desesperadas" (que todos las hemos hecho alguna que otra vez cuando no damos con la tecla, por si suena la flauta). Yo los quitaría y dejaría el código tal que así:

  switch(dato){
    case 'B':
        base.write(0);
        break;
    case 'C':
        base.write(175);
        break;
  }

Te recomiendo que repases cómo funciona el switch (que es un poco más complejo de lo que parece) y de paso el uso del break en los bucles. Yo haría algo mejor para este caso, usar el if / else if. Que no sólo es más fácil de manejar, sino que al parecer gasta menos memoria que el case, y en esto micros la memoria es un bien muy escaso.

Es lo que creo, y no descarto estar equivocado.