Bonjour,
J'essaye de trouver un moyen de faire reset le code quand badge est enlevé.
Je m'explique, le projet et de mettre 3 cartes RFID, lorsque les 3 badges sont sur les bonnes cartes RFID, un aimant se désactive.
Ce que j'aimerais c'est que lorsque un des badges est enlevé de la carte, le code se reset et donc l'aimant se réactive, ainsi de suite.
voici le code que j'ai pour les badges:
#define DEBUG
#include <SPI.h>
#include <MFRC522.h>
const byte numReaders = 3;
const byte ssPins[] = {2, 3, 4};
const byte resetPin = 8;
const byte lockPin = A0;
const String correctIDs[] = {"7162ca27", "71e0a827", "40724e1b"};
MFRC522 mfrc522[numReaders];
String currentIDs[numReaders];
void setup() {
#ifdef DEBUG
Serial.begin(9600);
Serial.println(F("Serial communication started"));
#endif
pinMode(lockPin, OUTPUT);
digitalWrite(lockPin, HIGH);
SPI.begin();
for (uint8_t i=0; i<numReaders; i++) {
mfrc522[i].PCD_Init(ssPins[i], resetPin);
Serial.print(F("Reader #"));
Serial.print(i);
Serial.print(F(" initialised on pin "));
Serial.print(String(ssPins[i]));
Serial.print(F(". Antenna strength: "));
Serial.print(mfrc522[i].PCD_GetAntennaGain());
Serial.print(F(". Version : "));
mfrc522[i].PCD_DumpVersionToSerial();
delay(100);
}
Serial.println(F("--- END SETUP ---"));
}
void loop() {
boolean puzzleSolved = true;
boolean changedValue = false;
for (uint8_t i=0; i<numReaders; i++) {
mfrc522[i].PCD_Init();
String readRFID = "";
if(mfrc522[i].PICC_IsNewCardPresent() && mfrc522[i].PICC_ReadCardSerial()) {
readRFID = dump_byte_array(mfrc522[i].uid.uidByte, mfrc522[i].uid.size);
}
if(readRFID != currentIDs[i]){
changedValue = true;
currentIDs[i] = readRFID;
}
if(currentIDs[i] != correctIDs[i]) {
puzzleSolved = false;
}
mfrc522[i].PICC_HaltA();
mfrc522[i].PCD_StopCrypto1();
}
if(changedValue){
for (uint8_t i=0; i<numReaders; i++) {
Serial.print(F("Reader #"));
Serial.print(String(i));
Serial.print(F(" on Pin #"));
Serial.print(String((ssPins[i])));
Serial.print(F(" detected tag: "));
Serial.println(currentIDs[i]);
}
Serial.println(F("---"));
}
if(puzzleSolved){
onSolve();
}
delay(100);
}
void onSolve(){
#ifdef DEBUG
Serial.println(F("Puzzle Solved!"));
#endif
digitalWrite(lockPin, LOW);
while(true) {
delay(1000);
}
}
String dump_byte_array(byte *buffer, byte bufferSize) {
String read_rfid = "";
for (byte i=0; i<bufferSize; i++) {
read_rfid = read_rfid + String(buffer[i], HEX);
}
return read_rfid;
}
En vous remerciant par avance pour vos conseils !
Bon week end !