Последовательное подключение Java и проблема с файлом (Arduino и Java)

У меня есть arduino uno, подключенный к моему ПК, и я пытаюсь использовать программу Java, которая создает графический интерфейс, поэтому я подключаюсь к последовательному порту и сохраняю все данные в файле, который будет назван сегодняшней датой.

но когда я использую его, чтобы попытаться подключиться к последовательному порту, я получаю много ошибок.


import java.io.*;
import java.util.Date;
import java.util.Scanner;
import javax.swing.*;
import com.fazecast.jSerialComm.SerialPort;
import java.awt.*;
import java.awt.event.*;

public class FluidDynamicSerial implements ActionListener {

    //main frame
    JFrame window;

    //create class members for buttons/check-box and drop-down
    JComboBox<String> portList;
    JButton connectButton;
    JCheckBox multFilesDay;

    //variables for files
    boolean nameWithTime = false;
    String name;

    //warning message
    String msg = "This file already exists. By default all files are named with today's date, if you wish to fix this problem either rename the file in the current diretory or click the multiple files in one day chekbox";

    //serial port var
    SerialPort port;


    //file vars
    File file;
    FileWriter writeFile;
    BufferedWriter buffWriteFile;

    //Date var
    Date date;

    public static void main(String[] args) {
        new FluidDynamicSerial();
    }

    @SuppressWarnings("deprecation")
    public FluidDynamicSerial() {
        //create window
        window = new JFrame();
        window.setTitle("Save Sensor Readings");
        window.setSize(300, 150);
        window.setLayout(new BorderLayout());
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //create drop-down and button to connect to serial port
        portList = new JComboBox<String>();
        connectButton = new JButton("Connect");

        //create Top Panel to place drop-down & button
        JPanel topPanel = new JPanel();
        topPanel.add(portList);
        topPanel.add(connectButton);
        window.add(topPanel, BorderLayout.NORTH);

        //create middle panel with hekBox to have multiple files in one day
        multFilesDay = new JCheckBox("Multiple Files in one day");
        JPanel centerPanel = new JPanel();
        centerPanel.add(multFilesDay);
        window.add(centerPanel, BorderLayout.CENTER);

        //place serial port options in drop-down
        SerialPort[] portOptions = SerialPort.getCommPorts();
        for(int i = 0; i < portOptions.length; i++) {
            portList.addItem(portOptions[i].getSystemPortName());
        }

        //file code
        date = new Date();
        String month = new Integer(date.getMonth()+1).toString();
        String yr = new Integer(date.getYear()+1900).toString();

        if (nameWithTime == true) {
            name = month + "-" + date.getDate() + "-" + yr + "_" + date.getHours() + "_" + date.getMinutes() + ".txt";
        } else {
            name = month + "-" + date.getDate() + "-" + yr + ".txt";
        }

        file = new File(name);



        window.setVisible(true);

        connectButton.addActionListener(this);
        multFilesDay.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent event){
        Object control = event.getSource();

        if (control == connectButton) {
            if (connectButton.getText().equals("Connect")) {
                port = SerialPort.getCommPort(portList.getSelectedItem().toString());
                port.setComPortTimeouts(SerialPort.TIMEOUT_SCANNER, 0, 0);
                if (port.openPort()) {
                    connectButton.setText("Disconnect");
                    portList.setEnabled(false);
                }
                Scanner scan = new Scanner(port.getInputStream());
                while(scan.hasNextLine()) {
                    if (file.exists()) {
                        JOptionPane.showMessageDialog(window,
                                msg,
                                "File Dupliation Error",
                                JOptionPane.ERROR_MESSAGE);
                        scan.close();
                    } else {
                        try {
                            writeFile = new FileWriter(file);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        buffWriteFile = new BufferedWriter(writeFile);
                        String line = scan.nextLine();
                        try {
                            buffWriteFile.append(date.toString() + " " + line + " " + "\n");
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
                scan.close();
                try {
                    buffWriteFile.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                port.closePort();
                portList.setEnabled(true);
                connectButton.setText("Connect");
            }
        } else if (control == multFilesDay) {
            if (multFilesDay.isEnabled()) {
                nameWithTime = true;
            } else if (multFilesDay.isEnabled() == false) {
                nameWithTime = false;
            }
        }
    }
}

Я ожидаю, что программа создаст текстовый файл, имя которого будет сегодняшней датой, и в нем будут все мои данные из последовательного порта (показания напряжения).

Можете ли вы обновить вопрос с ошибками, с которыми вы столкнулись?

Saurabh P Bhandari 14.06.2019 02:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я переставил часть своего кода и изменил его, и теперь он работает, спасибо всем, кто пытался помочь.

Другие вопросы по теме