Simulazione antifurto

Ciao a tutti, ho bisogno del vostro aiuto. Sto simulando un antifurto mediante Arduino, un sensore pir e un interruttore per abilitare o disabilitare l’antifurto stesso.
Vi posto il codice.

int pinIR = 10, pinSirena = 8, pinInterruttore = 9, pinAbilitazione = 13;
const int nRipetizioni = 3;
boolean letturaIR = LOW, statoInterruttore;
const int durataAllarme = 5000, intervalloSirena = 200, attesaRipetizione = 3000;
unsigned long tempoAllarme = 0 , tempoSirena = 0, tempoRipetizione = 0;

void setup() {
  pinMode(pinIR, INPUT);
  pinMode(pinSirena, OUTPUT);
  pinMode(pinInterruttore, INPUT);
  pinMode(pinAbilitazione, OUTPUT);
}

void loop() {
  int conteggio = 0;

  statoInterruttore = digitalRead(pinInterruttore);//abilita l'allarme
  if (statoInterruttore == HIGH)
    digitalWrite(pinAbilitazione, HIGH);
  else
    digitalWrite(pinAbilitazione, LOW);

  tempoAllarme = millis();
  letturaIR = digitalRead(pinIR);
  while (letturaIR == HIGH and statoInterruttore == HIGH  and  millis() <= tempoAllarme + durataAllarme) {
    if (millis() > tempoSirena + intervalloSirena) {
      digitalWrite(pinSirena, !digitalRead(pinSirena));
      tempoSirena = millis();
    }

    statoInterruttore = digitalRead(pinInterruttore);
    if (statoInterruttore == HIGH)
      digitalWrite(pinAbilitazione, HIGH);
    else
      digitalWrite(pinAbilitazione, LOW);
  }
  digitalWrite(pinSirena, LOW);


}

Il sistema sembrerebbe funzionare bene, tuttavia alcune volte sembra che il sensore impazzisca: rileva movimenti che non ci sono oppure non rileva movimenti. Ho notato che se il sensore, quando accendo Arduino, funziona bene, funziona bene per sempre. Se invece inizia a funzionare male all’accensione di Arduino non si “riprende”.

Il funzionamento è il seguente:
Ad interruttore su ON l’antifurto è abilitato, se il sensore rileva un movimento il cicalino suona per 5 secondi (ad intermittenza); appenda l’interruttore si mette su OFF il sistema si disabilita anche se il cicalino sta ancora suonando.

Grazie…