繁体   English   中英

Arduino从'char'到'char *'的转换无效

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM