2017-02-09 21 views
0

達成したいのは、Tizenスマートウォッチのハートビートセンサーによって返された値の精度を高めることです。 言語がJavascriptなので、値はFloat64数値です。Tizenデバイスのハートビートセンサーから返される値の精度を向上させる

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'; 
     } 

     }} 
+0

'var interval = hrmInfo.rRInterval/1000; 'の直後に' interval.toPrecision(4); 'を使用しようとしましたが、何も変更されていません。同じ結果で 'parseFloat(interval).toPrecision(4);'も試みました。 @RC NL – Marcofon

答えて

0

が、私はここで何かをしないのですが、あなたが実際にその新しい関数を呼び出すところ、私は見つけることができませんか? なぜonchangedCB関数内でインラインで作成しますか?

そこに宣言し、パラメータをinterval変数と同じように呼び出すため、関数が呼び出されると予想されるように見えます。どちらがうまくいきません(プログラミング言語で知っている限り)。

私がしようとしているのは、その関数をparseFloat(interval).toPrecision を別の関数に置くのではなく、直接呼び出すことです。

しかし、私がはるかに関心があるのは次のとおりです。 ここhrmInfo.rRInterval/1000 元の値は1000で表されます。

その分割を削除(このVAR間隔= hrmInfo.rRIntervalなど;)と実際小数点のようになり、より番号があるかどうか。

私はあなたの例ではできませんが、値が通常1分あたり120のようなものである場合。そして、より正確な値があるかどうかを知りたければ、常に120000のようにすべてゼロであれば値は1200054のようになり、そのイベントを作成するシステムはより正確な測定値を与えません。

+0

返信いただきありがとうございます!はい、実際には呼び出されません。もちろん、これはエラーの1つです。私はそれを直接呼び出そうとします。 1分あたりの心拍数(bpm)ではなく、2つの連続した拍動の間の時間であるため、私はその分裂が必要です。そしてセンサーはミリ秒単位で値を与えますが、秒単位で値が必要なので、分けなければなりません。 – Marcofon

+0

こんにちは、センサーの精度を上げることができない可能性はありますか?私はセンサーから来ているデータの奇妙な振る舞いも持っています。それは偶数の値だけが印刷されていると私はなぜわからないようです。 – Marcofon

+0

データをログに記録せずに掘り下げることなく、言い表せないことがあります。 このデバイスに関する情報とコードを組み合わせた場合 Saying:onchangedCBがトリガされ、心拍数の更新が提供され、hrmInfo.heartRateはすでにBPMに標準化された心拍数です。実際にhrmInfo.rRIntervalがそれらの間隔の間に何が測定されたのか分からない限り、 読書を「改善する」には、そのBPMにつながる2つの変数が必要です。 (Interval + beats this interval)bijに1分で収まる間隔の数を乗じたものです。 –

関連する問題