【发布时间】:2015-01-01 13:13:00
【问题描述】:
我正在使用 RxTx 库在 Arduino 和 Java 应用程序之间进行通信。我的 Arduino 鳕鱼是:
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.println("Hello world");
delay(1000);
}
如果你想查看我所有的 java 代码 All。我有一种从 arduino 读取字节的方法
public byte[] readBlocked(int num) throws IOException {
byte[] buff;
buff = new byte[num];
this.inputStream.readFully(buff, 0, num);
return buff;
}
在 TestComunication 类中我打印接收数据
public class TestComunication {
private Connection connection;
//private CommPortIdentifier port;
private static final String PORT_NAMES[] = {
"/dev/tty.usbserial-A9007UX1", // Mac OS X
"/dev/ttyACM0", // Raspberry Pi
"/dev/ttyUSB0", // Linux
"COM3", // Windows
"/dev/tty.usbmodem621",
"/dev/tty.usbmodem411"
};
public TestComunication() throws IOException {
SerialClassConnection serialClassConnection = null;
CommPortIdentifier port = null;
serialClassConnection = SerialClassConnection.getInstance();
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
//First, Find an instance of serial port as set in PORT_NAMES.
while (portEnum.hasMoreElements()) {
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
for (String portName : PORT_NAMES) {
if (currPortId.getName().equals(portName)) {
port = currPortId;
break;
}
}
}
if (port == null) {
System.out.println("Could not find COM port.");
return;
}
System.out.println(port.getName());
serialClassConnection.openPort(port);
this.connection = serialClassConnection;
this.manageData(this.connection);
}
private void manageData(Connection conn) throws IOException {
Connection connection;
int availableBytes;
byte[] inBytes;
connection = conn;
// listen forever for incoming data
while (true) {
if (connection.isDataAvailable()) {
inBytes = connection.readBlocked(11);
String text = new String(inBytes, "UTF-8");
System.out.println(text);
}
}
}
public static void main(String[] args) throws IOException {
new TestComunication();
Thread t = new Thread() {
public void run() {
//the following line will keep this app alive for 1000 seconds,
//waiting for events to occur and responding to them (printing incoming messages to console).
try {
Thread.sleep(5000);
} catch (InterruptedException ie) {
}
}
};
t.start();
System.out.println("Started");
}
}
我正在发送字符串
世界你好
来自 Arduino Uno。在我的 Java 应用程序中,我将此字符串作为字节读取。但我收到的数据不稳定。示例:
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
/dev/tty.usbmodem621
Held
Hello
world
Hel
lo world
H
ello world
主要问题:字符串Hello World转换为ASCII是
072 101 108 108 111 032 119 111 114 108 100
但我不是每次都收到那个序列。我收到的示例:
072 108 101 108 111 032 119 111 114 108 100
101 072 108 108 111 032 111 114 108 119 100
101 072 108 111 032 114 108 111 119 100 108
但是接收数据的长度是正确的11字节
【问题讨论】:
标签: java arduino rxtx serial-communication arduino-uno