更新:我正在使用的代码可以在这里找到:https://dl.dropbox.com/u/2108381/MyArduinoPlot.java 我希望这有助于理解我的挑战。提前感谢您的时间。
我想从Arduino中读取传感器值并使用Java库JFreeChart绘制它们。
我在互联网上找到了一些代码(见下文),现在,我想结合用于绘制动态折线图的代码和用于读取Arduino值的代码。这两个代码都是分开工作的,但我仍然坚持将两者结合起来。
绘制动态折线图的代码来自此处(绘制随机数据): http://dirtyhandsphp.blogspot.in/2012/07/how-to-draw-dynamic-line-or-timeseries.html
用Java读取Arduino值的代码来自: http://arduino.cc/playground/Interfacing/Java
我假设(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的新手。
非常感谢任何直接帮助或与其他网站/帖子的链接。谢谢你的时间。
答案 0 :(得分:1)
在此example中,javax.swing.Timer
会定期向计时器dataset
中的ActionListener
添加新值。你想从外面做。以下是如何进行的概述:
将dataset
和newData
移至instance variables:
DynamicTimeSeriesCollection dataset;
float[] newData = new float[1];
添加一种方法,将您的数据附加到图表的dataset
:
public synchronized void addData(byte[] chunk) {
for (int i = 0; i < chunk.length; i++) {
newData[0] = chunk[i];
dataset.advanceTime();
dataset.appendData(newData);
}
}
从serialEvent()
:
demo.addChunk(chunk);