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