为什么此Arduino代码打印“访问被拒绝”

时间:2019-11-22 10:50:16

标签: arduino

我的代码有问题。每当我显示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);
  }
}

2 个答案:

答案 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