Bonjour.
Je travail pour un organisme d'éducation populaire sur une série d'ateliers pour présenter différentes facette des mécanismes impliqués dans les processus d'évolution et de disparition d'espèce. Ma demande concerne une activité visant à parler des espèces endogènes.
Afin de rendre le propos plus interactif, le but serait de placer des figurines animales sur différents lieux d'un planisphère pour retrouver leur zone d'origine.
J'ai eu donc l'idée d'associer un arduino avec des lecteurs RFID.
Le principe du montage est simple : Si la carte rfid est placée au bon endroit alors l'écran affiche : "espece reconnue" si la carte n'est pas placée au bon endroit alors l'écran affiche "espece non présente ici."
probleme : Je n'ai aucune compétence en code et en arduino. Donc, utilisation à base d'I.A car je n'ai malheureusement pas la possibilité de faire autrement ( pas de budget et pas de temps)
Je souhaiterai donc que quelqu'un puisse me dire si ce code fonctionne vraiment.
Je vous remercie d'avance.
#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define NB_LECTEURS 6
// LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pins SS (SDA) pour chaque lecteur
const byte ssPins[NB_LECTEURS] = {10, 8, 7, 6, 5, 4};
// Pins RST pour chaque lecteur
const byte rstPins[NB_LECTEURS] = {9, 3, 2, A0, A1, A2};
// Création des lecteurs RFID
MFRC522 lecteurs[NB_LECTEURS] = {
MFRC522(ssPins[0], rstPins[0]),
MFRC522(ssPins[1], rstPins[1]),
MFRC522(ssPins[2], rstPins[2]),
MFRC522(ssPins[3], rstPins[3]),
MFRC522(ssPins[4], rstPins[4]),
MFRC522(ssPins[5], rstPins[5]),
};
// Tableau des UID valides (exemples fictifs à remplacer par les vrais UID de tes cartes)
byte uids[NB_LECTEURS][4] = {
{0x11, 0x22, 0x33, 0x44}, // UID carte 0 → lecteur 0
{0xAA, 0xBB, 0xCC, 0xDD}, // UID carte 1 → lecteur 1
{0x01, 0x02, 0x03, 0x04}, // UID carte 2 → lecteur 2
{0x10, 0x20, 0x30, 0x40}, // UID carte 3 → lecteur 3
{0xA1, 0xB2, 0xC3, 0xD4}, // UID carte 4 → lecteur 4
{0x55, 0x66, 0x77, 0x88} // UID carte 5 → lecteur 5
};
// Compare un UID à un UID connu
bool compareUID(byte *uid1, byte *uid2) {
for (byte i = 0; i < 4; i++) {
if (uid1[i] != uid2[i]) {
return false;
}
}
return true;
}
void setup() {
Serial.begin(9600);
SPI.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Systeme RFID Pret");
delay(2000);
lcd.clear();
// Initialisation des lecteurs
for (int i = 0; i < NB_LECTEURS; i++) {
lecteurs[i].PCD_Init();
delay(100); // petit délai pour éviter conflits
}
}
void loop() {
for (int i = 0; i < NB_LECTEURS; i++) {
if (!lecteurs[i].PICC_IsNewCardPresent() || !lecteurs[i].PICC_ReadCardSerial()) {
continue;
}
Serial.print("Lecteur ");
Serial.print(i);
Serial.print(" a lu l'UID : ");
for (byte j = 0; j < lecteurs[i].uid.size; j++) {
Serial.print(lecteurs[i].uid.uidByte[j], HEX);
Serial.print(" ");
}
Serial.println();
// Vérifie si l'UID correspond à celui attendu pour ce lecteur
if (compareUID(lecteurs[i].uid.uidByte, uids[i])) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Espece reconnue");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Espece non");
lcd.setCursor(0, 1);
lcd.print("presente ici");
}
delay(3000);
lcd.clear();
lecteurs[i].PICC_HaltA();
lecteurs[i].PCD_StopCrypto1();
}
}







