Desactivar alarma en arduino con un boton fijo enclavado

Hola, mi proyecto consiste en que cuando se active el sensor infrarrojo, se active una alarma que suene como sirena, y que se quede encendida, hasta que al cambiar el estado del switch se apague.
Estoy teniendo problemas ahi, logre que sonara como una sirena y todo, pero cuando le coloco la condicion del switch no se apaga.

int alarma = 11;                        // Definir el pin digital del Arduino para la Alarma
int sensorflama;                        // Declaracion del Sensor de flama
int sensorsonido = 26;                  // Definir el pin digital del Arduino para el sensor de sonido
int valor_sonido = 0;                   // define una variable para ingresar el estado
int sensorvib = 8;                      // Definir el pin digital del Arduino para el sensor de vibracion
int valor_vib = 0;                      // define una variable para ingresar el estado
int sensor_luz;                         // Declaracion del sensor de luz
int sensormag = 6 ;                     // Definir el pin digital del Arduino para el sensor magnetico
int valor_mag ;                         // define una variable para ingresar el estado
int infrarrojo = 12;                    // Definir el pin digital del Arduino para el sensor Infrarrojo 
int valor_inf = 0;                      // define una variable para ingresar el estado
int niveldeagua;                        // Declaracion del Sensor de nivel de agua
int boton1 = 4;                         // Declaracion el pin digital del Arduino del boton1 
int valor_boton1 = 0;                   // Define una variable para ingresar el estado del valor del boton1
int boton2 = 2;                         // Declaracion el pin digital del Arduino del boton2 
int valor_boton2 = 0;                   // Define una variable para ingresar el estado del valor del boton2
float sinVal;
int toneVal;
float sinVal1;
int toneVal1;
int led=10;
int bandera=0;

void setup() {
   // Inicializar entradas y salidas
   Serial.begin(9600);                // Inicializar puerto serial
   pinMode(alarma, OUTPUT);
   pinMode(sensorvib,INPUT);
   pinMode(sensorsonido,INPUT);
   pinMode(sensormag, INPUT);
   pinMode(infrarrojo, INPUT);
   pinMode(boton1, INPUT);
   pinMode(boton2, INPUT);
   pinMode(led, OUTPUT);

}

void tiposalarma() {
  while(bandera==1){
      int x;
      for ( x=0; x<250; x++){
        sinVal = (sin(x*(3.1412/180)));                           // convertir grados a radianes
        toneVal = 2000 + (int(sinVal*1000));                      // convertir frecuencia del valor. 
         tone(alarma,toneVal);
        delay(2);
        if(valor_boton2==1){
          digitalWrite(led, HIGH);
          bandera=0;
          noTone(alarma);
        }

}
     x=0; 
}
}
void loop() {
  //Lectura de los sensores 
  
  //Sensores Digitales
  valor_vib= digitalRead(sensorvib);
  valor_sonido=digitalRead(sensorsonido);
  valor_mag = digitalRead(sensormag) ; // lee el estado del sensor
   valor_inf = digitalRead(infrarrojo);
   valor_boton1 = digitalRead(boton1);
   valor_boton2 = digitalRead(boton2);

  //Sensores Analogicos
  sensorflama=analogRead(A7);
  sensor_luz=analogRead(A1);
  niveldeagua = analogRead(A2);
  
   if (valor_inf ==0){
      bandera=1;
     tiposalarma();
  }

  //if (valor_boton1 == 1 || sensor_luz < 100){
    //if( (valor_sonido == 1 || valor_mag==0|| valor_inf==0) ) {
    //  tone(alarma, 1000);

   /* if (valor_sonido == 1) {
       for(int x1=50; x1<100; x1++){
        sinVal1 = (sin(x1*(3.1412/180)));                           // convertir grados a radianes
        toneVal1 = 2000 + (int(sinVal1*1000));                      // convertir frecuencia del valor. 
        tone(alarma, toneVal1);
        delay(2);
      }
    } 
    if (valor_mag == 0){
      tone(alarma, 1500);
    } */

  
  if(((sensorflama>100 && sensorflama<300) ||  valor_vib == 0 || niveldeagua>500 ) ) {    
     tone(alarma, 1000);
  }


     
    }
</>

:warning:
Código corregido

Tu publicación fue ** MOVIDA ** a su ubicación actual ya que es más adecuada.

¿Podría también tomarse unos minutos para Aprenda a usar el foro .

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.