首页 > 解决方案 > 如何从 RFID 卡读取数据,然后通过串行监视器用新数据覆盖它?

问题描述

我的项目首先需要我的 arduino 代码,从特定的 RFID 块读取数据,然后将其显示在串行监视器上。显示后,我需要通过串行监视器输入来用新数据替换/覆盖它。我的问题是,我如何做到这一点,而不需要在我的 RFID 阅读器附近连续 2 次 RFID 抽头,然后才能真正写入新数据?

我的代码是这样的:

// code inside the loop
//-----------------------------------------Block 12 Read--------------------------------------
byte Hash1[18]; 

block = 12;
len = 18;

status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); //line 834 of MFRC522.cpp file
  if (status != MFRC522::STATUS_OK) {
      Serial.print(F("Authentication failed: "));
      Serial.println(mfrc522.GetStatusCodeName(status));
      return;
  }

  status = mfrc522.MIFARE_Read(12, Hash1, &len);
if (status != MFRC522::STATUS_OK) {
      return;
  } 

//SERIAL PRINT
for (uint8_t i = 0; i < 16; i++){
    if (Hash1[i] != 32){
      Hash1[i];
      IHash1[i] = (char)Hash1[i];
    }
  }

InitialHash = String(InitialHash + IHash1);

len ="";
Serial.println(InitialHash);
InitialHash = "";


//-----------------------------------------Block 12 Write--------------------------------------

if (Serial.available()) {
    
  len = Serial.readBytes((char *) buffer, 38) ; // read family name from serial
  for (byte i = len; i < 30; i++) buffer[i] = ' ';     // pad with spaces

  
  
  block = 12;
  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
    return;
  }
  
  else
  
  // Write block
  status = mfrc522.MIFARE_Write(block, buffer, 16);
  if (status != MFRC522::STATUS_OK) {
    return;
  }
}
mfrc522.PICC_HaltA(); // Halt PICC
mfrc522.PCD_StopCrypto1();  // Stop encryption on PCD

标签: arduinorfidserial-communication

解决方案


推荐阅读