entrée retardée sortie retardée

mon projet est un systeme d’alarme d’une maison
donc je dois saisir le mot de passe et apres 30 s le systeme fonctionne
quand je reviens , j’ouvre la porte l’alarme ne dois pas déclencher ( j’ai un capteur sec)
aidez moi SVP

bonjour déjà,
aidez oui, mais présente quelque chose au moins de ta conception.
peut être l'option millis()
je dis ca, je dis rien

#include<LiquidCrystal.h>
#include <Password.h>
#include <Keypad.h>

Password password = Password( “1234” );

const byte ROWS = 4;
const byte COLS = 4;

char keys[ROWS][COLS] = {
{‘1’,‘2’,‘3’,‘A’},{‘4’,‘5’,‘6’,‘B’},{‘7’,‘8’,‘9’,‘C’},{’*’,‘0’,’#’,‘D’}
};
byte rowPins[ROWS] = {39,41,43,45};
byte colPins[COLS] = {47,49,51,53};

// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int calibrationTime = 0;

long unsigned int lowIn;
int passwd_pos= 11;

long unsigned int pause = 1000;
int backLight =13;
boolean lockLow = true;
boolean takeLowTime;
int i= 0;
int pirPin = 6; //the digital pin connected to the PIR sensor’s output
int ledPin = 7;
int alarmStatus = 0;
int alarmActive =0;
int speaker= 8;
int nb= 0;
//le bouton est connecté à la broche 10 de la carte Adruino
const int bouton = 10;
//variable qui enregistre l’état du bouton
int etatBouton;

LiquidCrystal lcd(12,11,5,4,3,2);

/////////////////////////////
//SETUP
void setup(){
pinMode(backLight, OUTPUT);
analogWrite(backLight, 150);
lcd.begin(16, 2);
Serial.begin(9600);
pinMode(speaker, OUTPUT);
pinMode(bouton, INPUT); //le bouton est une entrée
etatBouton = LOW;
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(pirPin, LOW);
displayCodeEntryScreen();
keypad.addEventListener(keypadEvent);
}

////////////////////////////
//LOOP
void loop()
{
keypad.getKey();
if (alarmActive == 1)
{
if(digitalRead(pirPin) == HIGH)
{
digitalWrite(ledPin, HIGH);
if(lockLow)
{
lockLow = false;
lcd.clear();
lcd.print(" motion detected");
delay(1000);
alarmTriggered();

}
takeLowTime = true;
}
etatBouton = digitalRead(bouton); //Rappel : bouton = 9

if(etatBouton == LOW) //test si le bouton a un niveau logique HAUT
{
digitalWrite(speaker,LOW);
}
else //test si le bouton a un niveau logique différent de HAUT (donc BAS)
{
alarmTriggered();
}
}

}

////////////////////Fontions/////////////////
void keypadEvent(KeypadEvent eKey)
{

switch (keypad.getState())
{
case PRESSED:
if (passwd_pos - 11 >= 5) {
displayCodeEntryScreen();}
lcd.setCursor((passwd_pos++),0);

switch (eKey){
case ‘D’:
passwd_pos = 11;
checkPassword();
break;

case ‘C’:
alarmActive = 0 ;
alarmStatus = 0 ;

password.reset();
lcd.clear();
lcd.print(“Password Reset”);
delay (1000);
passwd_pos = 11;
displayCodeEntryScreen();
break;

default:
password.append(eKey);
lcd.print("*");
}
}
}

void checkPassword()
{
if (password.evaluate())
{
if(alarmActive == 0 && alarmStatus == 0)
{
activate();
}
else if( alarmActive == 1 || alarmStatus == 1) {
deactivate();
}
}
else
{
invalidCode();
}
nb++;
}

void invalidCode()
{
password.reset();
lcd.clear();
lcd.setCursor(2,0);
lcd.print(“CODE INVALIDE”);
delay(1000);
lcd.clear();
displayCodeEntryScreen();
if(nb==2)
{
alarmTriggered();
}
}

void activate()
{
delay(5000);
alarmStatus = 1;
lcd.clear();
lcd.setCursor(2,0);
lcd.print(“ACTIVATION”);
alarmActive = 1;
password.reset();
delay(1000);
lcd.clear();
displayCodeEntryScreen();

}

void deactivate()
{
alarmStatus = 0;
lcd.clear();
lcd.setCursor(1,0);
lcd.print(“DESACTIVATION”);
digitalWrite(speaker, LOW);
alarmActive = 0;
password.reset();
delay(2000);
displayCodeEntryScreen();
}

void displayCodeEntryScreen()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Entrer PIN:”);
}

void alarmTriggered()
{

displayCodeEntryScreen();
keypad.addEventListener(keypadEvent);
digitalWrite(speaker, HIGH);
digitalWrite(ledPin, HIGH);

}

Bonjour,
Les balises codes SVP

le programme

alarme_RIP.ino (3.97 KB)

as tu essayé de chercher avec l'option millis() ?
apparemment, non

non je ne sais pas comment faire
pour le moment le probleme c'est quand le detecteur RIP declenche la sirene je ne peux pas l'arreter

déjà dans ton loop tu vérifie si alarmActive == 1 mais ne dis rien si alarmActive == 0
donc ta sirène qui doit être speaker est toujours high
avec un else {digitalWrite(speaker,LOW);} ca devrait mieux tourner

pour le reste, cherche sur google et forum, il y a plein d'exemples pour faire un timer

non c'est pas ça
disant un voleur a été detecté par RIP puis je reviens chez moi donc je dois desactiver l'alarme
ça ne marche pas
j'ai pas su comment faire

lorsque tu rentre le code si l'alarme est ON, elle passe à OFF, on est bien d'accord.
donc si alarmActive == 0 tu désactive la sirène, c'est pas trop compliqué.
à toi de voir ou tester si alarme ON/OFF dans ton clavier :wink: