提高Tizen设备上心跳传感器返回值的精确度

时间:2017-02-09 12:22:34

标签: javascript floating-point precision ros tizen

我想要实现的目标是尝试增加Tizen智能手表的心跳传感器返回的值的精确度。 值为Float64数字,因为该语言是Javascript。 我尝试使用这样的函数:

function strip(interval) {
return (parseFloat(interval).toPrecision(4));
}

但没有成功。也许我做错了,比如做一些编程错误,我真的不知道。显然,IDE编译和构建程序包安装没有问题,但我看不到有或没有这个功能包含的东西。 我将在下面发布我的整个代码。请检查何时创建函数strip。我使用了escamotage if (interval !== 0) { interval_screen = interval; },因为我不想打印零。请注意,我希望流式传输到ROS主题HeartRateInterval的变量保持为Float;这就是为什么我也使用了parseFloat函数。 谢谢! 代码:

document.addEventListener('tizenhwkey', function(e) {
    if(e.keyName === "back")
        window.webapis.motion.stop("HRM");
        tizen.application.getCurrentApplication().exit();
});

function Connect(){

var ip;
var connection=false;
var interval_screen = 0;
if (document.getElementById("ip").value==="")
{ 
    ip="10.42.0.1";
}
else 
{ 
    ip=document.getElementById("ip").value;
}

var ros = new ROSLIB.Ros({
    url : 'ws://' + ip +':9090'
    });

ros.on('connection', function() {
    connection=true;
    document.getElementById("Connection_status").setAttribute("color","green");
    document.getElementById("Connection_status").innerHTML = 'Connected';
    tizen.power.request("SCREEN", "SCREEN_DIM");
});

ros.on('error', function(error) {
    document.getElementById("Connection_status").setAttribute("color","orange");
    document.getElementById("Connection_status").innerHTML = 'Error';
});

ros.on('close', function() {
    document.getElementById("Connection_status").setAttribute("color","red");
    document.getElementById("Connection_status").innerHTML = 'Unconnected';
    connection=false;
    tizen.power.release("SCREEN");
});

    var RatePub = new ROSLIB.Topic({
    ros : ros,
    name : '/HeartRateData',
    messageType : 'std_msgs/Float64'
});

var IntervalPub = new ROSLIB.Topic({
    ros : ros,
    name : '/HeartRateInterval',
    messageType : 'std_msgs/Float64'
});

window.webapis.motion.start("HRM", onchangedCB);

function onchangedCB(hrmInfo)
{
   var rate = hrmInfo.heartRate;
   document.getElementById("mytext").innerHTML = 'Heart Rate= ' + rate + ' bpm';

   var interval = hrmInfo.rRInterval/1000;
   function strip(interval) {
   return (parseFloat(interval).toPrecision(4));
   }
   if (interval !== 0) {
   interval_screen = interval;
   }
   document.getElementById("mytext1").innerHTML = 'RR Interval= ' + interval_screen + ' s';

   var Float64 = new ROSLIB.Message({
            data:rate
        });

        if(connection===true)
            {
            RatePub.publish(Float64);
            }
        else
        {
            document.getElementById("mytext").innerHTML = 'Heart Rate = 0 bpm';
        }

   var Float64 = new ROSLIB.Message({
            data:interval
        });

        if(connection===true)
            { if (interval !== 0) {
            IntervalPub.publish(Float64);
            }
            else {

            }
            }
        else
        {
            document.getElementById("mytext1").innerHTML = 'RR Interval = 0 s';
        }

        }}

1 个答案:

答案 0 :(得分:0)

我在这里遗漏了什么,但我找不到你实际称之为新功能的地方? 为什么要在onchangedCB函数中内联创建它?

看起来好像你期望调用该函数,因为你在那里声明它并且调用参数与interval变量相同。哪个不起作用(据我所知,在任何编程语言中)。

然后我会尝试调用该函数parseFloat(interval).toPrecision 直接而不是把它放在另一个函数中。

但我更感兴趣的是: 这里是hrmInfo.rRInterval / 1000 原始价值是千分之一。

删除该分区(如此var interval = hrmInfo.rRInterval;)并查看实际上是否有更多小数点所在的数字。

我无法从你的例子中弥补,但如果价值通常是每分钟120。并且你想知道它背后是否有更精确的值,那么如果它总是像120000这样的全零,那么该值现在应该看起来像1200054,那么创建该事件的系统不会给出更精确的度量。 / p>