windasher 发表于 2012-8-8 13:14:21

蓝牙模块与pc通讯的怪问题

昨天终于搞好了hc05的at指令设置,今天测试模块的收发。
写了个简单的在pc端通过串口助手发送on或off来开关13号口的led。如果输入匹配则led会亮或者灭,无输入或输入不匹配则串口输出“no command”。
用串口线测试程序一切正常,一旦换蓝牙,问题就来了。无论我输入什么,总是现实“no comand”,感觉就像模块只能发送不能接收。
向各位请教这是何因?会不会是蓝牙模块hc05的硬件问题?
谢谢!

pww999 发表于 2012-8-8 13:29:15

请问AT指令怎么发送设置的》??

windasher 发表于 2012-8-8 14:25:04

本帖最后由 windasher 于 2012-8-8 14:27 编辑

pww999 发表于 2012-8-8 13:29 static/image/common/back.gif请问AT指令怎么发送设置的》??先让hc05进入at模式(具体可参见其手册)。在程序的setup()里用println()函数写相应指令就可以了。
或者在电脑端用usb转ttl模块连接蓝牙模块,配合串口调试助手也可以实现指令的设置。

pww999 发表于 2012-8-8 16:47:15

本帖最后由 pww999 于 2012-8-8 17:54 编辑

是不是 字符类型或字付串 发不对?之前我试了一下,简单发送只能够发一个字付,一串字符会续个接收的,有个帖子专门讲如何发送及读取字付串的
http://www.geek-workshop.com/thread-158-1-5.html

但想了想好象不对,因为不能接收字符串,又怎么接收at指令改模式?可能写到单片机上,与蓝呀内部处理不一样?

windasher 发表于 2012-8-8 19:35:15

at指令是单片机通过ttl端口发送给蓝牙模块的,并不是用无线连接。

windasher 发表于 2012-8-8 19:36:43

pww999 发表于 2012-8-8 16:47 static/image/common/back.gif
是不是 字符类型或字付串 发不对?之前我试了一下,简单发送只能够发一个字付,一串字符会续个接收的,有个 ...

你推荐的帖子看了很受益,谢谢!
晚上再研究下。

windasher 发表于 2012-8-9 08:12:07

昨天用serial.available()来检测模块是否收到数据,并根据收到的字符数来控制灯的开关,收到一个字符灯亮,收到两个字符灯灭。
测试结果是串口并不能每次都接收到数据,即使接收到pc端的字符(串),也未必能完全接收。比如发送两个字符,单片机端只能收到一个,发三个只能接收两个……
稍后上代码,请各位帮看看是哪儿出了问题。

pww999 发表于 2012-8-9 11:24:33

本帖最后由 pww999 于 2012-8-9 11:30 编辑

按上面给的帖子 将接收后显示到lcd1602,开始接收显示时 字符(串)后面多了个乱码,接收多几次后就正常了,也不知什么原因,

windasher 发表于 2012-8-9 12:13:05

int led = 13;
int c;
String sr;
void setup()
{
pinMode(led,OUTPUT);
Serial.begin(9600);

}
void loop()
{

while(Serial.available()>0)
{
    sr += char(Serial.read());
    delay(2);
}

if(sr.length() == 1)//接收到的字符串长度为1
{
    digitalWrite(led,HIGH);
    Serial.println(sr);
    sr = "";
}
else if(sr.length() == 2)//接收到的字符串长度为2
{
    digitalWrite(led,LOW);
    Serial.println(sr);
    sr = "";
}
else if(sr.length() > 2)//接收到的字符串长度大于2
{
    Serial.print(sr);
    Serial.println("receive > 0");
    sr = "";
}
else//如果缓冲区无字符
{
    Serial.print(Serial.available());
    Serial.println("no data");
}
}
这是我的代码,请各位看看,谢谢!

windasher 发表于 2012-8-9 12:28:20

pww999 发表于 2012-8-9 11:24 static/image/common/back.gif
按上面给的帖子 将接收后显示到lcd1602,开始接收显示时 字符(串)后面多了个乱码,接收多几次后就正常了, ...

两个乱码是不是回车换行?
能否把你的代码发上来让我学习下?

windasher 发表于 2012-8-9 12:40:57

请问pww999兄,你用的是哪里生产的模块?我用的是lcsoft生产的模块(核心是hc05),我怀疑是不是硬件的问题。

pww999 发表于 2012-8-9 12:44:06

本帖最后由 pww999 于 2012-8-9 13:09 编辑

http://www.geek-workshop.com/thread-1453-1-3.html

我是用检测字符(串)匹配,而不是字符(串) 长度 匹配{:soso_e140:} ~~~

windasher 发表于 2012-8-9 14:11:26

pww999 发表于 2012-8-9 12:44 static/image/common/back.gif
http://www.geek-workshop.com/thread-1453-1-3.html

我是用检测字符(串)匹配,而不是字符(串) 长度 匹配 ...

这种方法我用串口线实验成功,但换蓝牙就不行了只能接收蓝牙信息,对蓝牙模块发送数据就会出错,不解……

pww999 发表于 2012-8-9 16:05:52

本帖最后由 pww999 于 2012-8-9 16:09 编辑

2个串口的端口号? 是不是你之前设置at 指令设错了?
我只买了一只,也是主从一体,直接默认从机使用的,at指令没设置过的
页: [1]
查看完整版本: 蓝牙模块与pc通讯的怪问题