我使用RxTx库进行Arduino和Java app之间的通信。我的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的Hello world
在我的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
主要问题:转换为ASCII的字符串Hello World
是
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个字节