Concatenated String Doesn't Send Correctly

  • Hi all!

    I'm working with sending messages from one of my sensors back to my controller for the first time, and I'm a little stumped...

    I have this message defined:

    MyMessage msg(CHILD_ID_LIGHT, V_VAR1);

    And this code that uses it to send a message to the controller

    void open_scratchpad(int expectedScratchpadValues) {
      send(msg.set("Scratchpad is open"));
      send(msg.set("string " + String(expectedScratchpadValues)));

    I expect to get the following messages back (in this example, expectedScratchpadValues=4):

    2;1;1;0;24;Scratchpad is open
    2;1;1;0;24;string 4

    Instead, I get:

    2;1;1;0;24;Scratchpad is open

    But if I do

    Serial.println("string " + String(expectedScratchpadValues)

    then the arduino console correctly prints

    string 4

    Never mind the exact code here. I'm just playing around to learn the messaging protocol, so it really doesn't mean much of anything. I just want to be able to convert ints to strings, concatenate those strings, and then pass that concatenated result back to my controller.

    Thanks for you help!

  • @mrmuszynski
    Hi, there are some setters for message payload types but none for type String, see: Message manipulation.

    You need to convert the resulting String into const char* like this:

    send(msg.set(("string " + String(expectedScratchpadValues)).c_str()));

    But in general I would try to avoid usage of the String data type, especially for the use case in your code example. You could use e.g.:

      char str[80];
      sprintf(str, "string %d", expectedScratchpadValues);

    For Arduino String read more e.g. here: The Evils of Arduino Strings


Log in to reply

Suggested Topics

  • 8
  • 3
  • 29
  • 2
  • 90
  • 2