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语句完全被忽略。
答案 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。