我正在参与一个小组项目,我们需要将串行数据从Arduino发送到Android上的蓝牙。我们对Arduino和Android都不太熟悉。
所用硬件包括Arduino Uno R3和HC-05蓝牙模块。
我已经成功地发送了三轴加速度计数据的虚拟数据包并从Android上读取了数据。
然而,我们总是会在一开始就收到一大块数据(通常有50多个字节,最多达到512个字节),这是一些随机大小的字节块,我们无法解释它,因为它似乎不符合我们设置的数据包格式。我们通过检查数据包大小是否足够小来避免查看此字节块。但这会增加很多开销(4-5秒),所以我们想弄清楚这些数据究竟是什么。那么,HC-05是先发送一些专有的蓝牙相关数据或者我的脚本有问题导致发送了意外数据?
以下是Arduino代码。
我用蓝牙终端应用程序查看了它,但从那里看起来没有什么问题。它是从应用程序的LogCat中显示出来的,但我无法像之前说过的那样解释它,这就是我需要解决的问题。
我尝试查看其他SO问题,但没有其他问题能够帮助我。
我没有Android应用程序的代码,因为它与另一个队友在一起,但我知道他们紧密遵循了BluetoothChat示例。
我唯一想到的是,由于Arduino循环数据,如果应用程序在Arduino启动后启动,它可能会开始读取一些部分在串行端口上发生的旧数据。但这并不能解释字节块中的大小差异。
08/21/2014 10:33AM PST的编辑:这里是LogCat的屏幕截图。我们先运行了Android应用程序,然后我启动了Arduino,以确保板子没有旧数据。看到这个让我认为可能是配对问题,正如有人建议的那样。我正在尝试解决这个问题。
所用硬件包括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,以确保板子没有旧数据。看到这个让我认为可能是配对问题,正如有人建议的那样。我正在尝试解决这个问题。