mizuki20123
@mizuki20123

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

一台のArduino UNOで二つのMFRC522を使用する方法

目的

2つのMFRC522に同時にカードが1枚ずつかざされていると反応する仕組みを作りたい

1台のArduinoで2つのMFRC522リーダーを動かしたいと考えています。
2つのリーダーが同時に別のカードがかざされていると反応する仕組みを作りたいです。

ただ疑問点として、そもそも複数のMFRC522をArduino UNOに接続することは可能なのか
可能な場合配線とコードについて教えてほしいです。

解決方法を教えて下さい。

現在一台の形で使用しているコードはこちらになります

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);
byte targetUID[] = {0x53, 0x0D, 0x98, 0x52, 0x61, 0x00, 0x01};
unsigned long lastInitTime = 0;  // 最後に初期化された時間
unsigned long initInterval = 10000;  // 初期化間隔(ミリ秒)

void setup()
{
  Serial.begin(57600);
  SPI.begin();
  mfrc522.PCD_Init();
  Serial.println("カードをかざしてください。");
}

void loop()
{
  if (shouldInitialize())  // 初期化が必要かどうかを確認
  {
    initialize();  // 初期化関数を呼び出す
    delay(1000);   // ボタンバウンス対策のため短時間待機
  }

  if (mfrc522.PICC_IsNewCardPresent())
  {
    if (mfrc522.PICC_ReadCardSerial())
    {
      mfrc522.PICC_DumpDetailsToSerial(&(mfrc522.uid));
      Serial.println();

      if (memcmp(mfrc522.uid.uidByte, targetUID, mfrc522.uid.size) == 0)
      {
        Serial.println("UIDが一致しました。");
      }
      else
      {
        Serial.println("UIDが一致しません。");
      }
      Serial.println();

      while (mfrc522.PICC_IsNewCardPresent())
      {
        delay(100);
      }

      Serial.println("カードがかざされていません。");
    }
  }

  delay(100);
}

bool shouldInitialize()
{
  // 現在の時間が初期化の間隔を越えているかどうかを確認
  return (millis() - lastInitTime >= initInterval);
}

void initialize()
{
  Serial.println("初期化処理を行います。");
  // ここに初期化のためのコードを追加
  SPI.begin();
  mfrc522.PCD_Init();
  Serial.println("チップをかざしてください。");
  lastInitTime = millis();  // 初期化が行われた時間を更新
}
0

1Answer

Comments

  1. @mizuki20123

    Questioner

    解決しました
    参考になります 
    ありがとうございました

Your answer might help someone💌