这真的给了我很多时间;这个简单的逻辑。我会解释事情的进展情况以及我现在想要实现的目标。
我有一个ESP8266模块已编程订阅主题"开关"在运行Mosquitto MQTT Server的服务器上。
从具有MQTT客户端的任何设备,我都可以向此主题发布消息(交换机),并使用下面的回调函数通过串口发送此消息。
void callback(char* topic, byte* payload, unsigned int length) {
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
在Arduino方面,我正在尝试处理通过串口发送的任何内容,并打开/关闭Arduino上的数字引脚。
在Arduino的这一点上,我有以下简单的代码片段,它接收字节并将其存储在变量&#34; Recieved_Bytes&#34;然后我试图使用另一个变量将这些字节转换为字符&#34; Recieved_Message&#34; char类型。
void loop(){
if(esp8266.available()){ // check if the esp is sending a message
int Recieved_Bytes = esp8266.read(); //Byte Data
char Recieved_Message = Serial.write(Recieved_Bytes); // char data;
GetNumber(Recieved_Message);
}
到目前为止,一切都很好,但是当我试图通过这个时候#34; Recieved_Message&#34;到一个应该返回正在发送的整数值的函数。
const char * Names[] = {"SwitchOne", "SwitchTwo", "SwitchThree", "SwitchFour", "SwitchThirteen"};
const int Numbers[] = {1,2,3,4,13};
int GetNumber(char *name) {
for (int i=0; i < sizeof Names / sizeof Names[0]; i++) {
if (strcmp(name, Names[i]) == 0)
return Numbers[i];
}
return -1; // No match found
}
我收到错误 - 下面。
PIO_ESP_Control:6: error: initializing argument 1 of 'int GetNumber(char*)' [-fpermissive]
invalid conversion from 'char' to 'char*' [-fpermissive]
注意:假设我将发送一条消息&#34; SwitchOne&#34;例如
mosquitto_pub -t switches -m "SwitchOne"
问题是,我做错了什么,我该如何解决?感谢您的帮助。
答案 0 :(得分:0)
编译器错误是因为方法GetNumber期望char *,而Received_Message只是一个char。它可以在你调用GetNumber时使用(&#34; SwitchOne&#34;);因为&#34; SwitchOne&#34;是一个字符数组。
但是,我不认为这是唯一的问题。在您的代码中,您似乎希望Recieved_Message成为存储在Names中的字符串之一,但根据this,它只是存储Serial.write(Recieved_Bytes)写入的字节数;