带两个RC522的Arduino
为了给我的卡雷拉拉拉皮条,我要建一个圆形计数器。 它包含一个Arduino Nano、一个lcd和2个rc522 rfid阅读器。 读卡器共享scd、miso、mosi的引脚,并拥有sda和rst的引脚 事实上,我不能让两个读者同时工作。只有当一个或另一个读卡器实际插入(硬核!)到breadbord时,它才能工作(无需更改代码)。但不是在一起 我的代码一定有问题,但在哪里? (RFID通信由[addicore][1]中的示例输入) 有人给我一个提示吗带两个RC522的Arduino,arduino,rfid,Arduino,Rfid,为了给我的卡雷拉拉拉皮条,我要建一个圆形计数器。 它包含一个Arduino Nano、一个lcd和2个rc522 rfid阅读器。 读卡器共享scd、miso、mosi的引脚,并拥有sda和rst的引脚 事实上,我不能让两个读者同时工作。只有当一个或另一个读卡器实际插入(硬核!)到breadbord时,它才能工作(无需更改代码)。但不是在一起 我的代码一定有问题,但在哪里? (RFID通信由[addicore][1]中的示例输入) 有人给我一个提示吗 #include <Addic
#include <AddicoreRFID.h>
#include <SPI.h>
#include <LiquidCrystal.h>
#define uchar unsigned char
#define uint unsigned int
// create AddicoreRFID object to control the RFID module
/////////////////////////////////////////////////////////////////////
//set the pins
/////////////////////////////////////////////////////////////////////
//2 - SCK Digital 13
//3 - MOSI Digital 11
//4 - MISO Digital 12
const int SS1 = 8; //RFID1
const int RST1 = 9;
AddicoreRFID myRFID1 (SS1, RST1);
const int SS2 = 10; //RFID2
const int RST2 = A0;
AddicoreRFID myRFID2 (SS2, RST2);
//Maximum length of the array
#define MAX_LEN 16
//LCD init
// * LCD RS pin to digital pin 7
// * LCD Enable pin to digital pin 6
// * LCD D4 pin to digital pin 5
// * LCD D5 pin to digital pin 4
// * LCD D6 pin to digital pin 3
// * LCD D7 pin to digital pin 2
LiquidCrystal lcd1(7, 6, 5, 4, 3, 2);
//Counter
int a = 0;
int b = 0;
void setup() {
Serial.begin(9600);
//LCD init
init_lcd1();
myRFID1.AddicoreRFID_Init();
myRFID2.AddicoreRFID_Init();
}
void loop() {
uchar i, tmp, checksum1;
uchar status;
uchar str1[MAX_LEN];
uchar str2[MAX_LEN];
///////////// RFID1 ///////////////////
// 0x4400 = Mifare_UltraLight -Tag Type
str1[1] = 0x4400;
//Find tags, return tag type
// Manipuliert str1(!);
//AddicoreRFID::AddicoreRFID_Request(byte reqMode, byte *TagType)
status = myRFID1.AddicoreRFID_Request(PICC_REQIDL, str1);
if (status == MI_OK) {
serial_TagDetect(str1, 1);
}
//Anti-collision, return tag serial number 4 bytes
// Manipuliert str1(!);
status = myRFID1.AddicoreRFID_Anticoll(str1);
if (status == MI_OK) {
serial_TagData(str1);
lcd_counter(str1, lcd1);
//delay(500);
}
myRFID1.AddicoreRFID_Halt(); //Command tag into hibernation
///////////// RFID2 ///////////////////
str2[1] = 0x4400;
//Find tags, return tag type
status = myRFID2.AddicoreRFID_Request(PICC_REQIDL, str2);
if (status == MI_OK) {
serial_TagDetect(str2, 2);
}
//Anti-collision, return tag serial number 4 bytes
status = myRFID2.AddicoreRFID_Anticoll(str1);
if (status == MI_OK) {
serial_TagData(str2);
lcd_counter(str2, lcd1);
// liest sonst nonstop die Tags!
//delay(500);
}
myRFID2.AddicoreRFID_Halt(); //Command tag into hibernation
}
void init_lcd1() {
... inits the lcd ...
}
// Zählt das Auftreten der Tags
void lcd_counter (uchar *str, LiquidCrystal lcd ) {
... output to the lcd ....
}
// Meldet gefundenen Tag auf der Konsole
void serial_TagDetect(uchar *str, int reader) {
if (reader == 1) {
Serial.print("RFID1 tag detected: ");
} else {
Serial.print("RFID2 tag detected: ");
}
Serial.print(str[0], BIN);
Serial.print(" , ");
Serial.print(str[1], BIN); Serial.println(" ");
}
// gibt Tagdaten auf der Konsole aus
void serial_TagData(uchar *str) {
uchar checksum1 = str[0] ^ str[1] ^ str[2] ^ str[3];
Serial.print("The tag's number is: ");
//Serial.print(2);
Serial.print(str[0]);
Serial.print(" , ");
Serial.print(str[1], BIN);
Serial.print(" , ");
Serial.print(str[2], BIN);
Serial.print(" , ");
Serial.print(str[3], BIN);
Serial.print(" , ");
Serial.print(str[4], BIN);
Serial.print(" , ");
Serial.println(checksum1, BIN);
}
#包括
#包括
#包括
#定义uchar无符号字符
#定义uint unsigned int
//创建AddicoreRFID对象以控制RFID模块
/////////////////////////////////////////////////////////////////////
//别针
/////////////////////////////////////////////////////////////////////
//2-SCK数字13
//3-MOSI数字11
//4-味噌数码12
常数int SS1=8//RFID1
常数int RST1=9;
AddicoreRFID myRFID1(SS1,RST1);
常数int SS2=10//RFID2
常数int RST2=A0;
AddicoreRFID myRFID2(SS2,RST2);
//数组的最大长度
#定义最大长度16
//液晶初始化
//*LCD RS引脚至数字引脚7
//*LCD启用引脚至数字引脚6
//*LCD D4引脚至数字引脚5
//*LCD D5引脚至数字引脚4
//*LCD D6引脚至数字引脚3
//*LCD D7引脚至数字引脚2
液晶lcd1(7,6,5,4,3,2);
//柜台
int a=0;
int b=0;
无效设置(){
Serial.begin(9600);
//液晶初始化
init_lcd1();
myRFID1.AddicoreRFID_Init();
myRFID2.AddicoreRFID_Init();
}
void循环(){
uchar i、tmp、checksum1;
乌查尔地位;
uchar str1[MAX_LEN];
uchar str2[MAX_LEN];
/////////////RFID1///////////////////
//0x4400=Mifare\U超轻-标签类型
str1[1]=0x4400;
//查找标记,返回标记类型
//Manipuliert str1(!);
//AddicoreRFID::AddicoreRFID_请求(字节请求模式,字节*标记类型)
状态=myRFID1.AddicoreRFID请求(PICC请求,str1);
如果(状态==MI_OK){
串行标签检测(str1,1);
}
//防碰撞,返回标签序列号4字节
//Manipuliert str1(!);
状态=myRFID1.AddicoreRFID\u Anticoll(str1);
如果(状态==MI_OK){
串行数据(str1);
lcd_计数器(str1、lcd1);
//延迟(500);
}
myRFID1.AddicoreRFID_Halt();//命令标记进入休眠状态
/////////////RFID2///////////////////
str2[1]=0x4400;
//查找标记,返回标记类型
状态=myRFID2.AddicoreRFID请求(PICC请求,str2);
如果(状态==MI_OK){
串行检测(str2,2);
}
//防碰撞,返回标签序列号4字节
状态=myRFID2.AddicoreRFID\u Anticoll(str1);
如果(状态==MI_OK){
串行数据(str2);
lcd_计数器(str2、lcd1);
//最可靠的不间断模具标签!
//延迟(500);
}
myRFID2.AddicoreRFID_Halt();//命令标记进入休眠状态
}
void init_lcd1(){
…这是液晶显示器。。。
}
//Zählt das Auftreten der Tags
无效lcd_计数器(uchar*str,液晶lcd){
…输出到lcd。。。。
}
//Meldet gefundenen Tag auf der Konsole
无效串行标记检测(uchar*str,int读取器){
如果(读卡器==1){
Serial.print(“检测到RFID1标记:”);
}否则{
串行打印(“检测到RFID2标记:”);
}
串行打印(str[0],BIN);
连续打印(“,”);
Serial.print(str[1],BIN);Serial.println(“”);
}
//这是一个很好的例子
无效串行数据(uchar*str){
uchar checksum1=str[0]^str[1]^str[2]^str[3];
Serial.print(“标签的编号为:”);
//连续打印(2);
Serial.print(str[0]);
连续打印(“,”);
串行打印(str[1],BIN);
连续打印(“,”);
串行打印(str[2],BIN);
连续打印(“,”);
串行打印(str[3],BIN);
连续打印(“,”);
串行打印(str[4],BIN);
连续打印(“,”);
Serial.println(checksum1,BIN);
}
我想知道相同的(!!)rfid标签是否有不同的值,这取决于它从RFID1或RFID2读取:
检测到RFID1标记:1000100,0
标签号是:13610011100110101111110011
检测到RFID2标记:1000100,0
标签的编号是:68,0,0,0,0,0,1000100//防碰撞,返回标签序列号4字节
//Anti-collision, return tag serial number 4 bytes
status = myRFID2.AddicoreRFID_Anticoll(str1); // <<<< needs to be strl2
status=myRFID2.AddicoreRFID_Anticoll(str1);// 我与Ardunio mega同时使用10 RC522
试试这个例子2 ncf阅读器,它的工作为我。我在Arduino Nano进行了测试。
读卡器共用3,3V、GND的引脚。SCD、MISO、MOSI、RST和SDA都有自己的引脚。我不使用IRQ pin
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // Configurable, see typical pin layout above
#define SS1_PIN 10 // Configurable, see typical pin layout above
#define SS2_PIN 8 // Configurable, see typical pin layout above
MFRC522 mfrc522_1(SS1_PIN, RST_PIN); // Create MFRC522 instance
MFRC522 mfrc522_2(SS2_PIN, RST_PIN);
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
SPI.begin(); // Init SPI bus
mfrc522_1.PCD_Init(); // Init MFRC522
mfrc522_1.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details
Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));
mfrc522_2.PCD_Init(); // Init MFRC522
mfrc522_2.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details
}
void loop() {
// Look for new cards
if ( mfrc522_1.PICC_IsNewCardPresent() || mfrc522_2.PICC_IsNewCardPresent()) {
Serial.println(F("New card..."));
} else {
return;
}
// Select one of the cards
if ( ! mfrc522_1.PICC_ReadCardSerial() && ! mfrc522_2.PICC_ReadCardSerial()) {
Serial.println(F("Read..."));
return;
}
// Dump debug info about the card; PICC_HaltA() is automatically called
mfrc522_1.PICC_DumpToSerial(&(mfrc522_1.uid));
mfrc522_2.PICC_DumpToSerial(&(mfrc522_2.uid));
}
#包括
#包括
#定义RST_引脚9//可配置,参见上面的典型引脚布局
#定义SS1_引脚10//可配置,参见上面的典型引脚布局
#定义SS2_引脚8//可配置,参见上面的典型引脚布局
MFRC522 MFRC522_1(SS1_引脚,RST_引脚);//创建MFRC522实例
MFRC522 MFRC522_2(SS2_引脚、RST_引脚);
无效设置(){
Serial.begin(9600);//初始化与PC的串行通信
while(!Serial);//如果没有打开串行端口,则不执行任何操作(为基于ATMEGA32U4的Arduinos添加)
SPI.begin();//初始化SPI总线
mfrc522_1.PCD_Init();//Init mfrc522
mfrc522_1.PCD_DumpVersionToSerial();//显示PCD的详细信息-mfrc522读卡器详细信息
println(F(“扫描PICC以查看UID、SAK、类型和数据块…”);
mfrc522_2.PCD_Init();//Init mfrc522
mfrc522_2.PCD_DumpVersionToSerial();//显示PCD的详细信息-mfrc522读卡器详细信息
}
void循环(){
//