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();
}