cxl2014_ok 发表于 2014-9-17 00:53:44

求助,无线蓝牙模块的数据传输问题

本帖最后由 cxl2014_ok 于 2014-9-17 00:55 编辑

最近刚学习用无线蓝牙模块控制LED灯的明暗操作,但程序总出现问题,求高手解答一下
发送机程序正常,用蓝牙串口能看到PWM值的输出,但接收机的程序无论如何都很难解决。。。


以下为接收机程序,总是编译不过。。。在analogWrite(LED,comdata);这段程序出错。。。
#define LED 3
String comdata="";   //用于存放蓝牙传输过来的命令,初始为""
byte mark=0;   //用于确认是否有命令输入
void setup()
{
Serial.begin(9600);   //开启串口设置波特率
pinMode(LED,OUTPUT);
delay(1000);   
}

void loop()
{
while(Serial.available()>0)// 检测是否有内容发送过来,有则进入循环
{
    char t=char(Serial.read());//读取一个字符(串口读取只能一个个字符读取,这里的方法也是用论坛精华帖的)
    comdata+=t; //将读取的字符存为字符串
    delay(2);   //延迟否则读取会出错
}
   analogWrite(LED,comdata);
    delay(100)                              
}
comdata="";    //复位命令字符串
delay(300);
}




哪位大神看见希望能够指出错误,能提供程序测试最好了。。。

bonarm 发表于 2014-9-17 01:01:02

本帖最后由 bonarm 于 2014-9-17 01:03 编辑

analogWrite的参数必须是0~255之间的整数,你的comdata是字符串吧。比如你看到的字符是1,实际收到的是49。不过数据类型不对,编译应该都无法通过的。

cxl2014_ok 发表于 2014-9-17 13:09:10

bonarm 发表于 2014-9-17 01:01 static/image/common/back.gif
analogWrite的参数必须是0~255之间的整数,你的comdata是字符串吧。比如你看到的字符是1,实际收到的是49。 ...

那如何定义呢?谢谢

cxl2014_ok 发表于 2014-9-17 13:41:52

目前是如何将String字符串转换成int类型的数据。

cxl2014_ok 发表于 2014-9-17 13:52:42

Integer.parseInt(userId);//转int      

找到这个语句的转换方法了,但编译不能通过。。。

bonarm 发表于 2014-9-17 14:15:28

0~9这几个很容易转成int,但是像“Hello”你怎么转呢?
这里有个16进制int的字符串转成10进制的程序,包含了10进制的字符串转换部分,试过可用

unsigned int hexToDec(String hexString){
unsigned int decValue = 0;
int nextInt;
for (int i = 0; i < hexString.length(); i++) {
    nextInt = int(hexString.charAt(i));
    if (nextInt >= 48 && nextInt <= 57) nextInt = map(nextInt, 48, 57, 0, 9);
    if (nextInt >= 65 && nextInt <= 70) nextInt = map(nextInt, 65, 70, 10, 15);
    if (nextInt >= 97 && nextInt <= 102) nextInt = map(nextInt, 97, 102, 10, 15);
    nextInt = constrain(nextInt, 0, 15);   
    decValue = (decValue * 16) + nextInt;
}
return decValue;
}

cxl2014_ok 发表于 2014-9-17 14:28:43

bonarm 发表于 2014-9-17 14:15 static/image/common/back.gif
0~9这几个很容易转成int,但是像“Hello”你怎么转呢?
这里有个16进制int的字符串转成10进制的程序,包含 ...

刚又看了JAVA的资料,有相关语句可以转换,正在研究ing。。。谢了,我只要数据类型的,字符的没有。

cxl2014_ok 发表于 2014-9-17 14:29:59

bonarm 发表于 2014-9-17 14:15 static/image/common/back.gif
0~9这几个很容易转成int,但是像“Hello”你怎么转呢?
这里有个16进制int的字符串转成10进制的程序,包含 ...

我看你在做打靶的,咋样了?关于NRF24的控制有相关头绪没?

bonarm 发表于 2014-9-17 14:48:51

cxl2014_ok 发表于 2014-9-17 14:29 static/image/common/back.gif
我看你在做打靶的,咋样了?关于NRF24的控制有相关头绪没?

早就都做完了,现在只是整理一下发上来

bonarm 发表于 2014-9-17 14:50:42

本帖最后由 bonarm 于 2014-9-17 14:52 编辑

cxl2014_ok 发表于 2014-9-17 14:28 static/image/common/back.gif
刚又看了JAVA的资料,有相关语句可以转换,正在研究ing。。。谢了,我只要数据类型的,字符的没有。

上面的程序就是对0~9及A~F(包括大小写)的转换,0~9主要就是一行,A~F的大小写各一行。只要0~9的话就保留那一行即可。

cxl2014_ok 发表于 2014-9-17 20:49:25

http://www.geek-workshop.com/archiver/tid-10040.html   根据这个帖子的内容更改后,变形完成,从字符串变成数据串,呵呵。终于编译完毕,下板子里,却出现新情况了,控制的灯明亮程度不稳定。看来程序还需要更改。附接收端程序:
#define LED 3
String a="";   //用于存放蓝牙传输过来的命令,初始为""
void setup()
{
Serial.begin(9600);   //开启串口设置波特率
pinMode(LED,OUTPUT);
delay(1000);   
}

void loop()
{
while(Serial.available()>0)// 检测是否有内容发送过来,有则进入循环
{
    char t=char(Serial.read());//读取一个字符(串口读取只能一个个字符读取,这里的方法也是用论坛精华帖的)
    a+=t; //将读取的字符存为字符
delay(10) ;//延迟否则读取会出错
int i=a.toInt();
   analogWrite(LED,i);
   Serial.print(i);
}
a="";
delay(300);
}

cxl2014_ok 发表于 2014-9-17 20:50:34

cxl2014_ok 发表于 2014-9-17 20:49 static/image/common/back.gif
http://www.geek-workshop.com/archiver/tid-10040.html   根据这个帖子的内容更改后,变形完成,从字符串 ...

关于灯的明暗更改看大家有没有更好的建议。。

bonarm 发表于 2014-9-17 21:59:04

想起来了,如果是硬件串口,可以直接就转成数据接收的。软串口还是需要转换程序的。

bonarm 发表于 2014-9-17 22:02:13

cxl2014_ok 发表于 2014-9-17 20:50 static/image/common/back.gif
关于灯的明暗更改看大家有没有更好的建议。。

你怎么调光的都没说啊。其实我发的坦克项目里就有调速和调舵机的程序。

bonarm 发表于 2014-9-17 22:04:30

bonarm 发表于 2014-9-17 21:59 static/image/common/back.gif
想起来了,如果是硬件串口,可以直接就转成数据接收的。软串口还是需要转换程序的。

Serial.parseInt
页: [1] 2
查看完整版本: 求助,无线蓝牙模块的数据传输问题