使用OSCbundle.h库将字符串传递给Arduino上的OSCMessage

时间:2017-01-08 19:52:11

标签: arduino udp osc

我正在使用OSCbundle.h库从TouchOSC接收Teensy 3.x(Arduino)上的OSC消息。

收到OSC消息后,(通常)会有一条返回消息,将反馈发送回TouchOSC接口,通常称为:

OSCMessage msgOUT("/2/toggle1");

其中" / 2 / off1"是目的地"地址"消息。

我正在尝试用变量替换文字" / 2 / toggle1"。 目前我使用的是String变量类型​​名称' title'包含目标地址,但我无法使用:

OSCMessage msgOUT(title);

以上导致以下错误: "没有匹配函数来调用' OSCMessage :: OSCMessage(String&)'"

如果我尝试使用其他变量格式,例如uint8_t,我会得到:

"调用过载' OSCMessage(uint8_t&)'是不明确的"

我已经尝试将String转换为各种其他变量类型,但到目前为止,我还没有想出可以替换文字的类型或格式。

有什么想法吗?

以下是该函数的完整代码:

void transmit(byte cmd,  byte mtr, byte spd, byte otr, int value, String title){

Serial.print("title:");
Serial.println(title);

Wire.beginTransmission(0x44); // transmit to device #8
Wire.write( cmd );              // sends one byte
Wire.write( mtr ); 
Wire.write( spd );       
Wire.write( otr );  
Wire.endTransmission();    // stop transmitting
print_i2c_status();  // print I2C final status

OSCMessage msgOUT("/2/off1");
msgOUT.add(value);
Udp.beginPacket(Udp.remoteIP(), destPort);
msgOUT.send(Udp); // send the bytes
Udp.endPacket(); // mark the end of the OSC Packet
msgOUT.empty(); // free space occupied by message

}

1 个答案:

答案 0 :(得分:0)

OSCMessageconst char *作为参数,您可以在此处看到:https://github.com/CNMAT/OSC/blob/master/OSCMessage.h#L112

虽然这与字符串有关,但它并不是一回事。在Arduino语言中,有一个String类,它提供了与其他高级或面向对象语言相同的便利。

此类会覆盖+运算符,以便您可以进行字符串连接。此类还有.c_str()方法,该方法将返回const char *

https://www.arduino.cc/en/Reference/CStr

如果将它们组合在一起,您可以获取字符串并将它们连接起来,然后返回字符数组指针。

String addr_prefix = "/some/osc/address/";
String addr_suffix = "destination";
String completeaddress = addr_prefix + addr_suffix;
const char * addr = completeaddress.c_str();