Arduino UNO + MFRC-522でmifareのIDを読み取る
1. Connection:
RFID / UNO(digital pin)
SDA / 10
SCK / 13
MOSI / 11
MISO / 12
GND / GND
RST / 9
3.3V / 3.3V
MFRC-522を使用。
http://www.amazon.co.jp/gp/product/B00HF1ACY6
タグは、同梱品とMM-NFCTを使用。
http://www.amazon.co.jp/gp/product/B00GXSGL5G
同梱品は常に読み取りを続けるが、MM-NFCTは一度読み取るとその後は読み取りを停止する。
/** * Read a card using a mfrc522 reader on your SPI interface * Pin layout should be as follows (on Arduino Uno): * MOSI: Pin 11 / ICSP-4 * MISO: Pin 12 / ICSP-1 * SCK: Pin 13 / ISCP-3 * SS: Pin 10 * RST: Pin 9 * * Script is based on the script of Miguel Balboa. * New cardnumber is printed when card has changed. Only a dot is printed * if card is the same. * * @version 0.1 * @author Henri de Jong * @since 06-01-2013 */ #include <SPI.h> #include <RFID.h> #define SS_PIN 10 #define RST_PIN 9 #define STATE_SET -3 #define STATE_CONTINUE -2 #define STATE_STOP -1 #define STATE_INIT 0 #define STATE_REMOVE 1 RFID rfid(SS_PIN, RST_PIN); // Setup variables: int serNum0; int serNum1; int serNum2; int serNum3; int serNum4; int onOff = STATE_INIT; unsigned long lastSenseTime = 0; unsigned long lastSendTime = 0; void setup() { Serial.begin(9600); SPI.begin(); rfid.init(); } void loop() { if (rfid.isCard()) { if (rfid.readCardSerial()) { if (rfid.serNum[0] != serNum0 || rfid.serNum[1] != serNum1 || rfid.serNum[2] != serNum2 || rfid.serNum[3] != serNum3 || rfid.serNum[4] != serNum4 ) { Serial.println("Card found"); serNum0 = rfid.serNum[0]; serNum1 = rfid.serNum[1]; serNum2 = rfid.serNum[2]; serNum3 = rfid.serNum[3]; serNum4 = rfid.serNum[4]; //Serial.println(" "); Serial.println("Cardnumber:"); Serial.print("Dec: "); Serial.print(rfid.serNum[0], DEC); Serial.print(", "); Serial.print(rfid.serNum[1], DEC); Serial.print(", "); Serial.print(rfid.serNum[2], DEC); Serial.print(", "); Serial.print(rfid.serNum[3], DEC); Serial.print(", "); Serial.print(rfid.serNum[4], DEC); Serial.println(" "); Serial.print("Hex: "); Serial.print(rfid.serNum[0], HEX); Serial.print(", "); Serial.print(rfid.serNum[1], HEX); Serial.print(", "); Serial.print(rfid.serNum[2], HEX); Serial.print(", "); Serial.print(rfid.serNum[3], HEX); Serial.print(", "); Serial.print(rfid.serNum[4], HEX); Serial.println(" "); onOff = STATE_SET; //Serial.println(onOff); } else { onOff = STATE_CONTINUE; //Serial.println(onOff); Serial.print("."); } lastSenseTime = millis(); } } else { if (millis() - lastSenseTime > 100) { if (onOff == STATE_SET || onOff == STATE_CONTINUE) { onOff = STATE_REMOVE; //Serial.println(onOff); } else if (onOff == STATE_REMOVE) { onOff = STATE_STOP; //Serial.println(onOff); } } } rfid.halt(); }