problema con una condición dentro de otra condición (if dentro de otro if)

hola este es mi primer post y espero ser mas un aporte que una molestia jajaja
tengo un problema, les cuento, estoy trabajando en un proyecto para conectar distintos sensores a una plana Arduino uno, y extraer sus datos mediante un programa en java, la cosa es que cada sensor sera tratado de forma diferente, para lo cual necesito primero elegir elegir el programa en Arduino que voy a necesitar y luego ejecutarlo mediante otra condición, el problema es que no logro hacer funcionar una condición dentro de otra. les dejo el esqueleto del programa con su explicación

int mensaje=0;
int val=0;
void setup() {
 Serial.begin(9600);
 Serial.println("elige una opción del a, b, c o d");
}

void loop() {
  
  if (Serial.available()>0){
    
    mensaje =Serial.read();
    if (mensaje=='a'){  //opción a pide activarla presionando 1
     Serial.println("presiona (1) para continuar");  
     val =Serial.read();
     if (val=='1') //el problema es que al presionar 1 en la consola no me escribe el mensaje de abajo
     //intente este metodo pero tampoco funciona
     //if (mensaje == 'a' and val == '1')  
     {
     Serial.println("partimos con el programa de opción 1");
     }
          
    }
    if (mensaje=='b'){
      Serial.println("elegiste la opción b");
    }
    if (mensaje=='c'){
      Serial.println("elegiste la opción c");
    }
    if (mensaje=='d'){
      Serial.println("elegiste la opción d");
    }

  }
  
}

la idea es hacer lo mismo con b, c y d que tengo en a... alguna sugerencia como hacerlo funcionar?

pd: ocupe "case" pero tampoco me funciono

El tipo de dato a recibir, es byte o char.

Dices que tampoco pudiste con switch, entonces... ¿qué te parece esto?

void loop() {
  
  if (Serial.available()){
    
    switch (Serial.read()) { // Lee el primer caracter
      case 'a':
      Serial.println(F("presiona (1) para continuar"));
      while (!Serial.available()); // Espera hasta que llegue algo

      if (Serial.read() == '1') { // Si el caracter consecuente es '1'
        Serial.println(F("partimos con el programa de opción 1"));
      } // Si aquí debería ir otro switch, se puede anidar sin problemas
      break; // Nunca olvidemos este "terminador" del case

      case 'b':
      Serial.println(F("elegiste la opción b"));
      break;

      case 'c':
      Serial.println(F("elegiste la opción c"));
      break;

      case 'd':
      Serial.println(F("elegiste la opción d"));
      break;
    }
  }
}

PD: si el monitor serie no imprime correctamente las letras tildadas, puede que haya que cambiarlas por una que posiblemente no se parezca en nada a lo que debería aparecer.
Son ligeras incompatibilidades entre cómo codifica el compilador y cómo decodifica el monitor serie, los caracteres del ASCII extendido (letras tildadas en este caso).

gracias... si luego de postear busque en todas las preguntas (operación peineta) me di cuenta que podia usar un "while"...

gracias maestro!!!!