ALARMA NO SE DESACTIVA CON EL MANDO INFRAROJO

CORDIAL SALUDO
me encuentro en un dilema ya que he realizado las pruebas con el mando infrarojo pero al activarse el buzzer que quiero que suene por mucho tiempo y luego apagarlo con el mando infrarojo ,tengo que esperar que pase todo el delay para poder apagarlo .no quiero que suceda esto quiero que lo pueda apagar en cualquier momento

#include <Arduino.h>
#include <NECIRrcv.h>
#define IRPIN 2   // pin that IR detector is connected to
int pinBOCINA=12;
long r=0;
int v1=0;

int vl1=0;

int led = 3;
static int aux = 1;
NECIRrcv ir(IRPIN) ;





void setup(){
 pinMode(8,INPUT);
 pinMode(12,OUTPUT);
  pinMode(led, OUTPUT);
 ir.begin() ;
}

void a(){
 v1=digitalRead(8);
 vl1=analogRead(A0);
    




 if(v1==HIGH){
   
   if(vl1<=150){
     
     digitalWrite(12,LOW);
     
   }
   
   else if(vl1>=160){
     digitalWrite(12,HIGH);
     delay(100000);
     
   }
   else{
      
      digitalWrite(12,HIGH);
      delay(100000);
     
   }
 }
 
 else if(v1==LOW){
  
   digitalWrite(12,LOW);
 }
   }
  
   void g ()
{
  Serial.begin(9600);
  
 Serial.print ("valor1 ");
 v1 = analogRead(A0);// primero  se lee el  valor del  bton
 Serial.println(v1);
delay(700);
}
void IR()
 {
 unsigned long ircode ;
 while (ir.available()) { 
   ircode = ir.read() ;
   if(ircode == 3322185710){  
     if(aux == 0){
       digitalWrite(led, LOW);
       aux = 1;
     }
     else{
       digitalWrite(led, HIGH);
       aux = 0;
     }
   } 
 }
}
 


 void loop (){
   g();
   a();
   IR();
  
     
  

   
  
  }

usa millis().
Mira el ejemplo BlinkWithoutDelay.ino del IDE.

Para mas información busca en documentación el tutorial Función millis() de Nick Gammon traducido por max_saeta