我在我的 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!");
}
}
}
在此先感谢您的时间