Проблема с чтением MIFARE 13,5 МГц с помощью библиотеки MFRC522.

Я пытаюсь прочитать UID карт MIFARE 13,5 МГц с помощью библиотеки MFRC522 и определил для нее следующую функцию.

void getUID() {
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
  Serial.println("Scanned PICC's UID:");
  tag = "";
  for (byte i = 0; i < mfrc522.uid.size; i++)
   {
    tag.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
    tag.concat(String(mfrc522.uid.uidByte[i], HEX));
   }
  tag.toUpperCase();
  Serial.println(tag);
  mfrc522.PICC_HaltA(); // Остановить чтение
}
}

Эта функция прекрасно работает в void цикле(), но когда я вызываю ее в следующем веб-запросе, мой esp8266 аварийно завершает работу.

controlserver.on("/searchuid", HTTP_POST, [](AsyncWebServerRequest *request){
    
    transmit = request->arg("idcode");
    if (request->hasArg("configmodule")) {
    File file = SPIFFS.open("/inputString.txt", "r");
    if (!file) {
    Serial.println("Failed to open file");
    return;
    }
    getID();
    delay(500);
    Serial.println(tag);
    String content = file.readString();
    if (content.indexOf(tag) >= 0) {
    Serial.println("Found search string");
  } else {
    Serial.println("Did not find search string");
  }    

   
    }
  });

и я не могу понять почему, любая помощь будет оценена по достоинству.

, 👍1


1 ответ


Лучший ответ:

1

В разделе "Важные вещи, которые следует запомнить" в README ESPAsyncWebServer:

Вы не можете использовать выход, задержку или любую функцию, которая их использует внутри. обратные вызовы

Ваш код вызывает delay() в обратном вызове и вызывает функции, о которых вы не знаете, не вызывайте delay() или yield().

Вам необходимо переписать код, чтобы следовать инструкциям в документации веб-сервера.

,