433 Receiver Arduino if声明

时间:2016-09-12 19:21:09

标签: c++ arduino

433 MHz接收器

Arduino环境

发射器发送 Y N M ,效果很好。问题在于接收器代码。目标是,在接收器的值消息等于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");
            }
        }
    }
}

问题在于,它根本就没有完成这项工作,经过两周的挣扎,我完全不知所措。此代码将编译并运行,但if语句完全被忽略。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

谢天谢地,我找到了解决方案。

工作代码:

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<const char*>(message);的要点是将message(一个字节)变成一个字符。是p是一个指针,但它指向一个字符,因此,我可以通过简单地执行 p [来获取p指向的字符中的数据#] 即可。现在可以使用简单的if语句

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

答案 2 :(得分:-1)

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

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

这里的单引号意味着char literal。