Не могу нарисовать в jfreechart после получения информации от Arduino - PullRequest
0 голосов
/ 25 марта 2019

Здравствуйте! Я использую датчик давления для отправки информации из 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);
    }

}

Видимо, все правильно, но я не вижу ничего рисуемого на графике. Если кто-то может помочь, это будет оценено. Спасибо.

...