首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java RXTX库写入串口时出现问题

使用Java RXTX库写入串口时出现问题
EN

Stack Overflow用户
提问于 2017-03-25 12:11:29
回答 1查看 413关注 0票数 0

我正在尝试将java代码中的一些字节发送到连接到Arduino的蓝牙模块。这是我的代码。

代码语言:javascript
复制
import gnu.io.*;

import java.io.IOException;
import java.io.OutputStream;

public class ArduinoSerialWriter {
    private static OutputStream arduinoOutputStream;

    public static void init() throws NoSuchPortException, PortInUseException,
        UnsupportedCommOperationException, IOException {
        SerialPort arduino = (SerialPort) CommPortIdentifier.getPortIdentifier("COM6")
            .open(ArduinoSerialWriter.class.getName(), 2000);
        arduino.setSerialPortParams(9600,
            SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
        arduinoOutputStream = arduino.getOutputStream();
    }

    public static void writeToArduino(byte[] bytes) throws IOException {
        arduinoOutputStream.write(bytes);
    }

    public static void main(String[] args) {
        try {
            ArduinoSerialWriter.init();
        } catch (Exception e) {
            e.printStackTrace();
        }

        try {
            arduinoOutputStream.write(new byte[]{(byte) -1, (byte) 90, (byte) 40});
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

init()似乎工作正常并连接到蓝牙模块。问题是对arduinoOutputStream.write()的调用被无限期地阻塞。我还可以说字节没有被发送,因为Arduino没有做任何事情。但是,没有抛出异常。

我在某处读到,这可能是因为Arduino正在重置,在准备接收数据之前需要时间,所以我尝试在写入端口之前添加Thread.sleep(10000);,但这并没有改变任何事情。

我还使用了一个调试器来找出代码阻塞的确切位置,并从RXTX库中RXTXPort.class的write(byte[])方法中跟踪到以下代码行:

代码语言:javascript
复制
RXTXPort.this.waitForTheNativeCodeSilly();
RXTXPort.this.writeArray(var1, 0, var1.length, RXTXPort.this.monThreadisInterrupted);

据我所知,在下一行实际发送字节之前调用了waitForTheNativeCodeSilly();,这就是代码冻结的地方。

我还尝试在调用write方法后添加arduinoOutputStream.flush();,但这也没有帮助,因为代码甚至在到达该行之前就冻结了。

任何帮助都将不胜感激。

更新:

我尝试使用移除蓝牙模块,并使用USB数据线代替Arduino,它工作得很好。我想我可能需要对蓝牙模块进行一些设置。

它是一个HC-06蓝牙模块。这是我从https://www.amazon.ca/JMT-Wireless-Bluetooth-Serial-Arduino/dp/B00HXAE0PQ/那里得到的

我要做的唯一一件事就是在我的windows10电脑上管理蓝牙设备,然后点击配对。它说它下面是配对的,所以我不确定是什么问题。

再次更新:

我尝试使用Arduino IDE中的串行监视器向蓝牙模块发送数据,整个IDE完全死机了。我可以关闭它的唯一方法是在任务管理器中杀死进程。我很确定Arduino IDE也有和我一样的问题,所以肯定是蓝牙芯片的问题,而不是我的代码本身。

EN

回答 1

Stack Overflow用户

发布于 2017-03-25 15:07:00

事实证明我的想法完全错了。我使用蓝牙连接要好得多,而不是试图把蓝牙芯片当作COM端口。我想我只是专注于这一点,因为我在Arduino就已经习惯了。

我使用了java的bluecove库,现在它工作得很好!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43012425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档