2017-02-09 16 views
0

달성하고자하는 것은 Tizen 스마트 워치의 심장 박동 센서가 반환 한 값의 정밀도를 높이려고합니다. 이 값은 언어가 Javascript이므로 Float64 숫자입니다. 나는이 같은 함수를 사용하려고 : Tizen 장치의 심장 박동 센서가 반환 한 값의 정밀도를 높이십시오.

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

하지만 성공

. 어쩌면 내가 뭔가 잘못하고있는 중이 야, 프로그래밍 실수를하는 것처럼, 나는 정말로 모른다. 외관상으로는, IDE는 문제없이 설치하기 위하여 포장을 건설하고 건축한다, 그러나 나는이 기능 포함하거나 포함하지 않는 무언가를 다른 볼 수 없다. 아래에 전체 코드를 게시합니다. 기능이 언제 생성되는지 확인하십시오 strip. 나는 escamotage if (interval !== 0) { interval_screen = interval; }을 사용했는데 왜냐하면 나는 0을 인쇄하지 않기를 원하기 때문이다. 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 interval = hrmInfo.rRInterval;)을 제거하고 소수점이 더 많은 숫자가 실제로 있는지 확인하십시오.

나는 당신의 예제에서 만들 수 없지만, 값이 일반적으로 분당 120과 같은 경우. 그리고 그 뒤에 더 정확한 값이 있는지 알고 싶다면 값이 항상 120000과 같이 모두 0 일 경우 값이 1200054와 같아야합니다. 그런 다음 해당 이벤트를 만드는 시스템이 더 정확한 측정 값을 제공하지 않습니다.

+0

답장을 보내 주셔서 감사합니다! 예, 실제로 호출되지 않습니다. 물론 이것은 오류 중 하나입니다. 나는 그것을 직접 호출하려고 노력할 것이다. 분당 심장 박동 (bpm)이 아니기 때문에 2 개의 연속적인 박자 사이의 시간이기 때문에 그 부분이 필요합니다. 그리고 센서는 밀리 초 단위로 값을 제공하기 때문에 초 단위로 값이 필요합니다. – Marcofon

+0

안녕하세요, 센서의 정밀도를 높일 수 없다고 생각하십니까? 나는 또한 센서에서 오는 데이터의 이상한 행동을 가지고있다. 그것은 심지어 값만 인쇄되고 나는 왜 그런지 모릅니다. – Marcofon

+0

데이터 로깅 및 파기없이 말하기가 어려울 수 있습니다. 본 기기와 관련하여 귀하가 제공 한 정보와 코드를 결합한 경우. 말하기 : onchangedCB는 심장 박동수에 대한 업데이트를 제공하기 위해 트리거되며 hrmInfo.heartRate는 이미 BPM에 대해 정상화 된 심박수입니다. 그러면 hrmInfo.rRInterval은 이러한 간격 사이에서 실제로 측정 된 것을 알지 못하는 경우 도움이되지 않을 수 있습니다. 독서력을 '향상'하려면 BPM으로 이어질 수있는 2 가지 변수가 필요합니다. (Interval + beats this intervals) bij에 1 분 내에 맞출 간격의 수를 곱합니다. –