// 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;