1

我正在做一个 arduino uno + supercollider 3 项目。

基本上:我有一个带有电位器、传感器和一些按钮的 arduino。我将输入的数据放在一个数组中,然后通过串行发送到我的计算机。

目前,我在 Arduino 串行监视器中的输出如下:271:189:75:0:0:0:1:0:0:0:0:0

如果我在 Supercollider 中打开串行连接,得到的是:271

只有数组中的第一个值正确到达。(顺便说一句,只有 1 个 Arduino 输入到 Supercollider 的相同设置就像一个魅力。我只是无法让它与从 arduino 到 SC3 的一系列输入一起工作。)

此时发送数据的arduino代码:

teSturen = String(val_lichtPin) + ":" + String(val_Pot1Pin) + ":" + String(val_Pot2Pin) + ":" + String(val_Pot3Pin) + ":" + String(val_Pot4Pin) + ":" + String(val_Pot5Pin) + ":" + String(knop1Staat) + ":" + String(knop2Staat) + ":" + String(knop3Staat) + ":" + String(knop4Staat) + ":" + String(knop5Staat) + ":" + String(knop6Staat);

Serial.println(String(teSturen));

我将所有数字放在一个字符串中,并以 : 作为分隔符,然后发送。

SC3代码接收:

~ino = ArduinoSMS("/dev/ttyACM0",9600);

~ino.action = {
    arg msg;
    var amsg;
    //amsg = msg.split($:);
    msg.postln;
};

还有更多代码,但那是用于指定 vars 和 args、定义合成器等。我把它限制在它不起作用的地方。

关于为什么 SC3 只收到第一个数字的任何想法?例如,我尝试替换分隔符: by 或 ;,将其作为多个整数而不是一个字符串发送,...

对我来说,它的目标是能够使用物理控制电位器控制超级对撞机中的各种合成器,因为这比键盘或鼠标控制合成器更有趣......

感谢您的帮助,谢谢!

4

1 回答 1

0

很晚了,但这仍然可能会有所帮助。几年前我使用了相同的设置。我用了

p = ArduinoSMS("/dev/tty.usbmodem3d11", 115200);

while{state==0}{                                        
    p.action = { |... msg| m=[msg[0],msg[1]];
    do something with m[0] and m[1] ...
};

解析消息流。我的设置只读取两个字节(msg[0]msg[1])的数组,但这应该是可扩展的。

完整的源代码可在https://github.com/symbolrush/FridgeKiller上找到,另一个具有相同设置的项目在https://github.com/symbolrush/ColliDuino上。

希望这会有所帮助,祝你好运!

于 2016-11-11T10:58:32.913 回答