Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我在通过蓝牙发送Arduino数据时,在Android应用程序的开头看到意外数据?_Android_Bluetooth_Arduino - Fatal编程技术网

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

为什么我在通过蓝牙发送Arduino数据时,在Android应用程序的开头看到意外数据?,android,bluetooth,arduino,Android,Bluetooth,Arduino,我正在一个小组项目中工作,我们正在通过蓝牙将串行数据从Arduino发送到Android。我们在Arduino和Android上都是新手 使用的硬件包括Arduino Uno R3和HC-05蓝牙模块 我正在发送3轴加速度计数据包的虚拟数据,并成功地从Android读取数据包数据 然而,我们有这样的数据块(通常约50+字节,范围可达512字节),总是在开始时发送到应用程序。这是一个随机大小的字节块,我们无法解释,因为它似乎与我们为数据设置的数据包格式不匹配。我们通过检查数据包大小是否足够小来避免

我正在一个小组项目中工作,我们正在通过蓝牙将串行数据从Arduino发送到Android。我们在Arduino和Android上都是新手

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

我正在发送3轴加速度计数据包的虚拟数据,并成功地从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);
}
#包括
软件串行蓝牙(10,11);
无效设置(){
蓝牙开始(9600);
}
void循环(){
int x=随机(360);
int y=随机(360);
int z=随机(360);
形式加速度计组件(x,y,z);
延迟(5000);//等待5秒
}
无效形式加速度计组件(int xVal、int yVal、int zVal){
printSensorVal('A',xVal);
printSensorVal(“:”,yVal);
printSensorVal(“:”,zVal);
}
无效printSensorVal(字符标志,int sensorVal){
蓝牙打印(标志);
蓝牙打印(sensorVal);
}
我已经用蓝牙终端应用程序看过了,但从那里看没有什么问题。它的LogCat来自应用程序,显示了从应用程序收到的这些内容,但我不能像我前面所说的那样解释它,这就是我需要解决的问题

我试着看其他问题,但没有人能帮我

我没有Android应用程序的代码,因为它与另一位队友的代码相同,但我知道他们密切关注BluetoothChat示例

我唯一的想法是,由于Arduino循环数据,如果应用程序在Arduino启动后启动,它可能会从之前的串行端口中读取部分数据。但这并不能解释字节块的大小差异


2014年8月21日太平洋标准时间上午10:33编辑

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


在Google Play上尝试蓝牙SPP,然后连接到HC-05。检查输出,然后在获得干净数据后重置arduino,看看会发生什么。这就是我通常检查HC-05输出的方式。没有,HC-05启动时没有发送任何信息。我无法发表评论,因此不得不发布一个答案,对不起。

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

只是为了好玩,尝试将SoftwareSerial更改为其他引脚(不要忘了重新路由硬件)。可能是打开的静态数据或旧的、损坏的数据。请记住,
100
不会“等待5秒”,因此会有大量数据通过。您可能需要将连接指示灯与HC-05连接起来,以便“只有在设备配对的情况下,dino才会发送数据。您是否尝试过使用常规的RX/TX引脚?@323go,感谢您的响应。”。我修正了5秒的等待线。切换端口并没有带来真正的区别。我将尝试您提到的方法,重新连接连接器,以便仅在设备配对并很快更新时发送数据。@ladislas,谢谢您的建议。我试过了,但没用。我会继续研究的。这里还有另一个线索——如果你在短时间内收到35+114+30字节,可能是HC-05本身发出的声音,尽管我从未见过。SoftwareSerial默认情况下只有32或64字节的缓冲区。你能在软件序列上放一个巴士海盗看看有没有从duino发来的东西吗?或者,如果您只是断开BT模块。。。你还有闲聊吗?