为什么我通过蓝牙发送Arduino数据时,在Android应用程序开头看到了意外的数据?

3
我正在参与一个小组项目,我们需要将串行数据从Arduino发送到Android上的蓝牙。我们对Arduino和Android都不太熟悉。
所用硬件包括Arduino Uno R3和HC-05蓝牙模块。
我已经成功地发送了三轴加速度计数据的虚拟数据包并从Android上读取了数据。
然而,我们总是会在一开始就收到一大块数据(通常有50多个字节,最多达到512个字节),这是一些随机大小的字节块,我们无法解释它,因为它似乎不符合我们设置的数据包格式。我们通过检查数据包大小是否足够小来避免查看此字节块。但这会增加很多开销(4-5秒),所以我们想弄清楚这些数据究竟是什么。那么,HC-05是先发送一些专有的蓝牙相关数据或者我的脚本有问题导致发送了意外数据?
以下是Arduino代码。
#include <SoftwareSerial.h>
SoftwareSerial bluetooth(10,11);

void setup(){
  bluetooth.begin(9600);
}

void loop() {
  int x = random(360);
  int y = random(360);
  int z = random(360);
  formAccelerometerPacket(x, y, z); 
  delay(5000); // wait 5 sec
}

void formAccelerometerPacket(int xVal, int yVal, int zVal) {
  printSensorVal('A', xVal); 
  printSensorVal(':', yVal); 
  printSensorVal(':', zVal); 
}

void printSensorVal(char flag, int sensorVal) {
  bluetooth.print(flag);
  bluetooth.print(sensorVal);
}

我用蓝牙终端应用程序查看了它,但从那里看起来没有什么问题。它是从应用程序的LogCat中显示出来的,但我无法像之前说过的那样解释它,这就是我需要解决的问题。
我尝试查看其他SO问题,但没有其他问题能够帮助我。
我没有Android应用程序的代码,因为它与另一个队友在一起,但我知道他们紧密遵循了BluetoothChat示例。
我唯一想到的是,由于Arduino循环数据,如果应用程序在Arduino启动后启动,它可能会开始读取一些部分在串行端口上发生的旧数据。但这并不能解释字节块中的大小差异。
08/21/2014 10:33AM PST的编辑:这里是LogCat的屏幕截图。我们先运行了Android应用程序,然后我启动了Arduino,以确保板子没有旧数据。看到这个让我认为可能是配对问题,正如有人建议的那样。我正在尝试解决这个问题。

只是为了好玩,尝试将SoftwareSerial更改为其他引脚(不要忘记重新路由硬件)。可能是开放的静态或旧的、损坏的数据。请记住,“100”并不是“等待5秒”,因此有大量的数据传输。您可能希望将连接指示器从HC-05连接到电路板上,这样当设备配对时,“dino”才会发送数据。 - 323go
你尝试过使用常规的RX/TX引脚吗? - ladislas
@323go,谢谢你的回复。我修复了5秒等待行。更换端口并没有什么区别。我会尝试你提到的重新连接插头的方法,这样只有在设备配对时才发送数据,并很快更新。 - toniux
@ladislas,谢谢你的建议。我尝试了一下,但是没有成功。我会继续努力的。 - toniux
这里还有另一个线索——如果您短时间内收到35+114+30字节,那么它可能是来自HC-05本身的闲聊,尽管我从未见过。默认情况下,SoftwareSerial仅具有32或64字节的缓冲区。您可以在软件串行上放置Bus Pirate并查看是否有来自'duino的发送内容?或者,如果您只是断开BT模块...您是否仍然会收到闲聊? - 323go
2个回答

1
尝试在Google Play上使用蓝牙SPP,然后连接到HC-05。检查输出,一旦获得干净的数据,请重置arduino并查看发生了什么。这是我通常用来检查HC-05输出的方法。否则,在启动时,HC-05不会发送任何内容。抱歉,由于无法进行评论,所以只能发布答案。

0

我不确定是否适用于您的情况,但可能会有用。当您从HC-05(FC-114)发送数据到一个从设备(HC-06)时,第一个字节(或者前三/四个字节)将立即发送,其余部分则延迟5/10毫秒发送。我不知道为什么,但是通过示波器可以观察到这一点。如果管理得当,则可以在接收字节包时等待一段时间来解决问题,否则,您可能会因为难以理解发生了什么而感到疯狂。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接