我正在使用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
}
答案 0 :(得分:0)
OSCMessage
将const 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();