Problema switch case con servos

Buenas, he hecho un programa para controlar unos servos. Es para un proyecto de un tanque, un servo mueve el cañón verticalmente y el otro gira la torreta. La app que uso para mandar datos por serial manda números como: 5,10,12,15,20(cañón) y 11,45,135,179(torreta).
El caso es que quiero que cuando mande los números de torreta únicamente se mueva esta y lo mismo con el cañón. Lo he hecho con un switch case convirtiendo los números a tipo char.
Mande lo que le mande no hace nada. Está conectado con una fuente de alimentación para evitar problemas de falta de corriente. Por separado funcionan bien, asi que probablemente el fallo sea mío de programación...
Si hay alguna alternativa mejor a usar switch case comentármelo por favor, muchas gracias.

#include <Servo.h>
 
//Definimos una constante para el pin del servo:
// el 9 tiene que ir al del cañon
#define PIN_SERVO 9
#define PIN_SERVO2 10
int valor;
 
//Creamos un objeto de clase 'Servo':
Servo servo1; //cañon
Servo servo2; //torreta

 
 
void setup() {
   
  //Vinculamos el servo1 al pin definido por PIN_SERVO:
  servo1.attach(PIN_SERVO);
  servo2.attach(PIN_SERVO2);
  
 
  //Inicializamos el serial a 9600 baudios:
  Serial.begin(9600);

  servo1.write(10);
}

 
void loop() {
 
  //Comprobamos si llega algún mensaje por serial:
  if(Serial.available() > 0)
  {
    //Leemos el entero que llega por Serial:
    String mensaje = Serial.readString();
 
    //Eliminamos los carácteres \r \n \0, etc (finales de línea):
    mensaje.trim();
 
    //Convertimos el mensaje a entero:
    int posicion = mensaje.toInt();
     
    //Movemos el servo:
    Serial.println(Serial.available());
    valor=Serial.available();
    switch (valor){
    case '0':   
    servo1.write(posicion);
    delay(100);
    break;
    case'5':
    servo1.write(posicion);
    delay(100);
    break;
    case '8':   
    servo1.write(posicion);
    delay(100);
    break;
    case '♀':   
    servo1.write(posicion);
    delay(100);
    break;
    case '☼':   
    servo1.write(posicion);
    delay(100);
    break;
    case '¶':   
    servo1.write(posicion);
    delay(100);
    break;
    }
    switch (valor){
    case '1':   
    servo2.write(posicion);
    delay(100);
    break;
    case '-':
    servo2.write(posicion);
    delay(100);
    break;
    case '6':   
    servo2.write(posicion);
    delay(100);
    break;
    case 'ç':   
    servo2.write(posicion);
    delay(100);
    break;
    case '|':   
    servo2.write(posicion);
    delay(100);
    break;
    }
    //Escribimos la nueva posicion del servo:
    Serial.print("Posicion: ");
    Serial.print(posicion);
    Serial.print("\n");
 
  }
 
}

Creo que has cometido un error.

No se que valores pretendes obtener aquí

Serial.println(Serial.available());
valor=Serial.available();

pero ambas veces solo obtendrás el número de caracteres disponibles en el buffer de lectura del puerto serie.

Me he confundido y debería sustituir el Serial.available por Serial.read no?

Eso es lo que te sugiere @gatul.
Se usa Serial.read() como bien has indicado.

Pero si tienes dudas, solo usa Google y pones : Arduino Serial.read() y encontrarás ejemplos que responden tu pregunta o buscas Arduino Serial.available() y lo mismo

Veo que envias dos mensajes, una posición y un comando.
Deberías hacer algo como enviar el comando,posicion y detectar la , para poder separar lo que buscas.
En tu código estas esperando primero la posicion y luego un comando pero no es la manera correcta de hacerlo.
Envia por el Monitor Serie todo un comando que sea por ejemplo: 0,35 lo que indicaría
valor = 0
posicion = 35
separados por coma
Entonces lees el String eliminando r y n como bien has hecho.
Separas buscando la , te quedas con lo que esta antes de la , por un lado y lo que esta despues.
Y tienes todo!!!