Reset de la fonction

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 !

:warning:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ je l'ai déplacé vers le forum francophone pour vous pour cette fois...

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

le premier code donné ici Useful code snippets · miguelbalboa/rfid Wiki · GitHub permet de voir quand un tag arrive et quand il repart

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.