Go Down

Topic: Gérer lun lave linge en co-propriété  (Read 2143 times) previous topic - next topic

lesept

Non ne change rien, le problème ne vient pas de la.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

lesept

Alors, je te propose une nouvelle version :
Code: [Select]
#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

#define SS_PIN 10    //Arduino Uno
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522 instance.
MFRC522::MIFARE_Key key;

byte serNumLu[4] = {0};
struct Params {
  char nom[20];
  byte uId[4];
  bool existe;
  int nbUtils;
  int credit;
};
#define nbUtilisateurs 10
struct Params Utilisateur[nbUtilisateurs];

int buzzer = 8;
int led_rouge = 14;
int led_verte = 15;

int tagok = 255;

void setup() {
  pinMode(led_rouge, OUTPUT);
  pinMode(led_verte, OUTPUT);
  pinMode(buzzer, OUTPUT);
  lcd.begin(16, 2); //ini le lcd
  SPI.begin();        // Init SPI bus
  Serial.begin(9600);
  mfrc522.PCD_Init();   // Init MFRC522 card

  initUsers();
  lcd.print("Dispositif");
  lcd.setCursor(0, 1);
  lcd.print("d'identification");
  delay(3000);
  lcd.clear();
}

void loop() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())    return;

  Serial.print("Card UID:");    //Dump UID
  for (byte i = 0; i < 4; i++) {
    serNumLu[i] = mfrc522.uid.uidByte[i];
    Serial.print(serNumLu[i] < 0x10 ? " 0" : " ");
    Serial.print(serNumLu[i], HEX);
  }
  Serial.println();

  tagok = 255;
  for  (byte i = 0; i < nbUtilisateurs; i++) {
    byte nok = 0;
    for (byte j=0;j<4;j++) if (serNumLu[j] == badge[j]) ++nok;
    if (nok == 4) tagok = i; // carte reconnue dans la liste
  }
  switch (tagok) {
    case 0:
      master();
      // instructions master
      break;
    case 1-10:
      user(tagok);
      // instructions user connu
      break;
    case 255:
      inconnu();
      // badge inconnu
      break;
    default:
      autre();
      // instructions si autre numéro
  }
  while (mfrc522.PICC_IsNewCardPresent());
}

void master () {
  Serial.print("Badge master");
  lcd.setCursor(0, 0);
  lcd.print("ACCES AUTORISE");
  lcd.setCursor(0, 1);
  lcd.print("SALUT master");
  digitalWrite(led_verte, HIGH);
  tone(buzzer, 1200, 100);
  delay(300);
  tone(buzzer, 1200, 100);
  delay(2000);
  digitalWrite(led_verte, LOW);
}

void user (int numero) {
  Serial.print("Badge utilisateur ");
  Serial.println(numero);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ACCES AUTORISE");
  lcd.setCursor(0, 1);
  lcd.print(Utilisateur[numero].nom);
  ++Utilisateur[numero].nbUtils ;
  Serial.print (Utilisateur[numero].nbUtils);
  Serial.println (" utilisations");
}

void inconnu () {
  Serial.print("Badge non reconnu");
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ACCES REFUSE");
}

void autre () {
  Serial.print("Erreur lecture badge");
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ERREUR LECTURE");
}

void initUsers() {
  //ini le tableau des badges
  // Master
  Utilisateur[0].nom = "Master";
  Utilisateur[0].uID[0] = 0;
  Utilisateur[0].uID[1] = 0;
  Utilisateur[0].uID[2] = 0;
  Utilisateur[0].uID[3] = 0;
  Utilisateur[0].existe = true;
  Utilisateur[0].nbUtils = 0;
  Utilisateur[0].credit = 10000;

  // Utilisateur 1
  Utilisateur[1].nom = "Regis";
  Utilisateur[1].uID[0] = 0;
  Utilisateur[1].uID[1] = 0;
  Utilisateur[1].uID[2] = 0;
  Utilisateur[1].uID[3] = 0;
  Utilisateur[1].existe = true;
  Utilisateur[1].nbUtils = 3;
  Utilisateur[1].credit = 10;

  // Pierre
  Utilisateur[2].nom = "Pierre";
  Utilisateur[2].uID[0] = 0;
  Utilisateur[2].uID[1] = 0;
  Utilisateur[2].uID[2] = 0;
  Utilisateur[2].uID[3] = 0;
  Utilisateur[2].existe = true;
  Utilisateur[2].nbUtils = 4;
  Utilisateur[2].credit = 8;

  // Bernadette
  Utilisateur[3].nom = "Bernadette";
  Utilisateur[3].uID[0] = 0;
  Utilisateur[3].uID[1] = 0;
  Utilisateur[3].uID[2] = 0;
  Utilisateur[3].uID[3] = 0;
  Utilisateur[3].existe = false; // Elle a quitté l'immeuble
  Utilisateur[3].nbUtils = 12;
  Utilisateur[3].credit = 3;

}

La fonction initUsers doit être renseignée avec les numéros d'id des badges, en commençant par le master. Pour les connaitre, voici un code qui devrait lire et afficher au bon format les numéros des badges :
Code: [Select]
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10    //Arduino Uno
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
byte x[4];

void setup() {
  SPI.begin();        // Init SPI bus
  Serial.begin(9600);
  mfrc522.PCD_Init();   // Init MFRC522 card
}

void loop() {
  Serial.println ("Passez le badge devant le lecteur");
  while ( ! mfrc522.PICC_IsNewCardPresent());
  while ( ! mfrc522.PICC_ReadCardSerial());
  Serial.print("Card UID:");    //Dump UID
  for (byte i = 0; i < 4; i++) {
    x[i] = mfrc522.uid.uidByte[i];
    Serial.print(x[i] < 0x10 ? " 0" : " ");
    Serial.print(x[i], HEX);
  }
  Serial.println();
  Serial.println("Copiez ceci dans le code :");
  for (byte i = 0; i < 4; i++) {
    Serial.print("  Utilisateur[0].uID[");
    Serial.print(i);
    Serial.print("] = ");
    Serial.print(x[i]);
    Serial.println(";");
  }
  Serial.println();
  Serial.println();
}

Tu le lances, tu passes les badges un par un devant le lecteur et tu copies ce qu'il affiche dans la fonction  initUsers à la place des lignes qui ressemblent à ça :
Code: [Select]
 Utilisateur[0].uID[0] = 0;
  Utilisateur[0].uID[1] = 0;
  Utilisateur[0].uID[2] = 0;
  Utilisateur[0].uID[3] = 0;

Bien sûr, pour chaque badge, il faudra changer le numéro d'utilisateur :
  • Utilisateur[0] pour le master
  • Utilisateur[1] pour le badge suivant
  • Utilisateur[2] pour le suivant
  • etc.

J'espère que ça va marcher...

Au passage, il existe dans la bibliothèque du lecteur un code de contrôle d'accès qui fait presque ce que tu veux, avec sauvegarde des données dans l'EEPROM pour éviter de coder dans le code les id des badges et les infos des utilisateurs.
Il faudra faire ça dans les versions suivantes car pour l'instant c'est juste une version de test (les changements de nombre d'utilisation, de crédit, etc ne sont pas conservés d'une utilisation à une autre).

Tiens moi au courant.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

yohann74


Hello,

tu as encore fait un gros travail !! merci.

Donc j'ai récupéré les différents uid via le 1er code ca marche nickel pour le 2eme code il ne passe pas :

J'ai ce message la sur initUsers();

exit status 1
'initUsers' was not declared in this scope

J'ose pas trop retoucher au code mais c'est peut être qu'une histoire de parenthèse..

si jamais tu veux on peut faire un teamviewer pour les tests (si tu connais et tu es dispo...)

lesept

Déplace l'ensemble setup + loop à la fin du fichier, après initUsers
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

yohann74

Alors j'ai fait 2 -3 modifs pour qu'il passe :

char nom  [20] j'ai enlevé le [20]

byte uID[4]; j'ai mis une majuscule au D

(serNumLu[j] == badge[j]) par (serNumLu[j] == initUsers[j]) (pas sûr de mon coup)

j'ai rempli les catégories comme ca :
Code: [Select]
Utilisateur[0].nom = "Master";
  Utilisateur[0].uID[0] = 39;
  Utilisateur[0].uID[1] = 167;
  Utilisateur[0].uID[2] = 36;
  Utilisateur[0].uID[3] = 217;
  Utilisateur[0].existe = true;
  Utilisateur[0].nbUtils = 0;
  Utilisateur[0].credit = 10000;

  // Utilisateur 1
  Utilisateur[1].nom = "Regis";
  Utilisateur[1].uID[0] = 228;
  Utilisateur[1].uID[1] = 46;
  Utilisateur[1].uID[2] = 5;
  Utilisateur[1].uID[3] = 30;
  Utilisateur[1].existe = true;
  Utilisateur[1].nbUtils = 3;
  Utilisateur[1].credit = 10;


mais il me met accès refusé.

J'ai essayé de passer le bloc void initUsers(), void user void inconnu....  avant les void setup et voidloop mais pas mieux ...

lesept

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

yohann74


lesept

char nom  [20] j'ai enlevé le [20]
byte uID[4]; j'ai mis une majuscule au D
(serNumLu[j] == badge[j]) par (serNumLu[j] == initUsers[j]) (pas sûr de mon coup)
OK, il fallait faire ça pour la dernière modif :
Code: [Select]
for (byte j=0;j<4;j++) if (serNumLu[j] == Utilisateur[i].uID[j]) ++nok;
Voici le code:
Code: [Select]
#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

#define SS_PIN 10    //Arduino Uno
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522 instance.
MFRC522::MIFARE_Key key;

byte serNumLu[4] = {0};
struct Params {
  char nom;
  byte uID[4];
  bool existe;
  int nbUtils;
  int credit;
};
#define nbUtilisateurs 10
struct Params Utilisateur[nbUtilisateurs];

int buzzer = 8;
int led_rouge = 14;
int led_verte = 15;

int tagok = 255;

void master () {
  Serial.print("Badge master");
  lcd.setCursor(0, 0);
  lcd.print("ACCES AUTORISE");
  lcd.setCursor(0, 1);
  lcd.print("SALUT master");
  digitalWrite(led_verte, HIGH);
  tone(buzzer, 1200, 100);
  delay(300);
  tone(buzzer, 1200, 100);
  delay(2000);
  digitalWrite(led_verte, LOW);
}

void user (int numero) {
  Serial.print("Badge utilisateur ");
  Serial.println(numero);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ACCES AUTORISE");
  lcd.setCursor(0, 1);
  lcd.print(Utilisateur[numero].nom);
  ++Utilisateur[numero].nbUtils ;
  --Utilisateur[numero].credit;
  Serial.print (Utilisateur[numero].nbUtils);
  Serial.print (" utilisations, credit :");
  Serial.println(Utilisateur[numero].credit);
  if (Utilisateur[numero].credit < 0) {
    lcd.setCursor(0, 1);
    lcd.print("CREDIT DEPASSE");
  }
}

void inconnu () {
  Serial.print("Badge non reconnu");
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ACCES REFUSE");
}

void autre () {
  Serial.print("Erreur lecture badge");
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ERREUR LECTURE");
}

void initUsers() {
  //ini le tableau des badges
  // Master
  Utilisateur[0].nom = "Master";
  Utilisateur[0].uID[0] = 39;
  Utilisateur[0].uID[1] = 167;
  Utilisateur[0].uID[2] = 36;
  Utilisateur[0].uID[3] = 217;
  Utilisateur[0].existe = true;
  Utilisateur[0].nbUtils = 0;
  Utilisateur[0].credit = 10000;

  // Utilisateur 1
  Utilisateur[1].nom = "Regis";
  Utilisateur[1].uID[0] = 228;
  Utilisateur[1].uID[1] = 46;
  Utilisateur[1].uID[2] = 5;
  Utilisateur[1].uID[3] = 30;
  Utilisateur[1].existe = true;
  Utilisateur[1].nbUtils = 3;
  Utilisateur[1].credit = 10;
  // Pierre
  Utilisateur[2].nom = "Pierre";
  Utilisateur[2].uID[0] = 0;
  Utilisateur[2].uID[1] = 0;
  Utilisateur[2].uID[2] = 0;
  Utilisateur[2].uID[3] = 0;
  Utilisateur[2].existe = true;
  Utilisateur[2].nbUtils = 4;
  Utilisateur[2].credit = 8;

  // Bernadette
  Utilisateur[3].nom = "Bernadette";
  Utilisateur[3].uID[0] = 0;
  Utilisateur[3].uID[1] = 0;
  Utilisateur[3].uID[2] = 0;
  Utilisateur[3].uID[3] = 0;
  Utilisateur[3].existe = false; // Elle a quitté l'immeuble
  Utilisateur[3].nbUtils = 12;
  Utilisateur[3].credit = 3;

}

void setup() {
  pinMode(led_rouge, OUTPUT);
  pinMode(led_verte, OUTPUT);
  pinMode(buzzer, OUTPUT);
  lcd.begin(16, 2);   // Init le lcd
  SPI.begin();        // Init SPI bus
  Serial.begin(9600);
  mfrc522.PCD_Init(); // Init MFRC522 card

  initUsers();
  lcd.print("Dispositif");
  lcd.setCursor(0, 1);
  lcd.print("d'identification");
  delay(3000);
  lcd.clear();
}

void loop() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())    return;

  Serial.print("Card UID:");    //Dump UID
  for (byte i = 0; i < 4; i++) {
    serNumLu[i] = mfrc522.uid.uidByte[i];
    Serial.print(serNumLu[i] < 0x10 ? " 0" : " ");
    Serial.print(serNumLu[i], HEX);
  }
  Serial.println();

  tagok = 255;
  for  (byte i = 0; i < nbUtilisateurs; i++) {
    byte nok = 0;
    for (byte j = 0; j < 4; j++) if (serNumLu[j] == Utilisateur[i].uID[j]) ++nok;
    if (nok == 4) tagok = i; // carte reconnue dans la liste
  }
  switch (tagok) {
    case 0:
      master();
      // instructions master
      break;
    case 1-10:
      user(tagok);
      // instructions user connu
      break;
    case 255:
      inconnu();
      // badge inconnu
      break;
    default:
      autre();
      // instructions si autre numéro
  }
  while (mfrc522.PICC_IsNewCardPresent());
}

Si ça fonctionne, il va falloir passer à la suite : je verrais bien
  • Stocker les données dans l'EEPROM pour le cas où le système s'arrête
  • Améliorer le traitement des badges
  • Mettre des boutons pour l'interface master
Je te conseille aussi de passer sur un LCD a 4 lignes
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

yohann74


Mais t' es vraiment au top !!!

Je fini tard le travail ce soir mais je vais essayer le code en rentrant et je te tiens informé.

Suis d'accord pour l'écran je vais voir pour commander ca rapidement.
Pour l'eeprom je pense que c'est indispensable pour un système fiable (ou un onduleur) ou si cela existe un système de pile/batterie qui prend relais au secteur de l' Arduino vu que c'est du 5V…

Pour le bouton ok même si il faut que je me projette sur la boite qui va contenir tout ca ..

peut être bouton poussoir déporté … ou un badge validation(qui ferait juste on/off sur les commandes); mais vu que le RC522 n'accepte que 10 tags j'ai peur d'être juste... ?   Je te redis ce soir.

Artouste

 le RC522 n'accepte que 10 tags j'ai peur d'être juste... ?   Je te redis ce soir.
Bonjour
Hé non !
Tu travaille là sur un vieux (et pas beau :smiley-mr-green: ) code
un MFRC522 n'est absolument pas limité en terme de nombre de tag
J'avais pensé 10 à l'époque simplement parce que  c'etait l'ordre de grandeur du nombre des tags que je voulais utiliser
sans partir sur du programme "imbitable à maintenir facilement

raisonner avec 10  100 1000   10K  1M  "tags" ou autres  implique des facteurs d'échelles differents et donc des méthodes differentes pour l'approche un projet

lesept

On trouve des écrans avec boutons sur le même PCB : 5€ chez Ali





Ce n'est qu'un exemple, il faut bien le choisir, si possible prendre un modèle qui communique en I2C pour simplifier la connexion.

Quant au boitier, ça doit pouvoir se trouver aussi, ou s'imprimer...

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

yohann74

je ne travaille pas demain, je regarde de plus prêt, de prime abord le badge master est reconnu et passe mais pas Régis. A demain bonne soirée.

lesept

Alors copie dans ton message ce qui apparaît dans la console, pour le badge master et pour Régis.

Fais le avec master pris Régis, puis recommence avec Régis en premier. Merci
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

yohann74

Salut,

Alors je viens de les passer et dans les 2 cas (master avant régis et inversement) j'ai de noté :

accés autorisé salut master;  et pour le second tag :

08:31:46.889 -> Erreur lecture badgeCard UID: 27 A7 24 D9


Je viens de revérifier uID du badge en question avec ton code et ceux ci sont bons...

@Artouste : ok je comprend mieux je ne comprenais pas pourquoi c'était limité alors que le lecteur de tag ne sert ici que de lecteur et pas de disque dur ...merci  ;)


Par rapport à l'écran 4 lignes avec Bouton ça semble pas évident à trouver...


Il y en a 1 mais à 50 euros. Celui que tu me donnes en exemple semble bien mais faut que je vois si je peux l'installer sur un Uno en gardant de la place pour le RFID et le Relais voire les leds.
Et c'est pas évident qu il y ai la librairie qui va bien avec car je l'ai pas trop vu sur les forum.
 
Sinon il y a le 2 lignes avec keypad donc menu déroulant ou un 4 lignes avec BP déporté...

lesept

#44
Jan 23, 2020, 11:59 am Last Edit: Jan 23, 2020, 12:06 pm by lesept
Alors je viens de les passer et dans les 2 cas (master avant régis et inversement) j'ai de noté :

accés autorisé salut master;  et pour le second tag :

08:31:46.889 -> Erreur lecture badgeCard UID: 27 A7 24 D9
Ces numéros correspondent au tag 'Master', j'aimerais voir ce qui se passe pour Régis. Peux-tu prendre cette modif du code et me donner l'ensemble de ce qui apparaît sur la console dans les deux cas (Master puis Régis et inversement) ?

Code: [Select]
#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

#define SS_PIN 10    //Arduino Uno
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522 instance.
MFRC522::MIFARE_Key key;

byte serNumLu[4] = {0};
struct Params {
  char nom;
  byte uID[4];
  bool existe;
  int nbUtils;
  int credit;
};
#define nbUtilisateurs 10
struct Params Utilisateur[nbUtilisateurs];

int buzzer = 8;
int led_rouge = 14;
int led_verte = 15;

int tagok = 255;

void master () {
  Serial.println("Badge master");
  lcd.setCursor(0, 0);
  lcd.print("ACCES AUTORISE");
  lcd.setCursor(0, 1);
  lcd.print("SALUT master");
  digitalWrite(led_verte, HIGH);
  tone(buzzer, 1200, 100);
  delay(300);
  tone(buzzer, 1200, 100);
  delay(2000);
  digitalWrite(led_verte, LOW);
}

void user (int numero) {
  Serial.print("Badge utilisateur ");
  Serial.println(numero);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ACCES AUTORISE");
  lcd.setCursor(0, 1);
  lcd.print(Utilisateur[numero].nom);
  ++Utilisateur[numero].nbUtils ;
  --Utilisateur[numero].credit;
  Serial.print (Utilisateur[numero].nbUtils);
  Serial.print (" utilisations, credit :");
  Serial.println(Utilisateur[numero].credit);
  if (Utilisateur[numero].credit < 0) {
    lcd.setCursor(0, 1);
    lcd.print("CREDIT DEPASSE");
  }
}

void inconnu () {
  Serial.println("Badge non reconnu");
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ACCES REFUSE");
}

void autre () {
  Serial.println("Erreur lecture badge");
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ERREUR LECTURE");
}

void initUsers() {
  //ini le tableau des badges
  // Master
  Utilisateur[0].nom = "Master";
  Utilisateur[0].uID[0] = 39;
  Utilisateur[0].uID[1] = 167;
  Utilisateur[0].uID[2] = 36;
  Utilisateur[0].uID[3] = 217;
  Utilisateur[0].existe = true;
  Utilisateur[0].nbUtils = 0;
  Utilisateur[0].credit = 10000;

  // Utilisateur 1
  Utilisateur[1].nom = "Regis";
  Utilisateur[1].uID[0] = 228;
  Utilisateur[1].uID[1] = 46;
  Utilisateur[1].uID[2] = 5;
  Utilisateur[1].uID[3] = 30;
  Utilisateur[1].existe = true;
  Utilisateur[1].nbUtils = 3;
  Utilisateur[1].credit = 10;
  // Pierre
  Utilisateur[2].nom = "Pierre";
  Utilisateur[2].uID[0] = 0;
  Utilisateur[2].uID[1] = 0;
  Utilisateur[2].uID[2] = 0;
  Utilisateur[2].uID[3] = 0;
  Utilisateur[2].existe = true;
  Utilisateur[2].nbUtils = 4;
  Utilisateur[2].credit = 8;

  // Bernadette
  Utilisateur[3].nom = "Bernadette";
  Utilisateur[3].uID[0] = 0;
  Utilisateur[3].uID[1] = 0;
  Utilisateur[3].uID[2] = 0;
  Utilisateur[3].uID[3] = 0;
  Utilisateur[3].existe = false; // Elle a quitté l'immeuble
  Utilisateur[3].nbUtils = 12;
  Utilisateur[3].credit = 3;

}

void setup() {
  pinMode(led_rouge, OUTPUT);
  pinMode(led_verte, OUTPUT);
  pinMode(buzzer, OUTPUT);
  lcd.begin(16, 2);   // Init le lcd
  SPI.begin();        // Init SPI bus
  Serial.begin(9600);
  mfrc522.PCD_Init(); // Init MFRC522 card

  initUsers();
  lcd.print("Passez le badge");
  lcd.setCursor(0, 1);
  lcd.print("sur le lecteur");
}

void loop() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) return;
 
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) return;

  Serial.print("Card UID:");    //Dump UID
  for (byte i = 0; i < 4; i++) {
    serNumLu[i] = mfrc522.uid.uidByte[i];
    Serial.print(serNumLu[i] < 0x10 ? " 0" : " ");
    Serial.print(serNumLu[i]);
    Serial.print("(");
    Serial.print(serNumLu[i], HEX);
    Serial.print(")");
  }
  Serial.println();

  tagok = 255;
  for  (byte i = 0; i < nbUtilisateurs; i++) {
    byte nok = 0;
    for (byte j = 0; j < 4; j++) if (serNumLu[j] == Utilisateur[i].uID[j]) ++nok;
    if (nok == 4) tagok = i; // carte reconnue dans la liste
  }
  switch (tagok) {
    case 0:
      master();
      // instructions master
      break;
    case 1-10:
      user(tagok);
      // instructions user connu
      break;
    case 255:
      inconnu();
      // badge inconnu
      break;
    default:
      autre();
      // instructions si autre numéro
  }
  while (mfrc522.PICC_IsNewCardPresent());
}

(modification des print en println et code UID en décimal et hexa)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Go Up