【问题标题】:Arduino if Statement failsArduino if 语句失败
【发布时间】:2021-10-17 04:56:04
【问题描述】:

我有一个带有触摸屏的 ILI9341 QVGA 彩色 TFT LCD 显示器的 ESP32 Wrover 模块(整个板是从 HackerBox 购买的,特别是 HackerBox50)。我已经设置了一个具有选项主菜单的程序,其中一个选项打开一个需要密码才能输入的键盘功能。当 Prompted loop() 调用 Canary_Setup() 函数时,该函数将调用触摸屏校准文件和 draw keypad() 函数。键盘工作正常,会将输入的密码发送到串行监视器,但由于某种原因,无论输入的密码如何,它都不会触发 if 语句。 char 类型的变量“numberBuffer”是存储密码的地方。当我检查“numberBuffer”的 Len 时,它以正确的长度返回,但在 if 语句中没有正确注册。

变量声明:

char numberBuffer[NUM_LEN + 1] = "";

如果语句:

        if (b == 2) {
      status("Sent value to serial port");
      Serial.print(numberBuffer);
      if (numberBuffer == "2991") {
        Serial.println("hello");
        menu_return();
        break;
      } else {
        Serial.println("wrong");
      }

代码的所有其他方面都可以正常工作,没有任何关于问题可能的想法;我对 Arduino/硬件世界有点陌生,如果我的代码不干净,我很抱歉。

【问题讨论】:

    标签: arduino esp32 arduino-esp32


    【解决方案1】:

    这条线并没有像你想象的那样做:

          if (numberBuffer == "2991") {
    

    您不能在 C/C++ 中使用 == 运算符比较字符数组(通常也称为小写字符串,在这种情况下,这就是您使用它们的方式)。您可以使用它来比较String 对象,但这不是String 对象。

    当您在 C/C++ 中使用 == 比较字符数组时,您要比较的是数组的地址,而不是内容。只有当它们是完全相同的数组时才会如此——而不仅仅是完全相同的内容。当一个是字符串文字时不太可能,尤其是当另一个是字符数组时(该变量的值将是一个常量内存地址)。

    要比较字符数组,您将使用strcmp() 函数。这需要两个字符指针参数,假设它们指向以 null 结尾的 C 字符串,并比较它们指向的内容。如果它们相同,则返回 0,如果左侧“小于”右侧(“a”小于“b”的方式)则返回 -1,如果左侧“大于”则返回 1右侧(“b”大于“a”的方式)。

    所以这行代码应该是:

          if (strcmp(numberBuffer, "2991") == 0) {
    

    【讨论】:

      猜你喜欢
      • 2018-02-02
      • 2019-01-26
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 2013-02-28
      相关资源
      最近更新 更多