Voyant tes autres questions, je te propose une version de ton code, qui devrait répondre à tes questions, et peut-être en poser d'autres :
#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;
unsigned long serNumLu = 0;
unsigned long badge[10]; //déclaration de tableau de 10 badges
struct Params {
char nom[20];
bool existe;
int nbUtils;
int credit;
};
struct Params Utilisateur[10];
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++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
}
Serial.println();
serNumLu = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned
tagok = 255;
for (byte i = 0; i < 10; i++) if (serNumLu == badge[i]) 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
}
}
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
badge[0] = 3643054959; //badge master
badge[1] = 55; //badge 1
badge[2] = 44;//badge 2
badge [3] = 88; //badge 3
badge [4] = 33; //badge 4
badge [5] = 44; //badge 5
badge [6] = 55; //badge 6
badge [7] = 44; //badge 7
badge [8] = 44; //badge 8
badge [9] = 44; //badge 9
// Master
Utilisateur[0].nom = "Master";
Utilisateur[0].existe = true;
Utilisateur[0].nbUtils = 0;
Utilisateur[0].credit = 10000;
// Utilisateur 1
Utilisateur[1].nom = "Regis";
Utilisateur[1].existe = true;
Utilisateur[1].nbUtils = 3;
Utilisateur[1].credit = 10;
// Pierre
Utilisateur[2].nom = "Pierre";
Utilisateur[2].existe = true;
Utilisateur[2].nbUtils = 4;
Utilisateur[2].credit = 8;
// Bernadette
Utilisateur[3].nom = "Bernadette";
Utilisateur[3].existe = false; // Elle a quitté l'immeuble
Utilisateur[3].nbUtils = 12;
Utilisateur[3].credit = 3;
}