nodejs-tw / ama

Ask me anything!
MIT License
31 stars 1 forks source link

node.js中傳值的問題 #19

Closed fxsh1301 closed 7 years ago

fxsh1301 commented 7 years ago

感謝使用 Node.js Taiwan AMA,以下附上簡單提問範例供參考,請把內容改成你自己遇到的問題

目的

在每次接收到從各個xbee收到資料時能回應"ack"供判斷

使用的工具

<<我在 Pi3 - Raspbian GNU/Linux 下使用 npm 安裝 node.js 6.9.5 >>

操作流程

<<我下了 xxx 指令,輸入了下面的程式碼,>>

遇到的問題

參考了網路上範例使用xbee-api 目前想讓他每XX時間送出時間的資訊 (可能是以小時為單位) 在每次接收到從各個xbee收到資料時能回應"ack"供判斷 但必須知道來源是哪顆xbee所以用變數recadd紀錄下來 像這樣的變數如何傳到下方傳送的地方做使用呢

嘗試過的解法

試過把傳送ack整段塞進讀取封包的地方但無反應

程式碼

var util = require('util'); var SerialPort = require('serialport'); var xbee_api = require('xbee-api');

var C = xbee_api.constants;

var xbeeAPI = new xbee_api.XBeeAPI({ api_mode: 2 });

var serialport = new SerialPort("/dev/ttyS0", { baudrate: 9600, parser: xbeeAPI.rawParser() }); var d= new Date(); var yyyy =d.getFullYear() var MM = (d.getMonth()+1<10 ? '0' : '')+(d.getMonth()+1); var dd = (d.getDate()<10 ? '0' : '')+d.getDate(); var h = (d.getHours()<10 ? '0' : '')+d.getHours(); var m = (d.getMinutes()<10 ? '0' : '')+d.getMinutes(); var s = (d.getSeconds()<10 ? '0' : '')+d.getSeconds();

if(m%5==0){ // correction time every 5 min serialport.on("open", function () { var frame_obj = { type: 0x10, id: 0x01, //destination64: "0013A20040D8DA8D", destination64: "0013A20040D8DA68", destination64: "0013A20040D8DA93", broadcastRadius: 0x00, options: 0x00, data: ""+h+m+s+dd+MM+yyyy };

serialport.write(xbeeAPI.buildFrame(frame_obj));
console.log('Sent to serial port.');

}); }

serialport.on('data', function (data) { console.log('data received: ' + data);

});

// All frames parsed by the XBee will be emitted here xbeeAPI.on("frame_object", function (frame) { console.log(">>", frame); var d= new Date(); var yyyy =d.getFullYear() var MM = (d.getMonth()+1<10 ? '0' : '')+(d.getMonth()+1); var dd = (d.getDate()<10 ? '0' : '')+d.getDate(); var h = (d.getHours()<10 ? '0' : '')+d.getHours(); var m = (d.getMinutes()<10 ? '0' : '')+d.getMinutes(); var s = (d.getSeconds()<10 ? '0' : '')+d.getSeconds(); console.log( ""+h+"-"+m+"-"+s+"-"+dd+"-"+MM+"-"+yyyy); var recadd = frame.remote64; console.log(recadd);

});

/**/ serialport.on("open", function () { //send the ack back to xbee which recieve var frame_obj = { type: 0x10, id: 0x01, //destination64:recadd , broadcastRadius: 0x00, options: 0x00, data: "ack" }; serialport.write(xbeeAPI.buildFrame(frame_obj)); console.log('Sent to serial port.'); });