bonjour je suis entrain de crée une alarme pour mon chalet
elle fonctionne appart un pti problème
-
je l’enclenche "tout vas bien ";
-
je déclenche un détecteur "tout vas bien"
-
je l’arrête "tout vas bien"
4) je la réarme """"" elle me réenclenche la tempo de capteur avant sirène """" !!!!!!!!!!! -
je la re désactive "tout vas bien"
-
je la réarme "tout est redevenue parfait"
pour palier a ce problème j'ai ajouter :
void software_Reset()
{
asm volatile (" jmp 0");
}
a la désactivation de l'alarme "depuis plus de problème "
mais je trouve sa LIMITE
avez vous une idée ???
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 53
#define RST_PIN 5
#define NOTE_DO 261
#define NOTE_RE 293
#define NOTE_MI 329
#define NOTE_FA 349
#define NOTE_SOL 392
#define NOTE_LA 440
#define NOTE_SI 493
#define NOTE_FA6 2793
#define NOTE_SOL6 3135
// bouton mise en marche
const int port_boutonOn = 2; //mise en marche de l'alarme
int etat_boutonOn = LOW; //etat du bouton
//capteur
const int port_capteurPorte = 10; //capteur
int etat_capteurPorte = 0;
int capteurPorte = LOW; //etat du capteur
const int port_capteurMouv = 6; //capteur
int etat_capteurMouv = 0;
int capteurMouv = LOW; //etat du capteur
int timeOn = 5;
int timeCapteur = 5;
int timeSirene = 5;
//etat alarme origine
int etat_alarme = 0;
//liste des clef nom[]={xxx,xxx,xxx,xxx};
int bluetag[]={xxx,xxx,xxx,xxx}; // masquer pour demande d'aide
int whitetag[]={xxx,xxx,xxx,xxx};// masquer pour demande d'aide
MFRC522 mfrc522(SS_PIN, RST_PIN);
int correct=0;
void setup() {
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
pinMode(port_boutonOn, INPUT); //declare le bouton
pinMode(port_capteurPorte, INPUT); //declare le capteur de porte
pinMode(port_capteurMouv, INPUT); //declare le capteur de mouvement
Serial.println("Alarme Neomega:");
}
void loop() {
//
etat_boutonOn = digitalRead(port_boutonOn);
//pour allumer l'alarme on appui sur le boubon
if(etat_boutonOn == HIGH){
etat_alarme = 1;
Serial.print("etat_alarme:");
Serial.println(etat_alarme);
}
//si l'alarme est allumer
if(etat_alarme == 1){
rfid();
digitalWrite(13,HIGH); // on allume la led pour indiquer alarme ON
Serial.print("alarme initialise:");
tempoOn(); //on lance la tempoOn pour sortir de la maison
}
}
/******************************************* tempoOnRISATION D'ALLUMAGE **************************************************************/
void tempoOn(){
int i = 0;
while( i<timeOn && etat_alarme ==1){
tone(8, 444);
delay(500);
rfid();
noTone(8);
delay(500);
rfid();
i++;
Serial.print("tempo allumage =" );
int temp = i - timeOn ;
Serial.println(temp);
if(i == timeOn){
Serial.print("alarme ON !!!!" );
}
}
alarme_on(); // la tempoOn est fini on scrute les capteurs
}
/******************************************* ALARME ON **************************************************************/
void alarme_on(){
while(etat_alarme == 1){
digitalWrite(3,HIGH);
rfid();
if(capteurPorte == HIGH){
etat_capteurPorte = 1;
}
if(capteurMouv == HIGH){
etat_capteurMouv = 1;
}
capteurPorte = digitalRead(port_capteurPorte);
capteurMouv = digitalRead(port_capteurMouv);
if(etat_capteurPorte == 1){
tempoCapteurPorte();
}
if(etat_capteurMouv == 1){
Serial.println(capteurMouv);
tempoCapteurMouv();
}
}
}
/******************************************* ALARME OFF **************************************************************/
void alarme_off(){
etat_alarme = 0;
etat_capteurPorte = 0;
etat_capteurMouv = 0;
digitalWrite(3,LOW);
digitalWrite(4,LOW);
Serial.print("etat alarme :");
Serial.println(etat_alarme);
Serial.print("etat capteru porte :");
Serial.println(etat_capteurPorte);
Serial.print("etat capteur mouv :");
Serial.println(etat_capteurMouv);
Serial.println("alarme off:");
delay(2000);
software_Reset();
}
/****************************************** TEMPO CAPTEUR ************************************************************/
void tempoCapteurPorte(){
int i = 0;
while( i<timeCapteur && etat_capteurPorte ==1){
Serial.println("alarme porte:");
tone(8, NOTE_SOL);
delay(500);
rfid();
noTone(8);
delay(500);
rfid();
i++;
}
sirene();
}
void tempoCapteurMouv(){
int i = 0;
while( i<timeCapteur && etat_capteurMouv == 1){
Serial.println("alarme radar:");
tone(8, NOTE_SOL6);
delay(500);
rfid();
noTone(8);
delay(500);
rfid();
i++;
}
sirene();
}
/******************************************* LECTEUR RFID **************************************************************/
void sirene(){
int i = 0;
while(i<20 && etat_alarme == 1){
tone(8, NOTE_DO);
delay(60);
digitalWrite(4,HIGH);
rfid();
noTone(8);
delay(NOTE_SI);
rfid();
digitalWrite(4,LOW);
}
}
void rfid(){
if ( ! mfrc522.PICC_IsNewCardPresent()) return;
if ( ! mfrc522.PICC_ReadCardSerial()) return;
Serial.println("Card UID:");
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.println(mfrc522.uid.uidByte[i]);
}
for(int a=0; a<4; a++){
if(mfrc522.uid.uidByte[a]==bluetag[a]){
correct++;
Serial.println(correct);
}else if(mfrc522.uid.uidByte[a]==whitetag[a]){
// correct+=2;
correct++;
}else if(correct<5 && mfrc522.uid.uidByte[a] != bluetag[a]){
correct=0;
Serial.println(correct);
}else{
}
}// end for
if(correct==4){
Serial.println("Access Autorise");
tone(8, NOTE_DO);
delay(150);
noTone(8);
delay(60);
tone(8, NOTE_RE);
delay(150);
noTone(8);
delay(60);
tone(8, NOTE_MI);
delay(150);
noTone(8);
delay(60);
tone(8, NOTE_SOL);
delay(150);
noTone(8);
delay(60);
alarme_off();
correct=0;
}else{
Serial.println("Access Denied");
tone(8, NOTE_DO);
delay(140);
noTone(8);
delay(60);
tone(8, NOTE_DO);
delay(140);
noTone(8);
delay(60);
tone(8, NOTE_DO);
delay(140);
noTone(8);
digitalWrite(A1,LOW);
correct=0;
}
delay(400);
}
void software_Reset()
{
asm volatile (" jmp 0");
}
je suis débutant et surtout preneur pour toute amélioration du code
merci par avance