c2-utopia/utopia.scd

74 lines
1.5 KiB
Plaintext
Raw Normal View History

// Dependencies:
// - SLIPDecoder (https://git.kompot.si/g1smo/SLIPDecoder)
// - MathLib (https://depts.washington.edu/dxscdoc/Help/Browse.html#Libraries%3EMathLib)
(
// Initialize the the receiver via SLIP decoder
~receiverPath = "/dev/ttyACM0";
~baudRate = 115200;
~decoder = SLIPDecoder.new(~receiverPath, ~baudRate);
OSCFunc.trace(false); // debug osc
~decoder.trace(true); // debug slip decoder
/*******
* GUI *
******/
~senzorji = [];
~numSensors = 3;
~numSensors.do({ |n|
~senzorji.add(AHRSensor.new(n + 1));
});
~w = Window.new("Utopia || C²", Rect(300, 300, 640, ~numSensors * 20),true);
~elementi = ~senzorji.collect({|s| s.getGui;});
~ttyInput = TextField().string_("/dev/ttyACM0");
~w.layout_(
VLayout(
HLayout(
StaticText().string_("Serial path: "),
~ttyInput,
Button().string_("Start").action_({ | butt |
if ((~decoder.running.not), {
// If not running, start decoder
~decoder.deviceName = "";
~decoder = SLIPDecoder.new(~receiverPath, ~baudRate);
~decoder.start;
butt.string_("Stop")
}, {
// Else stop the decoder
~decoder.stop;
butt.string_("Start")
});
})
),
// Elementi senzorjev
VLayout(*~elementi)
)
);
~w.front;
q = OSCFunc({ |msg, time, addr, recvPort|
var q;
q = Quaternion.new(msg[4], msg[1], msg[2], msg[3]);
q.postln;
//~senzorji[0].updateEuler(q);
//~senzorji[0].euler.postln;
//~elementi[0].refreshGui;
}, "/ww/1/quaternion");
// Start the decoder!
//~decoder.start;
)
~decoder.trace;
~decoder.stop;
~decoder.start;
~decoder.rate;