gabbyshimoni icon

newPuzzleRFID

gabbyshimoni | PRO | 03/14/19 01:51:25 PM UTC | 0 ⭐ | 376 👁️ | Never ⏰ | []
C++ |

3.03 KB

|

None

|

0 👍

/

0 👎

#include <SPI.h>
#include <MFRC522.h>
 
#define RST_PIN         9          // Configurable, see typical pin layout above
#define SS_1_PIN        10         // Configurable, take a unused pin, only HIGH/LOW required, must be diffrent to SS 2
#define SS_2_PIN        8          // Configurable, take a unused pin, only HIGH/LOW required, must be diffrent to SS 1
#define SS_3_PIN        7
#define SS_4_PIN        2
 
#define NR_OF_READERS   4
String codeRead[4], lastCodes[4];
String correctCodes[5] = {"abcd" , "efgh" , "ijkl" , "mnop" , "qrst"};
byte ssPins[] = {SS_1_PIN, SS_2_PIN, SS_3_PIN, SS_4_PIN};
 
MFRC522 mfrc522[NR_OF_READERS];   // Create MFRC522 instance.
boolean wasChanged = false;
 
 
/**
   Initialize.
*/
void setup() {
 
  Serial.begin(9600); // Initialize serial communications with the PC
  while (!Serial);    // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
 
  SPI.begin();        // Init SPI bus
 
  for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
    mfrc522[reader].PCD_Init(ssPins[reader], RST_PIN); // Init each MFRC522 card
    Serial.print(F("Reader "));
    Serial.print(reader);
    Serial.print(F(": "));
    mfrc522[reader].PCD_DumpVersionToSerial();
  }
}
 
/**
   Main loop.
*/
void loop() {
 
  for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
    // Look for new cards
 
    if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) {
      Serial.print(F("Reader "));
      Serial.print(reader);
      // Show some details of the PICC (that is: the tag/card)
      Serial.print(F(": Card UID:"));
 
      codeRead[reader] = "";
      for (byte i = 0; i < mfrc522[reader].uid.size; i++) {
        if (mfrc522[reader].uid.uidByte[i] < 10) codeRead[reader] += " 00" ;
        else if (mfrc522[reader].uid.uidByte[i] < 100)  codeRead[reader] += " 0";
        else codeRead[reader] += " ";
 
        codeRead[reader] += String(mfrc522[reader].uid.uidByte[i]);
 
      }
 
      Serial.println(reader);
      Serial.println(codeRead[reader]);
      if (lastCodes[reader] != codeRead[reader]) {
        lastCodes[reader] = codeRead[reader];
        wasChanged = true;
      }
 
      // Halt PICC
      mfrc522[reader].PICC_HaltA();
      // Stop encryption on PCD
      mfrc522[reader].PCD_StopCrypto1();
    } //if (mfrc522[reader].PICC_IsNewC
    delay(100);
  } //for(uint8_t reader
  int correct = 0;
  if (wasChanged) {
    for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
      if (lastCodes[reader] == correctCodes[reader]) correct++;
    }
    Serial.print("You have: ");
    Serial.print(correct);
    Serial.println( " correct tags");
 
    if (correct == 4) {
      tone(6, 4000);
      digitalWrite(13, HIGH);
      delay(1000);
      noTone(6);
      scramble();
    }
  }
  wasChanged = false;
 
 
}
 
void scramble() {
  String tmp;
  for (int i = 0; i < 5; i++) {
    tmp = correctCodes[i];
    correctCodes[i] = correctCodes[i];
    correctCodes[i + 1]  = tmp;
  }
}

Comments