2016-06-21 15 views
0

node.jsを使用して複数のセンサーデータをプロットする私は複数のストリームを送信するためのいくつかのコードを持っていますが、コマンドプロンプトにmsgが表示されたときにすべてのストリームが利用可能です。 x軸にタイムスタンプ、y軸に値のある第1センサデータを送信していますが、第2センサの場合はタイムスタンプ(x軸値)のみを送信していますが、センサの値は送信していません。だから、誰かが私が間違いを犯していると言うことができますか? arduinoのスクリーンショットのコードが添付されています。 arduino code part1commandprompt outputArduinoとPlotly

[Arduinoのコードその2] [3]

var serialport = require('serialport'), 
plotly = require('plotly')('Maryam_19','vvvvvvvvv'); 
tokens = ['kfkdfkgrg', 'ggggggg']; 


var portName = 'COM3'; 
var sp = new serialport.SerialPort(portName,{ 
baudRate: 9600, 
dataBits: 8, 
parity: 'none', 
stopBits: 1, 
flowControl: false, 
parser: serialport.parsers.readline("\r\n") 
}); 

// helper function to get a nicely formatted date string 
function getDateString() { 
var time = new Date().getTime(); 
// 32400000 is (GMT+9 Japan) 
// for your timezone just multiply +/-GMT by 3600000 
var datestr = new Date(time + 18000000).toISOString().replace(/T/, '  ').replace(/Z/, ''); 
return datestr; 
} 
// wanting to create sub-plots with two data-streams 
var initdata = [ 
       {name: 'LeftSensor', x:[], y:[], stream:{token:tokens[0],   maxpoints: 1500}}, 
       {name: 'RightSensor', x:[], y:[], stream:{token:tokens[1], maxpoints: 1500}} 
      ]; 

var initlayout = {fileopt : 'new', filename : 'Connected Car 1'}; 

plotly.plot(initdata, initlayout, function (err, msg) { 
if (err) return console.log(err) 

console.log(msg); 

// creating two streams 
var streams = { 
    'LeftSensor' : plotly.stream(tokens[0], function (err, res) { 
     if (err) console.log(err); 
     console.log(err, res); 
    }), 
    'RightSensor' : plotly.stream(tokens[1], function (err, res) { 
     if (err) console.log(err); 
     console.log(err, res); 
    }) 
}; 
sp.on('data', function(input) { 


    if(isNaN(input) || input > 1023) return; 

    var values = input.split('\t'); 

    // writing the leftSensor stream 
    var leftStreamObject = JSON.stringify({ x : getDateString(), y : values[0] }); 
    console.log('LeftSensorObject: ' + leftStreamObject); 
    streams['LeftSensor'].write(leftStreamObject + '\n'); 

     // writing the rightsensor stream 
    var RightStreamObject = JSON.stringify({ x : getDateString(), y : values[1] }); 
    console.log('RightSensorObject: ' + RightStreamObject); 
    streams['RightSensor'].write(RightSensorObject + '\n'); 
}); 

})。このコードで

+0

第二のセンサのための読書でも、実際に送っているが、最初のsensor..likeと、まず、それはStackOverflowのに歓迎左センサーの読み取り値、右センサーの読み取り値が左サイドセンサータグ – Maryam

+0

こんにちはにし、送信してください。 **あなたの投稿を**編集してシリアルモニタにトレースの例を追加できますか?さらに、この質問で何が何であるかを理解することは難しい:スケッチの変数の名前が* first sensor *または* second sensor *ではない場合、これを修正するために問題の説明を編集できますか?最後:希望の出力を生成しないコード行を特定できますか? –

+0

変数 'distance'は左センサーの距離を示し、変数 'distance1'は右センサーの距離を示しています。コードはシリアルモニタで正常に動作しています。しかし、私はコマンドプロンプトを開き、それを送信する私の陰謀的なコードを実行すると、それは両方のセンサーのデータを送信していますが、diffrentiating..iは、それはまた、左のセンサー値。なぜなら私のグラフでは、両方の読みを伝える行が1つしかないからです。一方私は、別々の読み取りを示す2つの別々の線を持っているべきです。 – Maryam

答えて

0

sp.on('data', function(input) { 
    if(isNaN(input) || input > 1023) return; 

    var values = input.split('\t'); 

    var leftStreamObject = JSON.stringify({ x : getDateString(), y : values[0] }); 
    console.log('LeftSensorObject: ' + leftStreamObject); 
    streams['LeftSensor'].write(leftStreamObject + '\n'); 

    var RightStreamObject = JSON.stringify({ x : getDateString(), y : values[1] }); 
    console.log('RightSensorObject: ' + RightStreamObject); 
    streams['RightSensor'].write(RightSensorObject + '\n'); 
}); 

あなたは、私はラインことになって、ここで推測inputは、タブ記号で区切られた2つの値を持っていることを前提としています。

しかし、それはあなたのArduinoコードで印刷するものではありません。

私はあなたがこのような後者のソースコードを変更するお勧め:

void loop() { 
    ... 
    distance = (duration/2)/29.1; 
    Serial.print(distance); 
    Serial.print('\t'); 
    delay(2000); 
    ... 
    distance1 = (duration1/2)/29.1; 
    Serial.println(distance1); 
    delay(2000); 
} 

これはあなたのパーサとArduinoのデバイスの出力は、互換性を持たせる必要があります。あなたは事実を認識している場合を除き

別のノートで

、私はおそらくint型する距離を宣言することを提案したいことは、正しくないことフロートで整数を割る(29.1 )、結果を整数に格納すると近似誤差が生じます。

それは場合、あなたはないはずだ場合:フロート

  • 除算距離とdistance1が2によるものと

    • 宣言距離とdistance1。代わりに

    EDITの0

    sp.on('data', function(input) { 
        input = input.strip() 
    
        if not len(input) > 0: 
         return 
    
        var values = input.split('\t'); 
    
        if len(values) != 2: 
         raise ValueError('Unable to parse <' + str + '> input.') 
    
        var leftStreamObject = JSON.stringify({ x : getDateString(), y : values[0] }); 
        console.log('LeftSensorObject: ' + leftStreamObject); 
        streams['LeftSensor'].write(leftStreamObject + '\n'); 
    
        var RightStreamObject = JSON.stringify({ x : getDateString(), y : values[1] }); 
        console.log('RightSensorObject: ' + RightStreamObject); 
        streams['RightSensor'].write(RightSensorObject + '\n'); 
    }); 
    
    :あなたが経験している第二の問題を解決するために

    、私はあなたがこのようなあなたののpythonコードを変更示唆します

  • +0

    はい、それはarduinoコードのタブを追加することで動作します。しかし、現在はスクリーンショットに示されているようにデータを送信しています.2つの読み取りと2つの空白の読み取りを送ります。 – Maryam

    +0

    @Maryam I私のポストを編集しました –

    +0

    予期せぬ識別子のエラーを示しています。この行で: if not len(input)> 0: – Maryam

    0
    var serialport = require('serialport'), 
    plotly = require('plotly')('Maryam_19','xoius1zote'); 
    tokens = ['fqar271jly', '1vnlkdlt7l','x3lfitv9qb','4qvzyuq050']; 
    
    
    var portName = 'COM7'; 
    var sp = new serialport.SerialPort(portName,{ 
    baudRate: 9600, 
    dataBits: 8, 
    parity: 'none', 
    stopBits: 1, 
    flowControl: false, 
    parser: serialport.parsers.readline("\r\n") 
    }); 
    
    // helper function to get a nicely formatted date string 
    function getDateString() { 
    var time = new Date().getTime(); 
    // 32400000 is (GMT+9 Japan) 
    // for your timezone just multiply +/-GMT by 3600000 
    var datestr = new Date(time + 18000000).toISOString().replace(/T/, '    ').replace(/Z/, ''); 
    return datestr; 
    } 
    

    // 2つのデータストリームを持つサブプロットを作成したい var initdata = [ {名前: 'LeftSensor'、x:[]、y:[]、ストリーム:{トークン:トークン[0]、maxpoints:1500 [名前: 'FrontSensor'、x:[]、 {name: 'RightSensor'、x:[]、y:[]、ストリーム: [名前: 'BackSensor'、x:[]、y:[]、ストリーム:{トークン:トークン[3]、maxpoints [y:[]、ストリーム:{トークン:トークン[2]、maxpoints:1500}}、 :1500}} ];

    var initlayout = {fileopt : 'new', filename : 'Connected Car 1'}; 
    
    plotly.plot(initdata, initlayout, function (err, msg) { 
    if (err) return console.log(err) 
    
    console.log(msg); 
    
    // creating four streams 
    var streams = { 
    'LeftSensor' : plotly.stream(tokens[0], function (err, res) { 
        if (err) console.log(err); 
        console.log(err, res); 
        }), 
    'RightSensor' : plotly.stream(tokens[1], function (err, res) { 
        if (err) console.log(err); 
        console.log(err, res); 
        }), 
    
        'FrontSensor' : plotly.stream(tokens[2], function (err, res) { 
        if (err) console.log(err); 
        console.log(err, res); 
        }), 
    
        'BackSensor' : plotly.stream(tokens[3], function (err, res) { 
        if (err) console.log(err); 
        console.log(err, res); 
        }) 
    
        }; 
        sp.on('data', function(input) { 
    
    
    
        var values = input.split('\t'); 
    
    // writing the leftSensor stream 
        var leftStreamObject = JSON.stringify({ x : getDateString(), y : values[0] }); 
    console.log('LeftSensorObject: ' + leftStreamObject); 
    streams['LeftSensor'].write(leftStreamObject + '\n'); 
    
        // writing the rightsensor stream 
        var RightStreamObject = JSON.stringify({ x : getDateString(), y :  values[1] }); 
    console.log('RightSensorObject: ' + RightStreamObject); 
    streams['RightSensor'].write(RightStreamObject + '\n'); 
    
    // writing the frontsensor stream 
    var FrontStreamObject = JSON.stringify({ x : getDateString(), y : values[2] }); 
        console.log('FrontSensorObject: ' + FrontStreamObject); 
        streams['FrontSensor'].write(FrontStreamObject + '\n'); 
    
        //writing the Backsensor stream 
        var BackStreamObject = JSON.stringify({ x : getDateString(), y : values[3] }); 
        console.log('BackSensorObject: ' + BackStreamObject); 
        streams['BackSensor'].write(BackStreamObject + '\n'); 
    
    
        }); 
        });