当我使用Java向接收器发送字节时,一些接收到的字节值会混乱地变成0x3F。(始终将0x0更改为0x3F)
Java源代码:
serialPort = new SerialPort(portName);
serialPort.openPort();
serialPort.setParams(
SerialPort.BAUDRATE_9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE
);
serialPort.writeBytes(new byte[]{0,3,(byte)240,1,(byte)242});
当我使用Arduino进行数据传输时,一切运作正常。
Arduino源代码:
byte b[5]={0,3,240,1,242};
void setup() { Serial.begin(9600);}
void loop() {
for(int i=0;i<5;i++){
Serial.write(b[i]);
delay(5);
}
delay(1000);
}
当我从java向arduino发送数据时,所有字节看起来都很好。当我使用VB或C#向接收器发送数据时,一切正常。但是,使用Thread.sleep(5)逐个字节地发送数据却没有成功。我做错了什么?我正在使用rxtx || jssc。目前的解决方法是通过arduino将数据发送到接收器。但它很慢且奇怪。
更新: 在监视端口活动后,成功包含几个WAIT_ON_MASK函数(up,down),然后在一个函数IRP_MJ_READ中获得所有正确字节的数据包。 当我尝试使用我的java代码发送数据时,有很多SERIAL_GET_COMMSTATUS(上下)函数,然后是将前3个字节转换为0x3F的IRP_MJ_READ,然后再次是WAIT_ON_MASK & COMMSTATUS,然后是剩余数据逐个字节。 P.s. 接收器是一辆旧的汽车。
0x3F
代表?
。这通常表示字符编码问题,但由于你处理的是二进制数据,所以不应该是个问题。它可能仍然与某种相关联。 - Kayaman0x3F
(即 ASCII?
),我很难相信这只是巧合。 - KayamanThread.sleep()
呢?为什么要故意浪费时间,尤其是当它会导致错误呢? - user207421