Как я могу получить свой код, чтобы дождаться сканирования второго RFID? - PullRequest
0 голосов
/ 12 мая 2019

Есть ли способ приостановить мой код в середине двух операторов if, чтобы я мог отсканировать второй RFID, чтобы код мог перейти ко второму оператору if с информацией из второго RFID?

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

  Serial.print("UID tag :");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) {


     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));

  }
  Serial.println();
  //Serial.print("Message : ");
  content.toUpperCase();
  int count = 0;

  if (content.substring(1) == "89 E7 75 47") 
  {
    Serial.println("Authorized access"); 
    Serial.println();
    digitalWrite(yellowLED, HIGH);
    delay(1000);
    digitalWrite(yellowLED, LOW);

  count = count + 1;
  }
 else   {
    Serial.println(" Access denied");
    Serial.println();
    digitalWrite(redLED, HIGH);
    delay(2000);
    digitalWrite(redLED, LOW);


if (content.substring(2) == "F9 9A 76 47")
  {
    Serial.println("Authorized access"); 
    Serial.println();
    digitalWrite(yellowLED, HIGH);
    delay(1000);
    digitalWrite(yellowLED, LOW); 
    count = count + 1;
  }
 else   {
    Serial.println(" Access denied");
    Serial.println();
    digitalWrite(redLED, HIGH);
    delay(1000);
    digitalWrite(redLED, LOW);
  }

if (count == 2 ) {
    digitalWrite(greenLED, HIGH);
    delay(3000);
    digitalWrite(greenLED, LOW);

}

}
}

Я хочу отсканировать два RFID в течение срока действия кода, но весь код проходит после того, как я отсканировал один.

1 Ответ

0 голосов
/ 12 мая 2019

Если вы хотите подождать, пока данные не станут доступны, вы можете использовать Serial.available().Это удобная функция, которая возвращает bool:

if ( ! mfrc522.PICC_IsNewCardPresent())
{
  return;
}

while(! Serial.available()){}

// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {

  return;
}

Имейте в виду, что последовательный буфер должен быть либо полностью прочитан до следующего цикла, либо должен быть вызван Serial.flush().

...