为什么我在通过蓝牙发送Arduino数据时会在Android应用开始时看到意外数据?

时间:2014-08-20 21:34:27

标签: android bluetooth arduino

我正在开展一个小组项目,我们将通过蓝牙从Arduino发送到Android的串行数据。我们在Arduino和Android上都相当新。

使用的硬件包括Arduino Uno R3和HC-05蓝牙模块。

我正在为3轴加速度计数据包发送虚拟数据,并成功读取Android的数据包数据。

但是,我们有一大堆数据(通常大约50个字节,最多可达512个字节),总是会在一开始就发送给应用程序。它是一个随机大小的字节块,我们无法解释它,因为它似乎与我们为数据设置的数据包格式不匹配。我们设法通过检查数据包大小是否足够小来避免查看此字节块。但这会增加很多开销(4 - 5秒),所以我们想弄清楚这个blob数据是什么。那么,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启动后启动,它可能会开始从串口中发生的事情中读取一些数据。但它没有解释blob字节的大小差异。


2014年8月21日上午10点33分编辑

这是LogCat的屏幕截图。我们做的是先运行Android应用程序然后启动Arduino以确保主板没有旧数据。看着这个让我觉得这可能是一个配对问题,正如有人建议的那样。我正在努力尝试修复。

logCat Output

2 个答案:

答案 0 :(得分:1)

在Google Play上尝试蓝牙SPP,然后连接到HC-05。检查输出,然后一旦你得到干净的数据重置arduino,看看会发生什么。这就是我经常检查HC-05输出的方法。并且HC-05启动时没有发送任何信息。我无法发表评论所以不得不发表回答,抱歉。

答案 1 :(得分:0)

我不确定这是你的情况,但可能是有用的。当您从HC-05(FC-114)向从站(​​HC-06)发送数据时,第一个字节(或前三个/四个)立即发送,其余字节延迟5 / 10ms。我不知道为什么,但我用示波器看到它。如果管理得当,你可以在收到等待一段时间的字节数据包时解决问题,否则,你可能会因为理解发生的事情而疯狂。