我正在尝试以数字的形式从我的Arduino UNO R3发送数据到Android平板电脑。我正在以字节的形式发送数字,正在从Arduino端正确发送,这是从Arduino IDE中的串行监视器确认的。但是在接收端,数据类型使得它不兼容支持大数字和数据溢出。字节数据类型的范围是-128到127.因此,当我尝试发送大于127的数字(例如200)时,显示屏显示-56。事实上,它以256个字符的周期显示更大的数字。首先它正确地显示到127,然后它否定为-127,继续一直增加到0并继续从0再次增加。
class MyThread extends Thread
{
@Override
public void run()
{
int x;
String btstring;
final ByteBuffer buffer = ByteBuffer.allocate(2); //LINE1
UsbRequest request = new UsbRequest();
request.initialize(usbDeviceConnection, endpointIn);
while (true)
{
request.queue(buffer, 1); //LINE2
if (usbDeviceConnection.requestWait() == request && DRD==true)
{
try
{
x=buffer.get(0);
btstring = Integer.toString(x);
handler.post(new newthread(btstring));
//Thread.sleep(100);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}
class newthread implements Runnable
{
String str0;
public newthread(String STR0)
{
str0 = STR0;
}
@Override
public void run()
{
if(str0!="0") //to avoid blinking to zero value.
{
DoseRateDisplay.setText(str0);
}
}
}
这是Arduino代码仅供参考:
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.write(200);
delay(500);
}
我认为代码中标记为LINE1和LINE2的两行可能导致传入数据的空间不足。我甚至试图改变他们的价值观,但无济于事。可以做些什么来整合大于127的数据?任何不同风格的数据处理也可以。
答案 0 :(得分:0)
我建议您使用库来处理接收消息,而不是尝试自己编写串口处理代码。试试我从https://github.com/felHR85/SerialPortExample/blob/master/example/src/main/java/com/felhr/serialportexample/UsbService.java
获取的这段代码private UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() {
@Override
public void onReceivedData(byte[] arg0) {
try {
String data = new String(arg0, "UTF-8");
if (mHandler != null)
mHandler.obtainMessage(MESSAGE_FROM_SERIAL_PORT, data).sendToTarget();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
};