Problema switch

Hola,
He estado haciendo un proyecto semestral en arduino, tenía que hacer algo en lenguaje C y como arduino es similar mi profesora me permitio desarrollarlo en ese entorno. El codigo que hice es el siguiente:

#include <Servo.h>


int op, NUM, GAR, i;
Servo servo;
void setup() {
  Serial.begin(9600);
  pinMode(8,OUTPUT);//El 7 va a controlar el LED
  pinMode(12,OUTPUT);//El 12 va a controlar el LED del garage
 servo.attach(9);// El 9 va a controlar los grados del servomotor
    Serial.println("Menu");
  Serial.println("1. Encendido y apagado de las luces");
  Serial.println("2. Abrir el garage");
  Serial.println("3. Controlar acensores");
}

void loop() {
  
  op= Serial.read();
  
  switch(op){
    case 1:
    Serial.println("Ha elegido el control de luces, presione 1 para encender y 0 para apagar");
    NUM=Serial.read();
    if(NUM==1){
    Serial.println("Ha encendido las luces");
    digitalWrite(8,HIGH);}
    else if(NUM==0){
      Serial.println("Ha apagado las luces");
      digitalWrite(8,LOW);}
      break;
    case 2:
    Serial.println("Ha elegido controlar el garage, 1 para abrirlo y 0 para cerrarlo");
    GAR=Serial.read();
    if(GAR==1){
      Serial.println("Ha elegido abrir el garage");
      for(i=0; i<=6 ; i++){
        digitalWrite(12,HIGH);
        delay(1000);
        digitalWrite(12,LOW);
      }
      servo.write(90);}
      else if(GAR==0){
        Serial.println("Ha cerrado el Garage");
        servo.write(0); break;
     
        }
      }
  
  }

El programa se compila bien y al menos el menu es mostrado en el monitor serial. El problema principal es al elegir los case, al elegir el case 1 no se ejecutan los if.
Probe quitando los if y dejando solo el digitalwrite, el led prende perfectamente, en el case 2 probe eliminando el servo y el if, dejando solo el contador, para este caso el led parpadea como debería.

Es este problema solucionable, es decir, ¿Puedo ejecutar ese if dentro de un switch? O acaso lo que estoy haciendo es algo tonto.

El tema es que es mi primer proyecto arduino y me siento algo confundido por tanta información que hay en internet, espero que me puedan ayudar.

Gracias!

Hola! buen dia, veamos
primero:

int op, NUM, GAR, i;

cuando recibes datos por el puerto serial estos llegan en ascii, byte por byte, es decir si tu escribes un 1 en realidad el puerto lee 49, por eso, aunque pueda funcionar con int, en tu código es mejor usar char en lugar de int.
Segundo: en el loop tienes op=Serial.read(), debes tener en cuenta que cada ciclo la variable op cambiará, ésto quiere decir que cuando mandes un dato por el puerto serial éste cambiará tan rápido que no alcanzaras a notar que entró y se fue, por lo tanto tienes que cambiar la variable op solo cuando haya un dato en el puerto, es decir con if (Serial.available()) op=Serial.read();
3°.-

¿Puedo ejecutar ese if dentro de un switch? O acaso lo que estoy haciendo es algo tonto.

Claro que puedes usar un if dentro de un switch-case, pero no en este caso, como lo estas haciendo. Tienes las variables op y NUM y GAR que leen el puerto serial eso no es correcto, las variables NUM Y GAR salen sobrando y no sirven de nada
Los if no van a funcionar porque si tu cambias el dato del puerto serial, cambia la variable op, sale del case y por ende no se ejecuta nada de lo que está adentro.

Por tratarse de trabajo escolar , intenta hacerlo corrigiendo los errores que te mencioné, comenta tus dudas y después te pongo las modificaciones que hice a tu código

En el IDE hay una serie de ejemplos que te recomiendo pruebes en Communications, hay muchos ejemplos posibles que te enseñaran la forma apropiada de manejarte con el puerto serie leyendo datos.

Ademas tu codigo es poco legible porque no usas indentado estandar. Debes usar Auto Formato en el IDE.