2016-06-21 35 views
0

我想發送多個傳感器數據來使用node.js.我有一些發送多個流的代碼,但在命令提示符顯示消息時,所有的流都準備好了。它將發送第一個傳感器數據,其中x軸的時間戳和y軸的值,但是第二個傳感器只發送時間戳(x軸值),而不是傳感器的值。那麼誰能告訴我我犯了什麼錯誤?附上了arduino屏幕截圖的代碼。 arduino code part1 commandprompt 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首先它發送左邊的傳感器讀數,然後右邊傳感器的讀數,但在左傳感器標籤 – Maryam

+0

大家好,歡迎StackOverflow上。你可以**編輯**你的文章並在串口監視器中添加一個跟蹤示例?此外,很難理解此問題中的含義:草圖中的變量未命名爲* first sensor *或* second sensor *,您是否可以編輯您的問題描述以解決此問題?最後:你能指出哪一行代碼不能產生所需的輸出嗎? –

+0

變量'距離'顯示左側傳感器的距離,變量'距離1'顯示右側傳感器的距離。並且代碼在串行監視器上正常工作。但是當我打開命令提示符並運行我的劇情代碼發送它時,它將發送兩個傳感器的數據但不diffrentiating ..我的意思是說,它正在發送正確的傳感器的值也作爲左傳感器值。因爲我可以在圖表中看到只有一行告訴閱讀。而我應該有兩個單獨的行顯示單獨的讀數。 – 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,我想這應該是一個,具有由標籤符號分隔的兩個值。

但是,這不是你打印在你的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 ),然後將結果存儲在整數中會導致近似誤差。

如果不是的話,你應該:

  • 申報距離,距離1是浮動通過
  • 鴻溝的距離和距離1。而不是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'); 
}); 
+0

是的,它通過在arduino代碼中添加標籤..但現在它正在發送數據如截圖所示..發送兩個閱讀,然後兩個空白閱讀.. – Maryam

+0

@Maryam I編輯我的文章 –

+0

它給出了一個意外標識符的錯誤..在這一行: 如果不是len(輸入)> 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; 
} 

//想創建兩個數據流的子圖 var initdata = {LeftSensor',x:[],y:[],stream:{token:tokens [0],maxpoints:1500 }}, {name:'RightSensor',x:[],y:[],stream:{token:tokens [1],maxpoints:1500}}, {name:'FrontSensor',x:[], y:[],stream:{token:tokens [2],maxpoints:1500}}, {name:'BackSensor',x:[],y:[],stream:{token:tokens [3] :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'); 


    }); 
    });