【发布时间】:2017-08-12 22:35:37
【问题描述】:
我正在我的 Android 手机和我的 Arduino 之间传输 0 到 10000 之间的正整数。 由于串口发送的是字节数组,所以我必须将发送的字节数组转换回整数。
但是我尝试过的所有东西都会抛出一个
java.nio.BufferUnderflowException
或返回错误值(我的 Arduino 发送 150,我得到 -106)!
我用 ByteBuffer 试过了:
@Override
public void onNewData(final byte[] data) {
runOnUiThread(new Runnable() {
@Override
public void run() {
editText.append("Read: " + ByteBuffer.allocate(4).put(data).getInt());
}
});
}
我尝试了小于 255 的值(我之前提到的 150):
@Override
public void onNewData(final byte[] data) {
runOnUiThread(new Runnable() {
@Override
public void run() {
editText.append("Read: " + new Byte(data[0]).intValue());
}
});
}
Arduino 发送以下内容:
uint16_t iSend = 150;
void loop() {
Serial.write(iSend);
delay(1000);
}
我的安卓手机显示如下:
D/SerialInputOutputManager: Read data len=1
D/UsbRequestJNI: init
D/UsbRequestJNI: close
D/UsbRequestJNI: init
I/System.out: 0x00000000 96
有人解决过类似的问题吗? 提前致谢!
【问题讨论】:
-
如果您在使用
ByteBuffer正确发布您从Arduino 获得的字节数组后仍有问题,您可能也对Endianness 有问题。 -
你的意思是,我必须翻转字节才能得到正确的值?
-
是的,(不是字节,字节数组,字节本身肯定没问题),或者在你的
ByteBuffer上调用order(ByteOrder.LITTLE_ENDIAN)(默认是BigEndian)。 -
你应该开始告诉我们每个数字发送了多少字节。
-
并举一个例子,你给出发送字节的十六进制表示,然后是接收字节。只有这样您才能立即看到它们是否被交换。
标签: java android arrays arduino data-conversion