OSC char concat issues

Hey all,

I’m trying to send some sensor values using OSC. an example of what I’d like to send is the following:


My full code looks like this:

#include <SPI.h>
#include <Ethernet.h>

#include <ArdOSC.h>

#include "SR04.h" // this is the ultrasound lib

// this is the ultrasonic pin setup
#define TRIG_PIN 7
#define ECHO_PIN 6 

//set up the ultrasonic bits
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;

byte myMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte myIp[]  = { 192, 168, 1, 177 }; 

int destPort=12000;
byte destIp[]  = { 192, 168, 1, 69 };

OSCClient client;

//create new osc message
OSCMessage global_mes;
void setup(){ 

 Serial.begin(9600);//Initialization of Serial Port

 Ethernet.begin(myMac ,myIp); 

void loop(){

    int distance_value=sr04.Distance();  // This is the distance value in int format
    char* start_text = "/cue/";
    char* end_text = "/go";
    char formatted_message[30];

    strcpy (formatted_message,start_text); //
    strcat (formatted_message,distance_value);
    strcat (formatted_message,end_text);

  global_mes.flush(); //object data clear

My issues is trying to merge the start_text, distance_value, and end_text into one variable. I’ve had a look in the library, and the function will only accept a char type. The console currently looks like this:

13:06:58.018 → /cue//go
13:06:58.066 → /cue/⸮⸮⸮⸮⸮Eޭ⸮⸮⸮⸮/go
13:06:58.066 → /cue/⸮⸮⸮⸮⸮Eޭ⸮⸮⸮⸮/go
13:06:58.112 → /cue/⸮⸮⸮/go
13:06:58.159 → /cue/⸮⸮⸮/go
13:06:58.301 → /cue//go
13:06:58.348 → /cue//go
13:06:58.348 → /cue/⸮/go
13:06:58.394 → /cue/⸮/go
13:06:58.394 → /cue/⸮/go
13:06:58.441 → /cue/⸮/go
13:06:58.441 → /cue/⸮/go

What do I need to do to the distance_value variable to make this work?

Strcat expects a pointer to a cString. An int won’t be converted automagically (the compiler probably gives you a warning)
Use sprintf() or itoa()