首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Arduino --> Android蓝牙通信(使用App Inventor接收文本)

Arduino --> Android蓝牙通信(使用App Inventor接收文本)
EN

Stack Overflow用户
提问于 2015-05-01 22:36:24
回答 2查看 16K关注 0票数 2

我正在创建一个基于Arduino的无人机,可以通过Android应用程序进行控制。为了改善用户体验,我想在应用程序上显示加速度计/指南针传感器的值,所以我需要通过蓝牙将它们从Arduino发送到Android。这些值是介于0和180之间的简单整数。

我认为最好的解决方案是将所有的值(用逗号分隔)连接在一个字符串中,并将其发送到应用程序,这将分隔单个值(只有当应用程序需要时才会发送该字符串,在这种情况下,当Arduino接收到一个'z‘字节时)。

if (Serial.available() > 0) {
    if (Serial.read()=='z'){
        Serial.println(String((int)sensor1) + ',' + String((int)sensor2) + ',' + String((int)sensor3));
    }  
 }

以下是App Inventor块:

看起来这些值被很好地接收了,但有一个关键的问题:有时字符串没有被很好地接收,这会导致很多错误。有时收到的字符串是(例如) 10,10,10,但有时是10,10,1010或只有10,10ECC...

我也尝试逐个发送这些值,但结果几乎相同。我甚至尝试使用分隔符字节将'numberOfBytes‘设置为-1,但不幸的是,这也没有成功。

我变得非常生气,所以我希望有另一种方法将thoose整数发送到Android,或者修复我已经在使用的系统。

EN

回答 2

Stack Overflow用户

发布于 2018-10-13 09:15:01

我使用Serial.print发送每个结果,然后使用Serial.write('>');作为结束标记。

appinventor designer窗口中,将蓝牙客户端的分隔符字节设置为62 (>字符的ASCII值)。

在块窗口中,使用蓝牙cliant1.Receive文本并将字节数设置为-1

然后,发明的应用程序将一直读取,直到找到分隔符。

但是,如果找不到,它将导致应用程序挂起。

票数 1
EN

Stack Overflow用户

发布于 2015-10-22 11:02:08

问题是,你没有发出结束字符串的信号,我在一个项目中使用了他的例子,是这样的:

while(Serial.available()>0){
  Serial.println(String((int)Sensor1) + ',' + String((int)Sensor2)+ ',');
}

如果您比较这两个代码,在打印的末尾,差异最大的是“,”,它为您解决了问题

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

https://stackoverflow.com/questions/29988910

复制
相关文章

相似问题

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