DynamicTimeSeriesCollection和串行通信



我使用DynamicTimeSeriesCollection将串行端口的测量值绘制到图形中。我想使用我在另一篇文章中找到的代码。

我想实现这样的目标:使用JFreeChart显示时间序列的最近变化

我发现的另一个帖子的代码:

如何结合Java绘图代码和Java串行代码来读取Arduino传感器值?

1. Move dataset and newData up to become instance variables:
DynamicTimeSeriesCollection dataset;
float[] newData = new float[1];
2. Add a method that appends your data to the chart's dataset:
public synchronized void addData(byte[] chunk) {
    for (int i = 0; i < chunk.length; i++) {
        newData[0] = chunk[i];
        dataset.advanceTime();
        dataset.appendData(newData);
    }
}
3. Invoke the method from serialEvent():
demo.addChunk(chunk);

这是我在SerialCommunication类中的Serial Event方法:

public void serialEvent(SerialPortEvent oEvent) {
    if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
        try
        {
            Date d = new Date();
            SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            String datetime = dt.format(d);
            String inputLine = input.readLine();
            String[] measurements = inputLine.split(",");
            double humidity = Double.parseDouble(measurements[0]);
            double temp = Double.parseDouble(measurements[1]);
            double ldr = Double.parseDouble(measurements[2]);
            humidityList.add(humidity);
            tempList.add(temp);
            ldrList.add(ldr);
            System.out.println(datetime+" > "+inputLine);
        }
        catch (Exception e) {
            System.err.println(e.toString());
        }
    }
}

串行通信类中的ArrayList:

private ArrayList<Double> humidityList = new ArrayList<Double>();
private ArrayList<Double> tempList = new ArrayList<Double>();
private ArrayList<Double> ldrList = new ArrayList<Double>();

以下是我如何在GUI类中声明ArrayList:

private static ArrayList<Double> m1;
private static ArrayList<Double> m2;
private static ArrayList<Double> m3;

public GUI(final String title,ArrayList<Double> humidity,ArrayList<Double> temp,ArrayList<Double> ldr) 
{
super(title);
m1 = humidity;
m2 = temp;
m3 = ldr;

我确实尝试过修改我在测量中发现的代码,但没有成功。知道我该如何做到这一点吗?

SwingWorker是处理此问题的最佳方法。

  • 创建一个包含三个Double属性的类Measurement

  • 扩展SwingWorker<Measurement, Measurement>

  • doInBackground()publish()的实现中,每个Measurement到达时。

  • process()的实现中,按照此处和此处的建议更新图表的数据集。

相关内容

  • 没有找到相关文章

最新更新