double lecteur RFID

Toinoobz
mer, 03/06/2019 - 12:22
Bonjour, J'ai besoin de faire fonctionner deux lecteur RFID sur une Nano et d'ouvrir un relais quand les deux clefs sont au bon endroit. les clefs ne sont pas interchangeable.
J'avais un code qui fonctionnait mais seulement la 1ere minute. j'ai trouvé que le problème devait venir de la bibliothèque RC522. Je n'ai pas eu le problème avec la bibliothèque RFID que j'aimerais utiliser maintenant.
La SS_PIN est un moyen d'inhiber la communication avec le module, je vais devoir jouer avec cette pin pour passer d'un lecteur à un autre.
Après le succès de ce sujet et quelque heures de code je vous donne mon bout de programme.
/* C.DOMOTIQUES
* Ce code vous permet de declencher une sortie si chaque lecteur RFID a le bon TAG
*
* Il me manque une condition pour verrouiller si le TAG n'est plus présent.
*
*
*/
#include <SPI.h>
#include <RFID.h>
#define RST_PIN 9
#define SS_0_PIN 10
#define SS_1_PIN 8
RFID Lecteur0(SS_0_PIN, RST_PIN);
RFID Lecteur1(SS_1_PIN, RST_PIN);
int UID;
int Serrure = 2;
String Clef0 = "163.248.194.30.135"; // UID du bon TAG sur lecteur0
String Clef1 = "2.78.142.53.247"; // UID du bon TAG sur lecteur1
String ClefLue = ""; //variable de la clef lue par le lecteur
bool lock0 = 0; //le bon tag est sur le lecteur0
bool lock1 = 0; //le bon tag est sur le lecteur1
void setup()
{
Serial.begin(230400);
SPI.begin();
digitalWrite(SS_0_PIN, LOW); //on active la com du lecteur0
digitalWrite(SS_1_PIN, HIGH);
Lecteur0.init(); //on initialise le lecteur0
digitalWrite(SS_0_PIN, HIGH); //on active la com du lecteur1
digitalWrite(SS_1_PIN, LOW);
Lecteur1.init(); //on initialise le lecteur1
pinMode(Serrure, OUTPUT); //Serrure et en sortie sur la PIN 2
}
void loop()
{ //programme pour le lecteur0
digitalWrite(SS_0_PIN, LOW);
digitalWrite(SS_1_PIN, HIGH);
if (Lecteur0.isCard()) {//un tag est present devant le lecteur
ClefLue = "";//on efface les info contenue dans ClefLue
if (Lecteur0.readCardSerial()) {//le lecteur est pret a lire un carte en com serie(traduction)
Serial.print("L'UID est: ");
for (int i = 0; i <= 4; i++)
{
UID = Lecteur0.serNum[i];//UID prend la valeur du premier bloc de données
ClefLue += String(UID);//ClefLue ajoute UID à sa chaine de caractere
if (i < 4) //si on est au 4eme block on ajoute un .
ClefLue += (".");
}
if (ClefLue == Clef0) {//test si la clef est la bonne
Serial.println(ClefLue);
lock0 = 1; // on deverouille le lecteur0
Serial.println("bonne clef en 0.");
}
else Serial.println("sinon koi?"); //tien?! je viens d'apprendre comment fonctionne le "else"
if (ClefLue != Clef0) //je garde cette partie pour memoire mais j'aurais pu ecrire "else lock0=0;" a la place des 5 lignes présentes
{
lock0 = 0;
Serial.println(ClefLue + " non Autorisee");
}
}
Lecteur0.halt(); //fin de lecture avec lecteur0
delay(200);// le lecteur0 a bien travaille, je lui octroie le droit de se reposer 200cycles (pauvre arduino qui reste occupe a compter)
}
//meme programme mais pour le lecteur1
digitalWrite(SS_0_PIN, HIGH);
digitalWrite(SS_1_PIN, LOW);
if (Lecteur1.isCard()) {
ClefLue = "";
if (Lecteur1.readCardSerial()) {
Serial.print("L'UID est: ");
for (int i = 0; i <= 4; i++)
{
UID = Lecteur1.serNum[i];
ClefLue += String(UID);
if (i < 4)
ClefLue += (".");
}
if (ClefLue == Clef1) {
Serial.println(ClefLue);
lock1 = 1;
Serial.println("bonne clef en 1.");
}
else lock1 = 0;
}
Lecteur1.halt();
delay(200);
}
if ((lock0 == 1) && (lock1 == 1))
{
digitalWrite(Serrure, HIGH);
}else digitalWrite(Serrure, LOW);
}
Bisous