我的代码有问题。每当我显示Rfid卡1时,它都应该打印欢迎人1,但是使用它,它会打印出拒绝访问的内容,这在else语句中,它在第一个if语句延迟3000次后激活了else语句,而第二个if语句工作正常。
代码如下:
#include <deprecated.h>
#include <MFRC522.h>
#include <MFRC522Extended.h>
#include <require_cpp11.h>
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
void setup()
{
Serial.begin(9600); // Initiate a serial communication
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
Serial.println("Approximate your card to the reader...");
Serial.println();
}
void loop()
{
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Show UID on serial monitor
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
content.toUpperCase();
if (content.substring(1) == "C7 8B BB 4D")
{
Serial.println("Authorized Access,Welcome Person:1");
Serial.println();
delay(3000);
}
if (content.substring(1) == "A7 5E 63 33")
{
Serial.println("Authorized Access,Welcome Person:2");
Serial.println();
delay(3000);
}
else {
Serial.println("Access denied");
delay(3000);
}
}
答案 0 :(得分:4)
您有一个if
语句。
此后,您又有了另一个if
语句,它有自己的else
。
如果仅查看第二个if
,就会发现如果它不等于"A7 5E 63 33"
,那么它将打印"Access denied"
。你猜怎么了?第一个if
已经完成,因此第二个if
本身就被处理了,并且它不等于该字符串,所以else
被执行了。
要解决此问题,第一个if
还需要一个else
-在第二个if
之前:
if (...) {
}
else if (...) {
}
else {
}
答案 1 :(得分:0)
您应该使用ps -aux|grep Consumer
else if