【问题标题】:433 Receiver Arduino if statement433 接收器 Arduino if 语句
【发布时间】:2017-01-20 07:17:33
【问题描述】:

433 MHz 接收器

Arduino 环境

发射器发送 YNM 工作正常。问题在于接收器代码。目标是,在接收者的值 message 等于 N 之后,它假设触发一个 if 语句来做某事。我只需要一个可以确定接收器是否接收特定值的系统。

void loop()
{
    if (vw_get_message(message, &messageLength)) // Non-blocking
    {
        Serial.print("Received: ");
        for (int i = 0; i < messageLength; i++)
        {
            Serial.write(message[i]);
            const char *p = reinterpret_cast<const char*>(message);
            if(p == "N")
            {
                Serial.print("if statement works when = N");
            }
        }
    }
}

问题是它根本不做这项工作,经过 2 周的斗争,我完全不知所措。此代码将编译并运行,但 if 语句被完全忽略。

【问题讨论】:

  • 您将charstring 进行比较。引号在 C++ 中有所不同。检查一下。
  • 这里,p 是指向变量的指针,而"N" 是指向常量的指针。所以它们的值几乎不可能相等。

标签: c++ arduino


【解决方案1】:

if (p=="N") 比较两个指针。虽然它们指向的内容可以相同,但这并不意味着指针本身是相等的。

您可能需要strcmp(C 风格)或std::string::operator==(规范 C++)

【讨论】:

    【解决方案2】:

    幸好我找到了解决办法。

    工作代码:

    void loop()
    {
            if (vw_get_message(message, &messageLength))
        {
            for (int i = 0; i < messageLength; i++)
            {
                 const char *p = reinterpret_cast<const char*>(message);
                 if(p[0] == 'Y')
                 {
                      Serial.print(" - Yes");
                      break;
                 }
                 else if(p[0] == 'N')
                 {
                      Serial.print(" - No");
                      break;
                 }
            }
            Serial.println();
        }
    }
    

    const char *p = reinterpret_cast&lt;const char*&gt;(message); 的目的是将message(一个字节)变成一个字符。是的p 是一个指针,但它指向一个字符,因此,我可以通过简单地执行p[#] 来获取p 指向的字符中的数据。现在可以做一个简单的 if 语句

    if(p[0] == 'M')
    {
         ...
    } 
    

    【讨论】:

      【解决方案3】:

      message 是什么类型?无论如何,现在您正在将存储在 p 中的值(所以是内存中的地址,而不是内存中的地址)与字符串(注意双引号)进行比较。你为什么不干呢

      if(message[i] == 'N')
      

      这里的单引号表示字符字面量。

      【讨论】:

        猜你喜欢
        • 2021-11-06
        • 2021-10-17
        • 2014-08-26
        • 1970-01-01
        • 2022-08-23
        • 1970-01-01
        • 1970-01-01
        • 2020-02-15
        • 1970-01-01
        相关资源
        最近更新 更多