2016-09-12 42 views
1

我正嘗試使用Arduino Uno從帶有SL018屏蔽的MIFARE卡中讀取特定塊。寫它是沒有問題的,但對於一個項目我和一個同學正在努力,我們需要能夠讀取輸入(即使是0或1就足夠了)。無法使用SL018從MIFARE的特定塊讀取字節

使用圖書館,我們在網上找到了一個代碼,我們來到這個代碼:

/** 
* Arduino to SL018/SL030 wiring: 
* A4/SDA  2  3 
* A5/SCL  3  4 
* 5V   4  - 
* GND  5  6 
* 3V3  -  1 
*/ 

#include <Wire.h> 
#include <SL018.h> 

byte block = 0x01; 

SL018 rfid; 

void setup() 
{ 
    Wire.begin(); 
    Serial.begin(19200); 

    // prompt for tag 
    Serial.println("Show me your tag"); 
} 

void loop() 
{ 
    rfid.seekTag(); 

    while(!rfid.available()); 

    Serial.print("Block "); 
    printHex(block); 
    Serial.print(": "); 
    printArrayHex(rfid.getBlock(), 16); 
    Serial.print(" "); 
    printArrayAscii(rfid.getBlock(), 16); 
    Serial.println(); 
} 

有誰知道我們如何能夠閱讀代碼的特定部分,例如,塊1?

回答

0

看看這個SL018庫房的example code。您可以使用帶有串行終端的代碼的用戶界面。如果你想讀取標籤時,intresting部分在線路111

action = READ; 
// specify what to read 
block = 0; 
numBlocks = 16; 
// tag has to be selected first 
rfid.selectTag(); 

在定義塊後case 'R':(讀取的扇區),你可以閱讀。

0

鑑於您參考塊,你似乎認爲一個塊由在您的通話16個字節printArrayHex(),我假設你嘗試讀取MIFARE經典

你會先等待一個標籤:

rfid.seekTag(); 
while (!rfid.available()); 

然後,您可以驗證到您想要閱讀的部門。例如,要讀取塊號5(位於扇區1中),您需要對扇區1進行身份驗證。假設此扇區的密鑰A設置爲默認值(FF FF FF FF FF FF)並配置爲讀取訪問塊5,則可以使用方法:

byte TRANSPORT_KEY[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; 

// authenticate current sector using key type A and the key TRANSPORT_KEY 
rfid.authenticate(1, 0xAA, TRANSPORT_KEY); 

最後,你可以從塊5讀取數據:

rfid.readBlock(5); 
Serial.print("Block 5: "); 
printArrayHex(rfid.getBlock(), 16); 
Serial.println(); 

另外,如果你想讀MIFARE經典1K卡的整個內存(並假設所有塊可以使用帶有TRANSPORT_KEY值的鍵A來讀取),您可以使用類似下面的內容:

for (byte sector = 0; sector < 16; ++sector) { 
    // authenticate current sector using key type A and the key TRANSPORT_KEY 
    rfid.authenticate(sector, 0xAA, TRANSPORT_KEY); 
    for (byte block = 0; block < 4; ++block) { 
     rfid.readBlock(sector * 4 + block); 

     Serial.print("Sector "); 
     Serial.print(sector); 
     Serial.print(", Block "); 
     Serial.print(block); 
     Serial.print(": "); 
     printArrayHex(rfid.getBlock(), 16); 
     Serial.println(); 
    } 
}