【问题标题】:Arduino --> Android bluetooth communication (receive text with App Inventor)Arduino --> Android 蓝牙通信(使用 App Inventor 接收文本)
【发布时间】:2015-05-01 14:36:23
【问题描述】:

我正在创建一个可以通过 Android 应用程序控制的基于 Arduino 的无人机。 为了改善用户体验,我想在应用程序上显示加速度计/罗盘传感器的值,所以我需要通过蓝牙将它们从 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,10 ecc...

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

我很生气,所以我希望有另一种方法可以将这些整数发送到 Android,或者修复我已经在使用的系统。

【问题讨论】:

  • App Inventor 论坛中查看 this thread 或在该论坛中搜索更多信息
  • 谢谢!在您建议的论坛中,我找到了解决此问题的方法!

标签: android bluetooth arduino communication app-inventor


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多