【发布时间】:2020-05-23 11:45:52
【问题描述】:
我有一个带有按钮和一些 LED 的 wemos d1 mini 的简单设置。它可以发送和接收 MQTT 消息,并且应该对它们采取行动。
我希望它在按下按钮时发送“11”并在接收到特定消息时点亮 LED - 在本例中为“21”。
似乎一切正常,消息正在发出,它报告当消息进入时它“看到”“21”。但随后它跳过了 IF 语句,在该语句中我将传入消息与一个字符串。它们都打印出相同的内容,但IFcomparison 似乎说它们不是。这是在回调循环中完成的。
谁能指出我哪里出错了?
long lastMsg = 0;
char msg[50];
int value = 0;
char* msgIN;
String msgIN_trigger;
char* msgOUT;
String boxID = "1";
int boxID_len = boxID.length() + 1;
String clientID = "rememberbox " + boxID;
int clientID_len = clientID.length() + 1;
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived: [");
Serial.print(topic);
Serial.print("] ");
String msgIN = "";
msgIN += (char *)payload;
String msgString = msgIN;
Serial.print(msgIN.substring(0,2));
Serial.println("/");
if (msgString == msgIN_trigger) {
Serial.println("message is for me!");
Serial.println("wake up MP3 player");
myMP3.wakeUp();
Serial.println("play track 5");
myMP3.play(5);
Serial.println("confetti!!!");
confetti();
Serial.println("and fade to black");
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CRGB::Black;
}
FastLED.show();
delay(7500);
myMP3.sleep();
message_out = false;
Serial.println("message_out = false");
Serial.println("");
}
Serial.println("nothing intended for me");
Serial.print("only reacting to message: ");
Serial.print(msgIN_trigger);
Serial.println("/");
Serial.println("");
}
【问题讨论】:
-
哪个
if声明?请将代码精简为一个最小的可行测试用例,这样我们就不需要费力地寻找你在说什么。 -
这是微不足道的调试。在比较之前打印您正在比较的字符串,这会告诉您。
-
完成。对不起。最后一个问题有人让我发布我的完整代码。
-
@Gambit 支持。这就是我在代码中所做的。全部打印出来,显示 msgString 是“21”,msgIN_trigger 也是“21”。仍然当然后调用:
if (msgString == msgIN_trigger),它仍然直接进入“else”语句
标签: arduino mqtt publish-subscribe