很抱歉noob问题,但我在使用javascript中的数组时遇到问题。我在2字节数据包中读取arduino的BLE数据,并将汇编后的数据存储在一个数组中。基本上,arduino通过BLE发送当前临时读数,并将其存储在数组中。
// Start reading notifications.
evothings.ble.enableNotification(
deviceHandle,
app.characteristicRead,
function(data)
{
app.displayStatus('Active');
app.drawLines([new DataView(data).getUint16(0, true)]);
},
function(errorCode)
{
app.displayStatus('enableNotification error: ' + errorCode);
});
然后数据显示在2d折线图中
drawLines: function(dataArray)
{
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
var dataPoints = app.dataPoints;
dataPoints.push(dataArray);
if (dataPoints.length > canvas.width)
{
dataPoints.splice(0, (dataPoints.length - canvas.width));
}
var magnitude = 1200;
function calcY(i)
{
return (i * canvas.height) / magnitude;
}
function drawLine(offset, color)
{
context.strokeStyle = color;
context.beginPath();
context.moveTo(0, calcY(dataPoints[dataPoints.length-1][offset]));
var x = 1;
for (var i = dataPoints.length - 2; i >= 0; i--)
{
var y = calcY(dataPoints[i][offset]);
context.lineTo(x, y);
x++;
}
context.stroke();
}
context.clearRect(0, 0, canvas.width, canvas.height);
drawLine(0, '#f00');
},
这一切都运行正常但我想调整此代码以将当前临时数据(数据数组中的最后一个条目)显示为谷歌图表(计量器)。
// Start reading notifications.
evothings.ble.enableNotification(
deviceHandle,
app.characteristicRead,
function(data)
{
app.drawChart([new DataView(data).getUint16(0, true)]);
},
function(errorCode)
{
console.log('enableNotification error: ' + errorCode);
});
和
drawChart: function(dataArray) {
var chartdata = google.visualization.arrayToDataTable([
['Label', 'Value'],
['Temp', 0]
]);
var options = {
width: 800, height: 240,
redFrom: 900, redTo: 1200,
yellowFrom:750, yellowTo: 900,
greenFrom:550, greenTo: 750,
minorTicks: 5,
max: 1200,
};
var chart = new google.visualization.Gauge(document.getElementById('chart_div'));
chart.draw(chartdata, options);
setInterval(function() {
var temp = dataArray.slice(-1)[0];
chartdata.setValue(0, 1, temp);
chart.draw(chartdata, options);
}, 1000);
},
这个改编的代码可以很奇怪地运行。最初图表保持为零,如果我重新启动arduino临时更新,但只保留一次并保持该值,即使arduino正在发送新值。我认为我编写了改编的代码错误但不确定我在做什么。我几乎不了解C ++,并试图找出如何使这个js适应我的项目。
我使用此函数从数组中取出最后一个条目,不确定这是否正确:
dataArray.slice(-1)[0]
我知道这是一个js问题,当我用2d线图运行初始代码时,一切正常,数据不断更新。两个图表都来自同一个BLE数据数组,因此问题应该出现在我的js代码中。
感谢您的任何建议