我有一个草图运行MFRC522 RFID阅读器工作正常,但我的目的是将卡刷卡记录在microSD卡上。
问题是,只要我添加SD卡读卡器,无论是否初始化,RFID阅读器都会停止工作。 这似乎是SPI总线上的一个问题。我已经尝试在电路中添加上拉电阻并将芯片选择引脚设置为高电平,然后再初始化任何电路板,但似乎没有任何工作。
这是我的代码:
#include <SPI.h>
#include <MFRC522.h>
#include <SD.h>
// RFID constants & objects
#define RFPin 10
#define resetPin 9
MFRC522 mfrc522(RFPin, resetPin);
// SD constants
#define SDPin 8
// Other global variables
String IDString;
byte IDList[4];
void setup() {
pinMode(2, OUTPUT);// For testing
// Set both chip select pins high
pinMode(SDPin, OUTPUT);
digitalWrite(SDPin, HIGH);
pinMode(RFPin, OUTPUT);
digitalWrite(RFPin, HIGH);
delay(10);
// Init serial bus
Serial.begin(9600);
// Wait for serial bus to open
while (!Serial);// Opens even when not USB connected
// Init SPI bus
SPI.begin();
// Initialise RFID board
mfrc522.PCD_Init();
delay(1000);// Just in case SPI is still busy
// Initialise SD card board
if (!SD.begin(SDPin)) {
// SD card board failed to initialise
Serial.println("SD failed");
return;
}
}
void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
for(int i = 0; i < 4; i++) {
digitalWrite(2, HIGH);
delay(100);
digitalWrite(2, LOW);
delay(100);
}
IDString = "";
// Get 4 byte ID
for (int i = 0; i < 4; i++) {
IDList[i] = mfrc522.uid.uidByte[i];
// Serial.print(IDList[i], HEX);
if(IDList[i] < 16) {
IDString += "0" + String(IDList[i], HEX) + "-";
} else {
IDString += String(IDList[i], HEX) + "-";
}
}
mfrc522.PICC_HaltA(); // Stop reading
IDString = IDString.substring(0, IDString.length() - 1);
Serial.println(IDString);
.
.
.
Rest of code
一切都初步确定好了但是一旦进入主循环,程序就永远不会超过第一个声明:检查RFID卡是否存在。
有人可以帮忙吗? 这可能是因为RFDI板是3.3V驱动而SD板是5V驱动的(但是有3.3V稳压器)?每个都有自己独立的电源线
编辑#1: 当MicroSD板插入但未通电时,RFID板工作正常 我还尝试添加一个子程序,在每个循环开始时将两个芯片选择引脚拉高,但无济于事。
编辑#2:编辑#2: SD板在这个草图中工作,我可以从中获取卡的详细信息。 编辑#3:编辑#3: 一旦从SD板上移除MISO线,RFID卡就会再次工作。 显然SD模块没有发布MISO线......答案 0 :(得分:0)
这不是最优雅的解决方案,但我现在通过在SD板的MISO输出和MISO线之间连接一个NPN晶体管到引脚12来实现它。它需要另外一个引脚来阻止/解除阻塞SD板使用的MISO线,但它可以工作。
正如我所说,这不优雅,我仍然渴望听到更好的解决方案。