Здравствуйте! Я использую датчик давления для отправки информации из Arduino. Я использую Java-программу для получения информации и отображения ее в jfreechart.
Я использую последовательное событие для получения информации и сохраняю данные в созданном мною объектном классе, затем я использую данные для выполнения некоторых операций, а затем пытаюсь нарисовать информацию.
package application;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.util.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import gnu.io.CommPortIdentifier;
import javafx.application.Platform;
import javafx.embed.swing.SwingNode;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
public class controllermenu implements SerialPortEventListener, Initializable {
private OutputStream output;
private InputStream input;
private final static String PUERTO = "COM8";
SerialPort serialPort;
private ArrayList<medidas> medidas = new ArrayList<>();
XYSeries series = new XYSeries("peso");
private XYSeriesCollection dataset = new XYSeriesCollection(series);
private JFreeChart grafico;
@FXML
private BorderPane Contenedor;
@FXML
private Button Parar;
@FXML
private Button Guardar;
private medidas medida;
int i=0;
@FXML
private Button Empezar;
public void inicializarConexion() {
CommPortIdentifier puertoID = null;
Enumeration puertoEnum = CommPortIdentifier.getPortIdentifiers();
while (puertoEnum.hasMoreElements()) {
CommPortIdentifier actualPuertoID = (CommPortIdentifier) puertoEnum.nextElement();
if (PUERTO.equals(actualPuertoID.getName())) {
puertoID = actualPuertoID;
System.out.println("llega");
break;
}
}
if (puertoID == null) {
System.out.println("No llega");
System.exit(0);
}
try {
serialPort = (SerialPort) puertoID.open(this.getClass().getName(), 2000);
// Parámetros puerto serie
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
output = serialPort.getOutputStream();
input = serialPort.getInputStream();
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (Exception e) {
System.out.println("llego aqui");
System.exit(0);
}
}
@Override
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
String linea;
Scanner scan = new Scanner(input);
int dato = 0;
float modificado;
double tiempoSeg;
while (scan.hasNextLine()) {
String tiempo;
medida = new medidas();
linea = scan.nextLine();
dato = Integer.parseInt(linea);
modificado = (float) (dato * 5) / 1024;
System.out.println(modificado);
tiempoSeg = (double) System.currentTimeMillis()/1000;
System.out.println(tiempoSeg);
tiempo = String.valueOf(tiempoSeg);
medida.setTiempo(tiempo);
medida.setPeso(modificado);
System.out.println(medida.getPeso());
medidas.add(medida);
series.add(Double.parseDouble(medidas.get(i).getTiempo()), medidas.get(i).getPeso());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@FXML
void onclickempezar(ActionEvent event) {
inicializarConexion();
}
@FXML
void onclickguardar(ActionEvent event) {
}
@FXML
void onclickparar(ActionEvent event) {
if(serialPort != null){
serialPort.removeEventListener();
serialPort.close();
}
}
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
grafico = ChartFactory.createXYLineChart("Presión vs Tiempo", "Tiempo", "Presión", dataset);
ChartPanel panel = new ChartPanel(grafico);
SwingNode node = new SwingNode();
node.setContent(panel);
Contenedor.setCenter(node);
}
}
Видимо, все правильно, но я не вижу ничего рисуемого на графике. Если кто-то может помочь, это будет оценено. Спасибо.