
[英]C++ invalid conversion from 'const char*' to 'char*' Arduino Uno
[英]Arduino Invalid conversion from 'char' to 'char*'
这真的给了我很多时间; 这个简单的逻辑。 我会解释事情的进展情况以及我现在想要实现的目标。
我有一个ESP8266模块,用于在运行Mosquitto MQTT Server的服务器上订阅主题“switch”。
从具有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的这一点上,我有以下简单的代码接收字节并将其存储在变量“Recieved_Bytes”中,然后我尝试使用char类型的另一个变量“Recieved_Message”将这些字节转换为字符。
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);
}
到目前为止一切都很好,但是当我尝试将这个“Recieved_Message”传递给一个应该返回正在发送的整数值的函数时。
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]
注意:假设我将发送消息“SwitchOne”,例如
mosquitto_pub -t switches -m "SwitchOne"
问题是,我做错了什么,我该如何解决? 感谢您的帮助。
编译器错误是因为方法GetNumber期望char *,而Received_Message只是一个char。 当你调用GetNumber(“SwitchOne”)时它可以工作; 因为“SwitchOne”是一个字符数组。
但是,我不认为这是唯一的问题。 在您的代码中,您似乎希望Recieved_Message成为存储在Names中的字符串之一,但根据这一点,它只是存储Serial.write(Recieved_Bytes)写入的字节数;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.