phyphox Forums

Full Version: New Editor code error Puck.js
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi.   
I am trying to append a Puck.js experiment to add a View that displays the angle of inclination of the Puck assuming the x-axis of the Puck.  After fiddling with the initial experiment, I am able to Generate an experiment QR code, but Phyphox on my phone gives an exception "Line 27: Tag needs a conversion attribute."

What is wrong?

Code:
<phyphox xmlns="https://phyphox.org/xml" version="1.18">
  <title>Accelerometer and Gyroscope w/angle</title>
  <category>puck.js</category>
  <color>green</color>
  <description>Read the accelerometer and gyroscope of a puck with angle report.js.</description>
  <data-containers>
    <container size="0">preAngle</container>
    <container size="0">angle</container>
    <container size="0">accXRaw</container>
    <container size="0">accYRaw</container>
    <container size="0">accZRaw</container>
    <container size="0">accXCal</container>
    <container size="0">accYCal</container>
    <container size="0">accZCal</container>
    <container size="0">gyrXRaw</container>
    <container size="0">gyrYRaw</container>
    <container size="0">gyrZRaw</container>
    <container size="0">gyrXCal</container>
    <container size="0">gyrYCal</container>
    <container size="0">gyrZCal</container>
    <container size="0">t</container>
    <container>t0</container>
    <container size="0">tout</container>
  </data-containers>
  <input>
    <bluetooth id="puck.js" uuid="6e400001-b5a3-f393-e0a9-e50e24dcca9e" mtu="53" mode="notification">
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">reset();                                                    </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e" conversion="hexadecimal">0d</config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">echo(false);                                                </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">function directOut(s) {                                     </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">    NRF.updateServices({                                    </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">        "6e400001-b5a3-f393-e0a9-e50e24dcca9e" : {          </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">            "6e400003-b5a3-f393-e0a9-e50e24dcca9e" : {      </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">                value : s,                                  </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">                notify : true,                              </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">    }}});                                                   </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">}                                                           </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">let t0 = Date.now();                                        </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">Puck.on("accel", function(data) {                           </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">    let t = Math.round(Date.now() - t0);                    </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">    directOut(t                                             </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">         +","+data.acc.x+","+data.acc.y+","+data.acc.z      </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">         +","+data.gyro.x+","+data.gyro.y+","+data.gyro.z); </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">});                                                         </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e">Puck.accelOn();                                             </config>
      <config char="6e400002-b5a3-f393-e0a9-e50e24dcca9e" conversion="hexadecimal">0d</config>
      <output char="6e400003-b5a3-f393-e0a9-e50e24dcca9e" conversion="formattedString" separator="," index="0">t</output>
      <output char="6e400003-b5a3-f393-e0a9-e50e24dcca9e" conversion="formattedString" separator="," index="1">accXRaw</output>
      <output char="6e400003-b5a3-f393-e0a9-e50e24dcca9e" conversion="formattedString" separator="," index="2">accYRaw</output>
      <output char="6e400003-b5a3-f393-e0a9-e50e24dcca9e" conversion="formattedString" separator="," index="3">accZRaw</output>
      <output char="6e400003-b5a3-f393-e0a9-e50e24dcca9e" conversion="formattedString" separator="," index="4">gyrXRaw</output>
      <output char="6e400003-b5a3-f393-e0a9-e50e24dcca9e" conversion="formattedString" separator="," index="5">gyrYRaw</output>
      <output char="6e400003-b5a3-f393-e0a9-e50e24dcca9e" conversion="formattedString" separator="," index="6">gyrZRaw</output>
    </bluetooth>
  </input>
  <analysis>
    <first>
      <input as="value" keep="true">t</input>
      <output as="first">t0</output>
    </first>
    <formula formula="([1_]-[2])/1000">
      <input keep="true">t</input>
      <input keep="true">t0</input>
      <output>tout</output>
    </formula>
    <multiply>
      <input keep="true">accXRaw</input>
      <input type="value">0.00119751</input>
      <output>accXCal</output>
    </multiply>
    <divide>
      <input keep="true">accXCal</input>
      <input type="value">9.81</input>
      <output>preAngle</output>
    </divide>
    <asin>
      <input as="value">preAngle</input>
      <output>angle</output>
    </asin>
    <multiply>
      <input keep="true">accYRaw</input>
      <input type="value">0.00119751</input>
      <output>accYCal</output>
    </multiply>
    <multiply>
      <input keep="true">accZRaw</input>
      <input type="value">0.00119751</input>
      <output>accZCal</output>
    </multiply>
    <multiply>
      <input keep="true">gyrXRaw</input>
      <input type="value">0.000130495</input>
      <output>gyrXCal</output>
    </multiply>
    <multiply>
      <input keep="true">gyrYRaw</input>
      <input type="value">0.000130495</input>
      <output>gyrYCal</output>
    </multiply>
    <multiply>
      <input keep="true">gyrZRaw</input>
      <input type="value">0.000130495</input>
      <output>gyrZCal</output>
    </multiply>
  </analysis>
  <views>
    <view label="Accelerometer">
      <value label="Inclination (X-axis)">
        <input>angle</input>
      </value>
      <graph label="Acceleration x" partialUpdate="true" labelX="[[quantity_short_time]]" labelY="[[quantity_short_acceleration]]" unitX="[[unit_short_second]]" unitY="[[unit_short_meter_per_square_second]]" unitYperX="m/s³" timeOnX="true" color="green">
        <input axis="x">tout</input>
        <input axis="y">accXCal</input>
      </graph>
      <graph label="Acceleration y" partialUpdate="true" labelX="[[quantity_short_time]]" labelY="[[quantity_short_acceleration]]" unitX="[[unit_short_second]]" unitY="[[unit_short_meter_per_square_second]]" unitYperX="m/s³" timeOnX="true" color="blue">
        <input axis="x">tout</input>
        <input axis="y">accYCal</input>
      </graph>
      <graph label="Acceleration z" partialUpdate="true" labelX="[[quantity_short_time]]" labelY="[[quantity_short_acceleration]]" unitX="[[unit_short_second]]" unitY="[[unit_short_meter_per_square_second]]" unitYperX="m/s³" timeOnX="true" color="yellow">
        <input axis="x">tout</input>
        <input axis="y">accZCal</input>
      </graph>
    </view>
    <view label="Gyroscope">
      <graph label="Angular velocity x" partialUpdate="true" labelX="[[quantity_short_time]]" labelY="[[quantity_short_angular_velocity]]" unitX="[[unit_short_second]]" unitY="[[unit_short_radian_per_second]]" unitYperX="rad/s²" timeOnX="true" color="green">
        <input axis="x">tout</input>
        <input axis="y">gyrXCal</input>
      </graph>
      <graph label="Angular velocity y" partialUpdate="true" labelX="[[quantity_short_time]]" labelY="[[quantity_short_angular_velocity]]" unitX="[[unit_short_second]]" unitY="[[unit_short_radian_per_second]]" unitYperX="rad/s²" timeOnX="true" color="blue">
        <input axis="x">tout</input>
        <input axis="y">gyrYCal</input>
      </graph>
      <graph label="Angular velocity z" partialUpdate="true" labelX="[[quantity_short_time]]" labelY="[[quantity_short_angular_velocity]]" unitX="[[unit_short_second]]" unitY="[[unit_short_radian_per_second]]" unitYperX="rad/s²" timeOnX="true" color="yellow">
        <input axis="x">tout</input>
        <input axis="y">gyrZCal</input>
      </graph>
    </view>
    <view label="Angle (x)">
      <value label="Inclination (x-axis)">
        <input>angle</input>
      </value>
    </view>
  </views>
  <export>
    <set name="Accelerometer and Gyroscope">
      <data name="Time (s)">tout</data>
      <data name="Acceleration x (m/s²)">accXCal</data>
      <data name="Acceleration y (m/s²)">accYCal</data>
      <data name="Acceleration z (m/s²)">accZCal</data>
      <data name="Angular velocity x (rad/s)">gyrXCal</data>
      <data name="Angular velocity y (rad/s)">gyrYCal</data>
      <data name="Angular velocity z (rad/s)">gyrZCal</data>
    </set>
  </export>
</phyphox>
Thanks for your report. The new editor apparently omits the “conversion="string"” attributes in the generated file that are present in the original files. We are working on a fix.

For the time being you need to manually add it to those “config” elements that do not have the mandatory “conversion” attribute.