2016-06-18 5 views
0

私は8種類の遊びに埋め込まれたMifareタグを使用してゲームを作成しています。私はMFRC522(ライブラリhttps://github.com/miguelbalboa/rfid)でArduino NANOを使ってタグの実際の読み取りを行い、ER301リーダライタ(eReaderソフトウェアを使用)を使って演奏番号を割り当てます。私は破損や盗難(これは独特の演奏作品であるために)の損失について私が持っていた問題を解決するために、各作品の倍数を作成します。 8つの異なる部分と各部分の4つのコピーがあるので、それは追いつくために32のUIDになります。私はむしろ、それぞれの作品に異なる番号を付け、それぞれの作品の同じ数をその複製に割り当てたいと思います。従って、8つの数字しか追いつかないのです。MFRC522と特定のセクター/ブロック読書

私の質問は - どのように私はMFRC522で特定のブロックとセクタを読むのですか?

具体的には、セクター2、ブロック8 - これは、演奏曲番号のHex相当が表示されるためです(eReaderソフトウェアとER301ライターで商品名として割り当てられている場合)。私はMFRC522がUIDを読むためにライブラリを使用することを理解していますが、これは私の理解よりもさらに深いものです。

私はArduinoのスケッチをいくつか書いていますが、これはRFIDの世界への私の進出であり、私の以前のArduinoプロジェクトよりかなり広範囲です。特定のセクター&ブロックを読み取ると、Arduino NANOは演奏作品が配置されたバイナリ表現(デジタルI/Oのうちの4つ)を出力します。

+0

私はこのライブラリを使用しています:https://github.com/miguelbalboa/rfid私はまだ部品を収集しているので、まだ何も試していません。私が今までに見つけたことはすべて、UIDを読むことを指摘していますが、私はただ特定のセクター(Sector2 Block8)を読んでみたいです。私はすでにこのセクターとブロックに自分の情報を書き込むことができる作家(ER301とeReaderソフトウェア)を持っており、これを確認しました。情報がMFRC&NANOによって読み取られると、4つのデジタルI/Oに対応する2進数のNANO出力が得られます。 – JMortonSalt

+0

このゲームには、Arduino NANOとMFRC522リーダーの4つの同一設定が含まれます。それぞれが再生ピースを読み込むと、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クラシックタグを使用していることを示唆しているので、あなたが希望読み取り/書き込み操作を実行するためにタグを認証する必要もあります。

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); 
     } 
    } 
} 
:あなたは

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

はあなたにもアクセスすることができましたUIDにこれらの読み取り/書き込み方法を読み取るためのライブラリを使用するのと同じよう

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

:したがって、あなたはまた、認証方法が必要になります

ブロックA(=セクタ2、ブロック0)がキーAを使用してリードベールされ、そのキーAがデフォルトのトランスポートキーFF FF FF FF FF FFに設定されているとします。あなたの他の読者がそれらの値を変更した場合は、それに応じてコードを適合させる必要があります。さらに、擬似メソッドdump_bytes(array, length)を使用して、興味深い値が最初のlengthバイトのarrayであることを示しました。これらの値を実際に印刷する実装は、あなた次第です。

Btw。読み書き操作にライブラリを使用する方法の完全な例は、実際にはライブラリと一緒に出荷されます。したがって、そのライブラリの使い方についてはReadAndWrite.inoをご覧ください。

+0

ありがとうマイケル!私が言ったように、これはすべて私には新しく、どんな助けも大歓迎です。私はMifare Classicタグを使用していて、デフォルトのトランスポートキーはFF FF FF FF FF FFであると言っても間違いありません。 – JMortonSalt

+0

私は実際に値を印刷するのではなく、実際に読み取った値を整数pieceNumに代入します。私は、 "3100000000000000"がブロック8に書き込まれ、 "2"の個数が "3200000000000000"になることを、タグに「1」の個数を割り当てることが観察されました。私はpieceNumに格納されたこれらを単に "1"または "2"に変換するのですか?初心者の質問に対する謝罪。 – JMortonSalt

関連する問題