2016-06-18 89 views
0

我正在使用嵌入8種不同玩件的Mifare標籤創建遊戲。我將使用帶MFRC522的Arduino NANO(庫https://github.com/miguelbalboa/rfid)來實際讀取標籤,並使用ER301讀寫器(帶有電子閱讀器軟件)爲其分配播放片段編號。我將創造每件作品的倍數,以解決由於破損或盜竊而導致的任何問題(由於這些是相當獨特的玩法)。由於將會有8個不同的部分和每個部分4個副本,這將是32個UID的跟上。我寧願給每件作品分配一個不同的數字,每件作品的重複數量也相同 - 所以只有8個數字要跟上。MFRC522和特定扇區/塊閱讀

我的問題是 - 如何讀取MFRC522的某個塊和扇區?

具體而言,扇區2,塊8 - 因爲這是播放片段編號的Hex等價物出現的位置(當它被指定爲帶有電子閱讀器軟件和ER301書寫器的產品名稱)時。我理解使用MFRC522的庫來讀取UID,但這比我的理解要深入一些。

我已經爲Arduino寫了幾個草圖,但是這是我進入RFID世界的時候,比我以前的Arduino項目更加廣泛。一旦我可以讀取特定扇區&模塊,Arduino NANO將輸出其中放置了棋子的二進制表示(在數字I/O的4個上)。

+0

我將使用這個庫:https://github.com/miguelbalboa/rfid我還沒有嘗試過任何東西,因爲我還在收集零件。到目前爲止,我發現的所有內容都指向閱讀UID - 但我只想閱讀特定的部門(Sector2 Block8)。我已經有一位作家(ER301和eReader軟件),可以將我的信息寫入此扇區和區塊,並且已經驗證了這一點。一旦信息被MFRC和NANO讀取,我將使NANO輸出與4個數字I/O上的數字相等的二進制數。 – JMortonSalt

+0

此遊戲將涉及4個相同的Arduino NANO和MFRC522閱讀器。當每人讀取遊戲片時,它將在4個數字I/O上輸出二進制等價物(片段1到8)。這16個總輸出將被輸入到Arduino MEGA的16個數字I/O中,該輸入/輸出將跟蹤哪些棋子位於4個'位置'(4個NANO設置)。 – JMortonSalt

回答

0

您正在使用的庫提供的專用方法對MIFARE標籤進行讀寫操作:

StatusCode MIFARE_Read(byte blockAddr, byte *buffer, byte *bufferSize); 
StatusCode MIFARE_Write(byte blockAddr, byte *buffer, byte bufferSize); 

由於你的描述(部門2塊8)建議您使用MIFARE經典標籤,你會還需要對標籤進行身份驗證才能執行讀取/寫入操作。因此,您還需要驗證方法:

StatusCode PCD_Authenticate(byte command, byte blockAddr, MIFARE_Key *key, Uid *uid); 

正如你會使用這個庫來讀取UID

if (mfrc522.PICC_ReadCardSerial()) { 
    Serial.print(F("Card UID:")); 
    dump_bytes(mfrc522.uid.uidByte, mfrc522.uid.size); 
} 

你也可以訪問這些讀/寫方法:

MFRC522::StatusCode status; 
MFRC522::MIFARE_Key key; 
byte buffer[18]; 
byte size = sizeof(buffer); 
for (byte i = 0; i < MFRC522::MF_KEY_SIZE; ++i) { 
    key.keyByte[i] = 0xFF; 
} 

if (mfrc522.PICC_ReadCardSerial()) { 
    status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 8, &key, &(mfrc522.uid)); 
    if (status == MFRC522::STATUS_OK) { 
     status = mfrc522.MIFARE_Read(8, buffer, &size); 
     if (status == MFRC522::STATUS_OK) { 
      Serial.print(F("Data (block = 8): ")); 
      dump_bytes(buffer, 16); 
     } 
    } 
} 

請注意,我假設使用密鑰A將塊8(=扇區2,塊0)設爲readbale,並且將密鑰A設置爲默認傳輸密鑰FF FF FF FF FF FF。如果您的其他讀者更改了這些值,則需要相應地調整代碼。此外,我使用僞方法dump_bytes(array, length)來表示有趣的值是array的第一個length字節。實際打印這些值的實現取決於您。

Btw。一個關於如何使用該庫進行讀/寫操作的完整示例實際上與該庫一起出貨!所以你可以看看ReadAndWrite.ino關於如何使用這個庫。

+0

謝謝Michael!正如我所說,所有這些對我來說都是新的,任何幫助都非常感謝。您完全正確地說我使用的是Mifare Classic標籤,並且默認傳輸鍵是FF FF FF FF FF FF。 – JMortonSalt

+0

我實際上不會打印該值,但實際上將讀取的值分配給整數pieceNum。我發現給標籤分配一個數字「1」導致「3100000000000000」被寫入塊8,「2」的塊數導致「3200000000000000」。我將如何將這些轉換爲存儲在pieceNum中的簡單「1」或「2」?對新手問題抱歉。 – JMortonSalt