gpt4 book ai didi

java - RXTX如何从com端口读取

转载 作者:行者123 更新时间:2023-11-29 10:06:24 26 4
gpt4 key购买 nike

你好我有这样的东西

package compot;

import java.util.Enumeration;
import gnu.io.*;


public class core {

private static SerialPort p;

/**
* @param args
*/
public static void main(String[] args)
{
Enumeration ports = CommPortIdentifier.getPortIdentifiers();
System.out.println("start");
while(ports.hasMoreElements())
{
CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
System.out.print(port.getName() + " -> " + port.getCurrentOwner() + " -> ");
switch(port.getPortType())
{
case CommPortIdentifier.PORT_PARALLEL:
System.out.println("parell");
break;
case CommPortIdentifier.PORT_SERIAL:
//System.out.println("serial");
try {
p = (SerialPort) port.open("core", 1000);
int baudRate = 57600; // 57600bps
p.setSerialPortParams(
baudRate,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (PortInUseException e) {
System.out.println(e.getMessage());
} catch (UnsupportedCommOperationException e) {
System.out.println(e.getMessage());
}
break;
}
}
System.out.println("stop");
}
}

但我不知道如何从端口读取??我读过this tutorial但我不知道“演示应用程序”是什么意思??

编辑

OutputStream outStream = p.getOutputStream();
InputStream inStream = p.getInputStream();

BufferedReader in = new BufferedReader( new InputStreamReader(inStream));
String inputLine;

while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();

我已经添加了这段代码,但我收到了

Stable Library ========================================= Native lib Version = RXTX-2.1-7 Java lib Version = RXTX-2.1-7 start /dev/ttyUSB3 -> null -> Underlying input stream returned zero bytes stop

最佳答案

这是你的代码吗?你到底想在那里做什么? :p

为了从 SerialPort 读取数据,您需要声明此端口:

CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier("/dev/tty/USB0"); //on unix based system

然后在此端口上打开一个连接:

SerialPort serialPort = (SerialPort) portIdentifier.open("NameOfConnection-whatever", 0);

下一步是设置此端口的参数(如果需要):

serialPort.setSerialPortParams(38400, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

这是我的配置 - 你的可能会有所不同 :)

现在您可以在此端口上读取一些数据了!要获取数据,您需要获取 serialPorts 输入流并从中读取:

InputStream inputStream = serialPort.getInputStream();
while (active) {
try {
byte[] buffer = new byte[22];
while ((buffer[0] = (byte) inputStream.read()) != 'R') {
}
int i = 1;
while (i < 22) {
if (!active) {
break;
}
buffer[i++] = (byte) inputStream.read();
}
//do with the buffer whatever you want!
} catch (IOException ex) {
logger.error(ex.getMessage(), ex);
}
}

我实际上在这里做的是使用 read() 方法从输入流中读取数据。这将阻塞直到数据可用,或者如果到达流的末尾则返回 -1。在这个例子中,我一直等到我得到一个“R”字符,然后将接下来的 22 个字节读入缓冲区。这就是您读取数据的方式。

  1. 获取串行端口输入流
  2. 使用 .read() 方法
  3. 将所有这些都放在一个循环中,并在取消时退出循环(在我的例子中,可以通过另一种方法将 active 设置为 false,从而结束读取过程。

希望对你有帮助

关于java - RXTX如何从com端口读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6761572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com