从一个数组读取数据并将数据写入另一个数组,谷歌图表实现

时间:2015-09-09 15:06:47

标签: javascript arrays cordova

很抱歉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代码中。

感谢您的任何建议

0 个答案:

没有答案