我的Seeeduino Mega 1.22上有一个简单的草图,只是在LCD显示器上显示串行输入。使用lynx术语和arduino串行监视器工作正常:正在显示发送的输入。当我想在我的Java程序之间启动串行通信时,麻烦就开始了,在Win7 x64机器上的Eclipse中运行,以及Seeeduino。我正在使用RXTX x64版本。该程序旨在通过开放端口发送和接收一些string.getBytes()。在Java端接收工作,但在Arduino端接收失败。
似乎问题是正确的流量控制设置。我看到有些人遇到了像Issues receving in 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!");
}
}
}
提前感谢您的时间
答案 0 :(得分:0)
解决了它。正如许多人所说,这不是缓冲区。问题是,板上的Seeeduinos RST开关设置为自动。将其设置为手动,解决了问题。 无需流量控制。