我按照this教程开始使用带有Arduino板的Android主机api。我正在使用Arduino Uno。我能够传输数据并打开Arduino板上的LED,我可以收到Arduino板的反馈。我试图通过Arduino板的USB连接写入我的Android设备,如下所示:
Serial.print("Test");
我在Android端收到的Arduino数据如下:
byte[] buffer = new byte[10];
int bytes;
//try-catch statements omitted for simplicity
bytes = mUsbConnection.bulkTransfer(mUsbEndpointIn, buffer, buffer.length, 0);
每隔一段时间数据就会完好无损,但通常我从Arduino收到的是我原始信息(t,e,s和t)中这些字母的混乱。很多时候只显示1或2个字母。如果有人能指出我正确的方向或分享一些类似的经验,我会很感激。感谢。
修改
当我将数据打印到Logcat时,会有多个数据副本。例如,如果我收到" ste"来自Arduino,它将在Logcat中打印2-5次。
答案 0 :(得分:0)
我想我找到了至少暂时有效的东西:
public void run(){
int i = 0;
byte[] buffer = new byte[4];
byte[] finalBuffer = new byte[8];
byte[] sendBuffer = new byte[8];
int bytes = 0;
while(true){
try{
bytes = mUsbConnection.bulkTransfer(mUsbEndpointIn, buffer, buffer.length, 0);
if (bytes == EXIT_CMD) {
return;
}
if (bytes > 0){
byte[] temporaryBuffer = new byte[bytes];
System.arraycopy(buffer, 0, temporaryBuffer, 0, bytes);
System.arraycopy(temporaryBuffer, 0, finalBuffer, i, bytes);
i += bytes;
java.util.Arrays.fill(buffer, (byte) 0);
}
//Dollar sign terminates string to indicate end of line
if (finalBuffer[7] == 36){
i = 0;
System.arraycopy(finalBuffer, 0, sendBuffer, 0, sendBuffer.length);
messageHandler.obtainMessage(UsbHostTestActivity.ARDUINO_MESSAGE,
sendBuffer.length, -1, sendBuffer).sendToTarget();
java.util.Arrays.fill(finalBuffer, (byte) 0);
}
我必须发送完全来自Arduino的8个字符的字符串,并且必须以美元符号($)结束以指示该行的结尾,但传递给我的消息处理程序的数据似乎总是正确。它不是最强大的解决方案,但也许有人可以修改它以使其更好或采取另一种方法?请让我知道!