当前位置: 首页 > 知识库问答 >
问题:

Java RXTX和Arduino之间串行通信的流量控制设置

严宏旷
2023-03-14

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

问题似乎在于正确的流量控制设置。我看到有些人也有同样的问题,比如RXTX中出现的问题

但这个解决方案对我不起作用。如果我将FlowControl设置为None,那么显示屏上只会出现一个块图标,指示串行连接已经建立,而其他什么都没有。如果我将FlowControl设置为RCTS_IN | RCTS_OUT,那么我只会在关闭已建立的连接时在显示屏上获取字符串字节。

为什么只有当我关闭连接时才发送数据(刷新输出流也没有帮助)?我在流量控制设置方面做错了什么?

这是我正在使用的修改后的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!");
            }
        }
    }

提前感谢您抽出时间

共有1个答案

梁丘凯定
2023-03-14

解决了。正如许多人所说,这不是缓冲区。问题是,板上的Seeeduinos RST开关被设置为自动。设置为手动,解决了问题。无需流量控制。

 类似资料:
  • 我试图用python控制总共6个LED。我使用pyserial向arduino发送一些数据,但遇到了几个问题。 我遇到的第一个问题是: 根据我在arduino上编写的代码,LEDS应该在接收到的特定数据中闪烁1秒。(这稍后会在下面解释。)但是,LEDS停留在它们应该闪烁的秒数上。这意味着如果LEDS应该闪烁10次。LEDS保持10秒并关闭。 第二个问题是: 我在代码中输入的if条件不符合顺序。正如

  • 我已经尝试了一个多星期通过串行端口从raspberry pi(QT C)到Arduino(Arduino IDE C)进行通信,但一直失败。 我在谷歌上做了一些搜索,阅读了这个例子。。。但我还是没有成功。好的,基本的事情是,我需要连续地通信从Raspberry pi发送到Arduino的串行端口命令。我试图使代码尽可能简单。 最初,我将J char从覆盆子pi(QT C)发送到Arduino(Ar

  • 我遇到了一个非常简单的问题。 我正在尝试制作一个Qt GUI应用程序,以从GUI控制我的Arduino(而不是从Arduino IDE的串行监视器控制它)。我能够使用QSerialPort Write()方法成功地向Arduino写入,但我无法从Arduino读取任何内容。从串行端口读取数据的唯一方法是在Qt代码的waitForBytesWrite()中的write()函数之后使用waitForR

  • 我正在尝试使用arduino通过串行通信从泼妇软件获取传入数据。并将数据移动到其他12个arduino,如果我将泼妇的通道号保留为43,但我需要控制480个通道,它就可以工作。所以第一个arduino控制43个通道,下一个是44-87,依此类推。 这是我的主代码:'ulusetup(){Serial.begin(9600); }}//输出

  • 我在Raspberry Pi(Python脚本)和Arduino nano/uno之间的串行通信方面遇到一些问题。我的两个设备都通过USB端口连接,当我直接从arduino IDE串行监视器发送命令时,arduino草图始终正确响应: 但是,当我运行python脚本,他发送相同的命令时,草图以随机方式响应。 覆盆子终端: Arduino串行监视器: Mi代码为: Arduino草图: Python

  • 我在一个项目中,我想通过串行通信发送传感器数据从Arduino到PHP。 不幸的是,我无法读取PHP中的串行端口。然而,另一个方向(PHP到Arduino)工作得很好。我使用的是php_系列。班来自Rémy Sanchez的php,由Rizwan Kassim修改。我依赖于readPort()函数。 我在Mac OS X上使用Arduino UNO和Apache WAMP-Server。我应该实现