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

如何结合Java绘图代码和Java串行代码读取Arduino传感器值?,java,charts,serial-port,arduino,jfreechart,Java,Charts,Serial Port,Arduino,Jfreechart,更新:我正在使用的代码可以在这里找到: 我希望这有助于理解我的挑战。提前感谢您抽出时间 我想从Arduino读取传感器值,并使用Java库JFreeChart绘制它们的图表 我在互联网上找到了一些代码(见下文),现在,我想结合绘制动态折线图的代码和读取Arduino值的代码。这两种代码都是分开工作的,但我一直在把它们结合起来 绘制动态折线图的代码来自此处(绘制随机数据): 在Java中读取Arduino值的代码如下: 我假设(Java新手)相关部分如下: /** * Handle an e

更新:我正在使用的代码可以在这里找到: 我希望这有助于理解我的挑战。提前感谢您抽出时间

我想从Arduino读取传感器值,并使用Java库JFreeChart绘制它们的图表

我在互联网上找到了一些代码(见下文),现在,我想结合绘制动态折线图的代码和读取Arduino值的代码。这两种代码都是分开工作的,但我一直在把它们结合起来

绘制动态折线图的代码来自此处(绘制随机数据):

在Java中读取Arduino值的代码如下:

我假设(Java新手)相关部分如下:

/**
 * Handle an event on the serial port. Read the data and print it.
 */
public synchronized void serialEvent(SerialPortEvent oEvent) {
    if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
        try {
            int available = input.available();
            byte chunk[] = new byte[available];
            input.read(chunk, 0, available);

            // Displayed results are codepage dependent
            System.out.print(new String(chunk));

//              the code I tried

//              String MyValue = new String(chunk);
//              Double Value = Double.valueOf(MyValue); 

        } catch (Exception e) {
            System.err.println(e.toString());
        }
    }
    // Ignore all the other eventTypes, but you should consider the other ones.
}
在这里:

public void actionPerformed(final ActionEvent e) {


//      Original Code

    final double factor = 0.9 + 0.2*Math.random();
    this.lastValue = this.lastValue * factor;

    final Millisecond now = new Millisecond();
    this.series.add(new Millisecond(), this.lastValue);

    System.out.println("Current Time in Milliseconds = " + now.toString()+", Current Value : "+this.lastValue);

//        my code
//        this.series.add(new Millisecond(), Value);


}
如何使
public synchronized void serialEvent
返回传感器值,以及如何将其添加到
this.series.add
部分

我是Java的新手

任何直接帮助或链接到其他网站/帖子都将不胜感激。感谢您的时间。

在此,一个
javax.swing.Timer
会定期向计时器的
ActionListener
中的
数据集添加一个新值。你会想在外面做的。以下是如何进行的概述:

  • 数据集
    新数据
    上移到以下位置:

  • 添加将数据附加到图表的
    数据集的方法:

    public synchronized void addData(byte[] chunk) {
        for (int i = 0; i < chunk.length; i++) {
            newData[0] = chunk[i];
            dataset.advanceTime();
            dataset.appendData(newData);
        }
    }
    

  • 谢谢你的回答,垃圾神。不幸的是,我并不完全理解这一点。我需要将“demo.addChunk(chunk)”放在哪里,以及如何处理“this.series.add(new millis秒(),this.lastValue)”;或方法“actionPerformed(final ActionEvent e)”。再次感谢您的时间。a)第3项要求从
    serialEvent()
    调用
    addChunk()
    ;b) 我举了一个不同的例子,它使用了
    advanceTime()
    ;c) 无
    计时器
    表示无
    操作执行()。顺便说一句,我不知道你的数据块里有什么。亲爱的@trashgood,再次感谢你的时间和帮助。不幸的是,我有一段时间无法回到这个问题上来,现在,我无法让它发挥作用,是指向包含所有代码的java文件的链接。如果有人有时间和技能来帮助我,那就太好了。谢谢您的时间。当您从
    serialEvent()
    调用
    addData()
    时会发生什么?我不知道在哪里打这个电话,@trashgood。我试过各种方法,但都没有用。对不起,我是新手。我的代码中仍然有“actionPerformed”。希望没问题。再次感谢你帮助我。
    public synchronized void addData(byte[] chunk) {
        for (int i = 0; i < chunk.length; i++) {
            newData[0] = chunk[i];
            dataset.advanceTime();
            dataset.appendData(newData);
        }
    }
    
    demo.addChunk(chunk);