antifurto 433mhz

salve, volevo costruirmi un piccolo allarmino basato su sensori pir che inviano un segnale sui 433mhz, per ora il sistema è costituito da un sensore che si interfaccia ad arduino tramite un modulo ricevitore 433mhz, un buzzer che suona quando il sensore invia un codice e un pulsante.

#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

#define codice_pir 1497466  // codice sensore pir 433mhz

void setup()
{
 pinMode(11,OUTPUT);
 pinMode(12, INPUT);
 Serial.begin(9600);
 mySwitch.enableReceive(0);  //riceve sul pin 2 modulo 433mhz 
}

void loop() 
{         
  if (mySwitch.available()) 
    {
    unsigned long lettura = mySwitch.getReceivedValue();     
    if (mySwitch.getReceivedValue())
        {
         int stato= digitalRead(12);
         while (stato==HIGH && lettura==codice_pir) 
            allarme ();
        }
    }
  mySwitch.resetAvailable();
}

void allarme ()
{
  tone(11,10);
  delay(150);
  noTone(11);
  delay(150);
}

lo scopo del mio codice sarebbe (per ora) quello di far suonare il buzzer non appena rileva il movimento e poter disattivare l'allarme se premo il pulsante.
per fare cio ho utilizzato la seguente riga di codice:

while (stato==HIGH && lettura==codice_pir)

ma non funziona, sembra che non cambia lo stato del pulsante quando lo presso, e di conseguenza l'allarme continua a suonare, sapete dirmi il perché?

Ciao,
non funziona perché leggi stato fuori del while!!!

int stato= digitalRead(12);
         while (stato==HIGH && lettura==codice_pir) 
            allarme ();

cambia in

while (((stato = digitalRead(12)) == HIGH) && (lettura == codice_pir)) 
            allarme ();

dinodf:
Ciao,
non funziona perché leggi stato fuori del while!!!

int stato= digitalRead(12);

while (stato==HIGH && lettura==codice_pir)
            allarme ();




cambia in 


while (((stato = digitalRead(12)) == HIGH) && (lettura == codice_pir))
            allarme ();



grazie mille ha funzionato