Bonjour.
Actuellement j'ai une alarme qui se met en service ou hors service avec un clavier.
Je voudrais mettre en parallèle une mise en service ou hors service avec un badge RFID le tout piloté par une carte arduino uno.
Dans mon montage j'ai mis un relais qui fonctionne en télérupteur. Je badge, l'alarme se met en service. Je badge à nouveau l'alarme se met hors service.
Jusque là tout va bien.
Mais si je met le clavier dans le circuit , mon relais rebondit sans cesse et fait comme une mitraillette.
Ça fait un bon moment que je cherche la cause mais là je sèche.
J'ai l'impression que le RFID perturbe mon entrée clavier.
Car si je met le code du clavier seul ça fonctionne mais dès que j'y ajoute les premières lignes d'initialisation du clavier le relais refait la mitraillette.
J'ai essayé de changer de sortie, j'ai changé de carte uno, en utilisant une fonction ou non pas de changement.
Est ce que quelqu'un aurait une idée de ce problème ?
Je vous met mon code à la suite.
J'espère que la méthode d'insertion est bonne.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
#define Led_Rouge_PIN 2
#define Relais_PIN 3
#define EtatAlarme_PIN 4
#define CdeClavier_PIN 5
boolean mem1 = 0;
boolean Etat_Relais;
boolean EtatAlarme;
boolean CdeClavier;
byte Count_acces = 0;
byte CodeVerif = 0;
byte Code_Acces[4] = { 0xB5, 0xF7, 0x32, 0x5F };
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
// Init array that will store new NUID
byte nuidPICC[4];
void setup() {
// Init SPI bus
SPI.begin();
// Init MFRC522
rfid.PCD_Init();
// Init broches
pinMode(Led_Rouge_PIN, OUTPUT);
pinMode(Relais_PIN, OUTPUT);
pinMode(EtatAlarme_PIN, INPUT);
pinMode(CdeClavier_PIN, INPUT);
digitalWrite(Relais_PIN, HIGH);
}
void loop() {
EtatAlarme = digitalRead(EtatAlarme_PIN);
CdeClavier = digitalRead(CdeClavier_PIN);
Etat_Relais = digitalRead(Relais_PIN);
if (EtatAlarme == 1) {
digitalWrite(Led_Rouge_PIN, HIGH);
}
else
{
digitalWrite(Led_Rouge_PIN, LOW);
}
if (CdeClavier == 1)
{
relais();
}
// Initialiser la boucle si aucun badge n'est présent
if (!rfid.PICC_IsNewCardPresent())
return;
// Vérifier la présence d'un nouveau badge
if (!rfid.PICC_ReadCardSerial())
return;
// Enregistrer l’ID du badge (4 octets)
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
// Vérification du code
CodeVerif = GetAccesState(Code_Acces, nuidPICC);
if (CodeVerif == 1)
{
relais();
}
else {
for (int i = 0; i < 3; i++) {
digitalWrite(Led_Rouge_PIN, HIGH);
delay(200);
digitalWrite(Led_Rouge_PIN, LOW);
delay(200);
}
}
// Re-Init RFID
rfid.PICC_HaltA(); // Halt PICC
rfid.PCD_StopCrypto1(); // Stop encryption on PCD
}
byte GetAccesState(byte *CodeAcces, byte *NewCode) {
byte StateAcces = 0;
if ((CodeAcces[0] == NewCode[0]) && (CodeAcces[1] == NewCode[1]) && (CodeAcces[2] == NewCode[2]) && (CodeAcces[3] == NewCode[3]))
return StateAcces = 1;
else
return StateAcces = 0;
}
// Fonction commande relais
void relais() {
if (Etat_Relais = !mem1) {
digitalWrite(Relais_PIN, LOW);
} else {
digitalWrite(Relais_PIN, HIGH);
}
mem1 = !mem1;
}