Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带两个RC522的Arduino_Arduino_Rfid - Fatal编程技术网

带两个RC522的Arduino

带两个RC522的Arduino,arduino,rfid,Arduino,Rfid,为了给我的卡雷拉拉拉皮条,我要建一个圆形计数器。 它包含一个Arduino Nano、一个lcd和2个rc522 rfid阅读器。 读卡器共享scd、miso、mosi的引脚,并拥有sda和rst的引脚 事实上,我不能让两个读者同时工作。只有当一个或另一个读卡器实际插入(硬核!)到breadbord时,它才能工作(无需更改代码)。但不是在一起 我的代码一定有问题,但在哪里? (RFID通信由[addicore][1]中的示例输入) 有人给我一个提示吗 #include <Addic

为了给我的卡雷拉拉拉皮条,我要建一个圆形计数器。 它包含一个Arduino Nano、一个lcd和2个rc522 rfid阅读器。 读卡器共享scd、miso、mosi的引脚,并拥有sda和rst的引脚

事实上,我不能让两个读者同时工作。只有当一个或另一个读卡器实际插入(硬核!)到breadbord时,它才能工作(无需更改代码)。但不是在一起

我的代码一定有问题,但在哪里? (RFID通信由[addicore][1]中的示例输入)

有人给我一个提示吗

    #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循环(){
//