Arduino nano设置为以9600的波特率在串行端口上向我发送“测试”。使用fazecast jSerialComm库,我编写了一个测试应用程序以在计算机上显示发送的数据。我想写信给arduino,然后从arduino那里读。我对这种串行通讯还很陌生。
这是我的Java代码:

public class main {

    private static int baudRate = 9600;
    private static int dataBits = 8;
    private static int stopBits = 1;
    private static int parity = 0;
    private static int readTimeout = 0;
    private static int writeTimeout = 0;

    public static void main(String[] args) throws IOException, InterruptedException {
        SerialPort sp = SerialPort.getCommPort("/dev/ttyUSB0");
        sp.setComPortParameters(baudRate, dataBits, stopBits, parity);
        sp.setComPortTimeouts(SerialPort.TIMEOUT_WRITE_BLOCKING, readTimeout, writeTimeout);

        if (sp.openPort()) {
            System.out.println("Port is open");
        } else {
            System.out.println("Failed to open port");
            return;
        }

        for (Integer i = 0; i < 5; ++i) {
            sp.getOutputStream().write(i.byteValue());
            sp.getOutputStream().flush();
            System.out.println("Sent number: " + i);
            Thread.sleep(1000);
        }
        if(sp.getInputStream() != null){
            System.out.print(sp.getInputStream().read());
        }

        if (sp.closePort()) {
            System.out.println("Port is closed :)");
        } else {
            System.out.println("Failed to close port :(");
            return;
        }

    }

}

我由于某种原因无法打开端口。它始终显示“无法打开端口”。我在终端中做了ls /dev/tty*,然后拔下了Arduino nano,唯一的/dev/ttyUSB0被删除了。当我重新插上电源并运行命令时,将再次出现该命令。我认为也许是问题所在,但可能不是。我究竟做错了什么?我想我读了一些关于它是Linux问题的文章,但是我似乎找不到它。这可能是与Linux相关的问题吗?

最佳答案

这确实是一个Linux问题。它与端口权限有关。我不得不做sudo chmod 666 /dev/ttyUSB0来解决这个问题。但是每次启动我都需要这样做,所以我仍在寻找长期解决方案。

关于java - 从Linux上的Arduino Nano在SerialPort上读取Java流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55125573/

10-14 06:10