aiuto per un antifurto

salve ho un piccolo problema col mio progetto praticamente quando scatta l'antifurto devo far suonare la sirena per un tot di tempo ma se disattivo l'antifurto si deve staccare subito quindi non posso utilizzare il delay perche il programma si bloccherebbe ho provato con millis() ma non sono riuscito a comprendere a pieno questa funzione percio chiedo aiuto a voi piu esperti allego il codice che ho scritto

int pulsante = 2;
int sirena = 3;
int campanello = 4;
int verde = 5;
int rosso = 6;
int laser1 = 7;
int sensore1 = A0;
int sensorvalue = 0;
int limitvalue = 900;
int bs = 0;
void setup() {
  pinMode (pulsante, INPUT);
  pinMode (campanello, OUTPUT);
  pinMode (sirena , OUTPUT);
  pinMode (verde, OUTPUT);
  pinMode (rosso, OUTPUT);
  pinMode (laser1, OUTPUT);
  pinMode (sensore1, INPUT);
  Serial.begin(9600);
}
void inizioallarme() {
  tone(sirena, 440);
  delay(2000);
}
void stopallarme() {
  noTone (sirena);
}
void scanner() {
  if (sensorvalue > limitvalue) {
    stopallarme ();
  }
  else {
    inizioallarme();
  }
}

void temporizzatore() {
  if (bs == HIGH) {
    start();
  }
}
void off() {
  if (bs == LOW) {
    digitalWrite (verde, LOW);
    digitalWrite (rosso, HIGH);
  }
}
void start() {
  digitalWrite(verde, HIGH);
  digitalWrite(rosso, LOW);
  scanner();
}
void loop() {
  temporizzatore();
  off();

  digitalWrite (laser1, HIGH);
  bs = digitalRead(pulsante);
  sensorvalue = analogRead(sensore1);
  Serial.print("sensor = " );
  Serial.println(sensorvalue);
  if (bs == LOW) {
    stopallarme();
    noTone (sirena);
  }
  if (sensorvalue < limitvalue) {
    digitalWrite (campanello, HIGH);
    delay(1000);
  }
  else {
    digitalWrite (campanello, LOW);
  }
}

Devi a studiarti bene come si usa la millis() prima QUI, poi QUI ed infine leggi anche QUI e QUI ... vedrai che ti sarà tutto più chiaro :wink:

Guglielmo

grazie Guglielmo per la dritta vi faro sapere il proseguimento