Activar/desactivar sensor PIR

Buenas, estoy haciendo un proyecto de domótica que consiste en controlar una casa mediante el Bluetooth del móvil, utilizando App Inventor. Tengo la placa Mega 2560 y un módulo Bluetooth HC-05. Tengo que decir que soy nuevo en esto y que muchas cosas se me pasan por alto, por lo que agradecería cualquier otra corrección del código que no esté relacionada con el problema que tengo.El caso es que de momento he podido programar las luces y los sensores LDR y de humedad sin muchos problemas, pero para programar la alarma con el sensor de movimiento PIR y un zumbador estoy teniendo un pequeño problema que no se a que es debido. Dicho problema aparece cuando quiero activar/desactivar el sensor mediante un flag. Cuando el Bluetooth manda una señal ‘M’, el flag se pone en estado True, permitiendo la lectura del sensor, y cuando la señal es ‘N’, en estado false. El caso es que el zumbador no responde, es decir, parece que el sensor no está leyendo ningún dato. He revisado todas las conexiones y la App y parece que estan bien, el problema tiene que ser del código.
Alguna ayuda?

El código es el siguiente

int led_1 = 22; // Dormitori 1
int led_2 = 23; // Dormitori 2
int led_3 = 24; // Garaig
int led_4 = 25; // Menjador
int Valor = 0;
//.....................................//
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 28 //Pin 28 
#define DHTTYPE DHT22 //Definir el sensor com un DHT22
DHT dht(DHTPIN, DHTTYPE);

//Variables per guardar la lectura del sensor DHT22
float temperatura;
float humedad;
int ventilador = 29;
int Temp=30; // Temperatura en la qual s'encen el ventilador
float Temp_2=29.6; // Temperatura en la qual s'apaga. Establim un float perquè ens interessa un valor decimal

//Variables asociades al sensor de llum
int sensor_luz = A0;
int lectura_luz = 0;
int valor_luz;

//Variables associades a l'alarma
int sensor_moviment = 30;
bool flag = false;
int alarma = 31;



void setup() {
  pinMode(led_1, OUTPUT);
  pinMode(led_2, OUTPUT);
  pinMode(led_3, OUTPUT);
  pinMode(led_4, OUTPUT);
  Serial.begin(9600);
//.....................................//
  pinMode(sensor_luz, INPUT); //definim el sensor de llum com entrada
  pinMode(ventilador, OUTPUT); //definim el ventilador com sortida
  Serial.begin(9600); //iniciem el Bluetooth
  dht.begin(); //iniciem el sensor
//....................................//
  pinMode(sensor_moviment, INPUT);
  pinMode(alarma, OUTPUT);
}

void loop() {
 if (Serial.available()>0)  // si el port serie (Bluetooth) està disponible
 {
   Valor = Serial.read(); // Llegeix la dada entrant via bluetooth
 }
 switch( Valor)
   {
    case 'A':
    digitalWrite(led_1, HIGH); // Encendre el led_1 del dormitori 1
    break;
    case 'B':
    digitalWrite(led_1, LOW); // Apagar el led_1 del dormitori 1
    break;

    case 'C':
    digitalWrite(led_2, HIGH); // Encendre el led_2 del dormitori 2
    break;
    case 'D':
    digitalWrite(led_2, LOW); // Apagar el led_2 del dormitori 2
    break;
    
    case 'E':
    digitalWrite(led_3, HIGH); // Encendre led_3 del garaig
    break;
    case 'F':
    digitalWrite(led_3, LOW); // Apaga led_3 del garaig
    break;

    case 'G':
    digitalWrite(led_4, HIGH); // Encendre led_4 del menjador
    break;
    case 'H':
    digitalWrite(led_4, LOW); // Apagar led_4 del menjador
    break;

    case 'I':
    digitalWrite(led_1, HIGH);
    digitalWrite(led_2, HIGH); // Encendre totes les llums de la casa
    digitalWrite(led_3, HIGH);
    digitalWrite(led_4, HIGH);
    break;
    case 'J':
    digitalWrite(led_1, LOW);
    digitalWrite(led_2, LOW); // Apagar totes les llums de la casa
    digitalWrite(led_3, LOW);
    digitalWrite(led_4, LOW);
    break;

    
   }

   //.............................................//
   temperatura = dht.readTemperature();  //Llegeix i guarda la temperatura del sensor DHT22
  humedad = dht.readHumidity();         //Llegeix i guarda la humedad del sensor DHT22
  lectura_luz = analogRead(A0);        //Llegeix i guarda els valors que recull el sensor de llum
  valor_luz = map(lectura_luz, 0, 1023, 0, 100);  //Mapeo dels valors del sensor de llum (rang 0-100)

  

  Serial.print(temperatura);       //Mostra la temperatura en el port serie (Bluetooth)
  Serial.print(" °C");
  Serial.print("|");
  Serial.print(humedad);          //Mostra la humitat relativa en el port serie (Bluetooth)
  Serial.print(" %");
  Serial.print("|");
  Serial.print(valor_luz);       //Mostra els nivells de lluminositat en el puerto serie (Bluetooth)
  Serial.print(" %");
  delay(2000);                  //El DHT22 envia dades cada dos segons

  if (temperatura >=Temp)
  {
    digitalWrite(ventilador, HIGH);
  }
  if (temperatura < Temp_2)
  {
    digitalWrite(ventilador, LOW);
  }

  switch( Valor){
    case 'K':
    analogRead(A0);
    
     if (lectura_luz <500)
       {
        digitalWrite(led_1, HIGH);
        digitalWrite(led_2, HIGH); // Encendre totes les llums de la casa
        digitalWrite(led_3, HIGH);
        digitalWrite(led_4, HIGH);  
       }
      if (lectura_luz >550)
       {
        digitalWrite(led_1, LOW);
        digitalWrite(led_2, LOW); // Apagar totes les llums de la casa
        digitalWrite(led_3, LOW);
        digitalWrite(led_4, LOW);
       }
     break;

     case 'L':
     return;
     break;
  }
  
 //....................................//

switch( Valor){
  case 'M':
  flag = true;
    if (flag == true)
   {
     int value= digitalRead(sensor_moviment);
       if (value == HIGH)
        {
         digitalWrite(alarma, HIGH);
         delay(1500);
         digitalWrite(alarma, LOW);                     
        }
       else
        {
         digitalWrite(alarma, LOW);
        }
  break;
  
  case 'N':
  flag = false;
  break;
}
  
   
  

} 
 }

Tu problema ocurre por ser desordenado a la hora de programar.

Por qué digo esto?
Pues si identas o agregas separación conforme programas las cosas se ven con claridad

Mira esto

switch( Valor){
      case 'M':
              flag = true; // <== ESTO NO TIENE SENTIDO
              if (flag == true) { //<== ESTA LLAVE NO TIENE donde terminar
                  int value= digitalRead(sensor_moviment);
                  if (value == HIGH) {
                      digitalWrite(alarma, HIGH);
                      delay(1500);
                      digitalWrite(alarma, LOW);                     
                  }
              else   {
                   digitalWrite(alarma, LOW);
              }
      break;

      case 'N':
              flag = false;
              break;
      } // <== TERMINA ACA
  }

Si defines un flag = true para que luego preguntas
if (flag == true) que sentido tiene ? o mejor dicho cuando no va a ser True?

Esto si debe funcionar pero tal vez no haga lo que quieres

switch( Valor){
      case 'M':
              flag = true;
              int value= digitalRead(sensor_moviment);
              if (value == HIGH) {
                  digitalWrite(alarma, HIGH);
                  delay(1500);
                  digitalWrite(alarma, LOW);                     
              }
              break;
      case 'N':
              flag = false;
              break;
  }