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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
Arduino 如何停止多个RFID读取?_Arduino_Rfid - Fatal编程技术网

Arduino 如何停止多个RFID读取?

Arduino 如何停止多个RFID读取?,arduino,rfid,Arduino,Rfid,我对Arduino和编程非常陌生,所以我请求您耐心等待。我使用2个RFID和Arduino Mega,2个伺服电机和一个OLED显示器。所以我的想法是,当我把特定的RFID标签放在第一个RC522上时,它会打开第一个伺服电机,并在4秒钟后关闭它。然后它扫描第二个RC522寻找相同的标签,当我出示它时,它打开第二个伺服,在OLED显示屏上写入一条消息,然后将第二个伺服移回,再次开始扫描第一个RC522。这一切都很完美,我用switch case做的,但问题是在最后一步之后,它继续提升伺服,即使没有

我对Arduino和编程非常陌生,所以我请求您耐心等待。我使用2个RFID和Arduino Mega,2个伺服电机和一个OLED显示器。所以我的想法是,当我把特定的RFID标签放在第一个RC522上时,它会打开第一个伺服电机,并在4秒钟后关闭它。然后它扫描第二个RC522寻找相同的标签,当我出示它时,它打开第二个伺服,在OLED显示屏上写入一条消息,然后将第二个伺服移回,再次开始扫描第一个RC522。这一切都很完美,我用switch case做的,但问题是在最后一步之后,它继续提升伺服,即使没有显示标签,就像它记得(多次读取)标签一样。我只想让它这样做一次。可能吗

代码如下:

#包括
#包括
#包括
#包括
#包括
#包括
#定义RST_引脚5
#定义SS_1_引脚10
#定义SS_2_引脚8
#定义MFRC522时钟SPI时钟DIV16
MFRC522 mfrc5221(SS_1_引脚、RST_引脚);
MFRC522 mfrc5222(SS_2_引脚、RST_引脚);
Adafruit_SSD1306显示器(-1);
伺服伺服1;
伺服2;
无符号long-PreviousMillis=0;
无符号长电流毫秒;
国际阿特拉索;
int状态;
int pos1=95;
int pos2=90;
无效设置()
{
Serial.begin(9600);
SPI.begin();
伺服1.连接(7);
2.连接(6);
显示开始(SSD1306_SWITCHCAPVCC,0x3C);
display.clearDisplay();
显示。setTextSize(2);
显示。setTextColor(白色);
显示设置光标(25,10);
display.println(“文本1”);
display.display();
mfrc5221.PCD_Init();
mfrc5222.PCD_Init();
mfrc5221.PCD_DumpVersionToSerial();
mfrc5222.PCD_DumpVersionToSerial();
状态=1;
}
空循环()
{
当前毫秒=毫秒();
atraso=当前毫秒数之前的毫秒数;
下一个_state_FSM();
输出_FSM();
Serial.print(“State=”);
连续打印(状态);
串行打印(“\n”);
}
无效输出_FSM(){
开关(状态){
案例1:
{
伺服1.写入(pos1);
伺服2.写入(pos2);
display.clearDisplay();
显示。setTextSize(2);
显示。setTextColor(白色);
显示设置光标(25,10);
display.println(“文本1”);
display.display();
如果(!mfrc5221.PICC_IsNewCardPresent())
{
返回;
}
如果(!mfrc5221.PICC_ReadCardSerial())
{
返回;
}
打破
}
案例2:
{
伺服1.写入(0);
}
打破
案例3:
{                               
伺服1.写入(95);
如果(!mfrc5222.PICC_IsNewCardPresent())
{
返回;
}
如果(!mfrc5222.PICC_ReadCardSerial())
{
返回;
}
打破
}
案例4:
{
伺服2.写入(0);
display.clearDisplay();
显示。setTextSize(1);
显示。setTextColor(白色);
显示设置光标(0,5);
display.println(“文本2”);
显示设置光标(50,10);
display.println(“文本3”);
display.display();
}
}
}
void next_state_FSM(){
开关(状态){
案例1:
{
Serial.print(“UID标签:”);
字符串content1=“”;
字节1;
用于(字节i=0;i4000){
状态=3;
前一毫秒=当前毫秒;
}
打破
}
案例3:
{
Serial.print(“UID标签:”);
字符串content2=“”;
字节2;
用于(字节j=0;j4000){
状态=1;
前一毫秒=当前毫秒;
}
打破
}
}
}

我想它不会读很多遍。您只是忘记了重置uid或设置标志。读取成功后,将设置mfrc5222.uid。如果无法读取,则mfrc5222.uid不会重置,因此您可以继续读取。如果
mfrc5222.PICC_ReadCardSerial()
失败,您不应该解析mfrc5222.uid。谢谢您,阿德里亚诺,我终于改变了它,它工作得很好!非常感谢你!