首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用Android主机api从Arduino到Android的数据会被混淆?

为什么使用Android主机api从Arduino到Android的数据会被混淆?
EN

Stack Overflow用户
提问于 2012-06-18 20:29:14
回答 1查看 1.4K关注 0票数 1

我遵循教程,开始使用带有Arduino板的Android。我用的是Arduino Uno。我能够传输数据并打开Arduino板上的LED,我可以收到来自Arduino板的反馈。我正试图通过Arduino板上的USB连接到我的Android设备上,如下所示:

代码语言:javascript
复制
 Serial.print("Test");

我正在接收Android端的Arduino数据,如下所示:

代码语言:javascript
复制
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次。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-19 20:11:45

我想我找到了至少暂时有效的东西:

代码语言:javascript
复制
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个字符的字符串,它们必须以美元符号($)结尾,以指示行的末尾,但是传递给我的消息处理程序的数据似乎总是正确的。这不是最健壮的解决方案,但也许有人可以修改它,使其更好,或者采取另一种方法?请让我知道!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11090567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档