1

我在我的 Seeeduino Mega 1.22 上有一个简单的草图,它只在 LCD 显示器上显示串行输入。使用 lynx 术语和 arduino 串行监视器工作正常:正在显示发送的输入。当我想启动我的 Java 程序(在 Win7 x64 机器上的 Eclipse 中运行)和 Seeeduino 之间的串行通信时,问题就开始了。我正在使用 RXTX x64 构建。该程序旨在通过开放端口发送和接收一些 string.getBytes() 。在 Java 端接收有效,但在 Arduino 端接收失败。

似乎问题在于正确的流控制设置。我看到有些人有同样的问题,就像这里的问题在 RXTX 中接收

但是这个解决方案对我不起作用。如果我将 FlowControl 设置为 None,那么我只会在显示屏上看到一个块图标,表明串行连接已经建立,但没有别的。如果我将 FlowControl 设置为 RCTS_IN | RCTS_OUT,然后当我关闭已建立的连接时,我只会在显示器上获得字符串字节。

为什么只有在我关闭连接时才发送数据(刷新输出流也没有帮助)?我在 Flow Controll 设置中做错了什么?

这是我正在使用的修改后的 connect() 方法。

void connect(String portName) throws Exception {
        CommPortIdentifier portIdentifier = CommPortIdentifier
                .getPortIdentifier(portName);
        if (portIdentifier.isCurrentlyOwned()) {
            System.out.println("Error: Port is currently in use");
        } else {
            CommPort commPort = portIdentifier.open(this.getClass().getName(),
                    2000);

            if (commPort instanceof SerialPort) {
                SerialPort serialPort = (SerialPort) commPort;
                serialPort.setSerialPortParams(115200, SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

                try {
                  serialPort.setFlowControlMode(
                  //      SerialPort.FLOWCONTROL_NONE);
                  // OR
                  // If CTS/RTS is needed
                  //serialPort.setFlowControlMode(
                        SerialPort.FLOWCONTROL_RTSCTS_IN |
                        SerialPort.FLOWCONTROL_RTSCTS_OUT);
                } catch (UnsupportedCommOperationException ex) {
                  System.err.println(ex.getMessage());
                }

                serialPort.setRTS(true);

                in = serialPort.getInputStream();
                out = serialPort.getOutputStream();

                (new Thread(new SerialWriter(out))).start();

                serialPort.addEventListener(new SerialReader(in, this));
                serialPort.notifyOnDataAvailable(true);

            } else {
                System.out.println("Error: Only serial ports are to use!");
            }
        }
    }

在此先感谢您的时间

4

1 回答 1

0

解决了。正如许多人所建议的那样,它不是缓冲区。问题是,板上的 Seeeduinos RST 开关设置为自动。设置为手动,问题解决。不需要流量控制。

于 2012-05-03T14:37:57.587 回答