功能不会返回正确的值

时间:2018-03-11 04:53:35

标签: arduino iot verification rfid nodemcu

首先,我正在使用NodeMCU进行RFID卡验证的迷你项目。我设置了一个数据库和一个服务器来处理来自客户端的所有请求。问题是,每当我尝试验证有效卡时,处理它的函数都会返回错误的值。

要清楚,这是我的主循环:

void loop() {
  connectToHost();
  key = kpd.getKey();
  card = readCard();
  delay(200);
  //check for card status
  if(verifyCard(card)){
    Serial.println("Card is valid");
  } else {
    Serial.println("Invalid Card");
  }
  //check connection status
  if(WiFi.status() == WL_CONNECTION_LOST){
    connectToWiFi();
  }
}

主循环调用此函数:

boolean verifyCard(String uid){
  String url = "/ECafe/terminal_verify.php?uid=";
  url += uid;
  // This will send the request to the server
  Serial.print("Requesting URL: ");
  Serial.println(url);
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
    "Host: " + host + "\r\n" +
    "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
    }
    yield();
  }
  // Read all the lines of the reply from server and print them to Serial
  while (client.available()) {
    String line = client.readStringUntil('\r');
    //if string contains echo from php file
    if(line.indexOf("Valid")>0){
      return true;
    } else {
      return false;
    }
    yield();
  }
  Serial.println();
  Serial.println("Closing connection");
}

我故意在数据库中放入一个有效的卡片UID来测试这个功能。然而,它不断返回虚假。我确定服务器的响应是"有效"。我怀疑该函数甚至不等待来自服务器的响应并返回false值,因为发送GET请求之间的间隔并且返回的响应太短。这是因为主循环中的if条件?请参阅串行监视器输出的附件。

1 个答案:

答案 0 :(得分:0)

你的功能逻辑是有缺陷的。

  // Read all the lines of the reply from server and print them to Serial
  while (client.available()) {
    String line = client.readStringUntil('\r');
    //if string contains echo from php file
    if(line.indexOf("Valid")>0){
      return true;
    } else {
      return false;

当代码读取第一行并且它不包含Valid时,它将失败并返回false。因此,您的代码将始终返回false,因为我怀疑返回的第一行是Valid ...

    }
    yield();
  }
  Serial.println();
  Serial.println("Closing connection");

此代码的其余部分永远不会执行。 "关闭连接"永远不会打印出来吗?