Arduino来自' char'的转换无效到' char *'

时间:2017-05-11 07:14:25

标签: c++ arduino

这真的给了我很多时间;这个简单的逻辑。我会解释事情的进展情况以及我现在想要实现的目标。

我有一个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"

问题是,我做错了什么,我该如何解决?感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

编译器错误是因为方法GetNumber期望char *,而Received_Message只是一个char。它可以在你调用GetNumber时使用(&#34; SwitchOne&#34;);因为&#34; SwitchOne&#34;是一个字符数组。

但是,我不认为这是唯一的问题。在您的代码中,您似乎希望Recieved_Message成为存储在Names中的字符串之一,但根据this,它只是存储Serial.write(Recieved_Bytes)写入的字节数;