我遵循这教程,开始使用带有Arduino板的Android。我用的是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)的那些信件的混合。很多时候,只显示一个或两个字母。如果有人能指出正确的方向或分享一些类似的经验,我会感激的。谢谢。
编辑
当我将数据打印到Logcat中时,会有多个数据副本。例如,如果我收到来自Arduino的"ste“,它将在Logcat中打印2-5次。
发布于 2012-06-19 20:11:45
我想我找到了至少暂时有效的东西:
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个字符的字符串,它们必须以美元符号($)结尾,以指示行的末尾,但是传递给我的消息处理程序的数据似乎总是正确的。这不是最健壮的解决方案,但也许有人可以修改它,使其更好,或者采取另一种方法?请让我知道!
https://stackoverflow.com/questions/11090567
复制相似问题