如何在java中使用XYSeries而不跟踪整个历史记录,以显示心跳?

时间:2016-02-20 00:39:37

标签: java arduino serial-port jfreechart

我按照youtube上的指南创建了一个从串口读取的java程序,该程序连接到arduino uno,并在jfreechart XYSeries图上显示读数。 我正在尝试使用连接到arduino的心跳传感器来显示心跳,并且arduino通过串行端口连接。我已经设法在图表上显示读数,但图表从头开始记录读数,但是,我希望它只显示最后一秒或某事,以便图表看起来像真实的心跳读数。这是我绘制值的代码

        series = new XYSeries("Heart Reading");
        XYSeriesCollection dataset = new XYSeriesCollection(series);
        JFreeChart chart = ChartFactory.createXYLineChart(
                "Your heartbeats", "Time (seconds)", "ADC Reading", dataset);
        window.add(new ChartPanel(chart), BorderLayout.CENTER);

        port = SerialPort.getCommPort("COM5");
        if(port.openPort()){
            System.out.println("Success");
            port.setComPortTimeouts(SerialPort.TIMEOUT_SCANNER, 0, 0);
            port.setBaudRate(9600);

            Thread thread = new Thread(){
                @Override public void run() {
                    Scanner scanner = new Scanner(port.getInputStream());
                    while(scanner.hasNextLine()) {
                        try {
                            String line = scanner.nextLine();
                            int number = Integer.parseInt(line);
                            series.add(x++, number);
                            window.repaint();
                        } catch(Exception e) {}
                    }
                    scanner.close();
                }
            };
            thread.start();

我知道问题是我只是在不删除它们的情况下添加值,但是如果值很多,我怎么能删除它?

1 个答案:

答案 0 :(得分:0)

由于您要删除XYSeries的元素,为什么不使用XYSeries类的delete()方法?

一旦你的系列是一定的长度,你可以开始为你在最后添加的每个元素删除一个元素。

除非我遗漏了一些明显的东西,否则这似乎很容易。