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

问题描述 投票:2回答:2

我正在创建一个可以通过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,或修复我已经使用的系统。

android bluetooth arduino communication app-inventor
2个回答
0
投票

问题是你没有发信号通知我在项目中使用他的例子的字符串的结尾,并且是这样的:

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

如果你比较两个代码,差异将是“,”在打印结束时最多,它解决了你的问题


0
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.