极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14723|回复: 19

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

[复制链接]
发表于 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);
}




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

使用道具 举报

发表于 2014-9-17 01:01:02 | 显示全部楼层
本帖最后由 bonarm 于 2014-9-17 01:03 编辑

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

使用道具 举报

 楼主| 发表于 2014-9-17 13:09:10 | 显示全部楼层
bonarm 发表于 2014-9-17 01:01
analogWrite的参数必须是0~255之间的整数,你的comdata是字符串吧。比如你看到的字符是1,实际收到的是49。 ...

那如何定义呢?谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-17 13:41:52 | 显示全部楼层
目前是如何将String字符串转换成int类型的数据。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-17 13:52:42 | 显示全部楼层
Integer.parseInt(userId);//转int      

找到这个语句的转换方法了,但编译不能通过。。。
回复 支持 反对

使用道具 举报

发表于 2014-9-17 14:15:28 | 显示全部楼层
0~9这几个很容易转成int,但是像“Hello”你怎么转呢?
这里有个16进制int的字符串转成10进制的程序,包含了10进制的字符串转换部分,试过可用

  1. unsigned int hexToDec(String hexString)  {
  2.   unsigned int decValue = 0;
  3.   int nextInt;
  4.   for (int i = 0; i < hexString.length(); i++) {
  5.     nextInt = int(hexString.charAt(i));
  6.     if (nextInt >= 48 && nextInt <= 57) nextInt = map(nextInt, 48, 57, 0, 9);
  7.     if (nextInt >= 65 && nextInt <= 70) nextInt = map(nextInt, 65, 70, 10, 15);
  8.     if (nextInt >= 97 && nextInt <= 102) nextInt = map(nextInt, 97, 102, 10, 15);
  9.     nextInt = constrain(nextInt, 0, 15);   
  10.     decValue = (decValue * 16) + nextInt;
  11.   }
  12.   return decValue;
  13. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-17 14:28:43 | 显示全部楼层
bonarm 发表于 2014-9-17 14:15
0~9这几个很容易转成int,但是像“Hello”你怎么转呢?
这里有个16进制int的字符串转成10进制的程序,包含 ...

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

使用道具 举报

 楼主| 发表于 2014-9-17 14:29:59 | 显示全部楼层
bonarm 发表于 2014-9-17 14:15
0~9这几个很容易转成int,但是像“Hello”你怎么转呢?
这里有个16进制int的字符串转成10进制的程序,包含 ...

我看你在做打靶的,咋样了?关于NRF24的控制有相关头绪没?
回复 支持 反对

使用道具 举报

发表于 2014-9-17 14:48:51 | 显示全部楼层
cxl2014_ok 发表于 2014-9-17 14:29
我看你在做打靶的,咋样了?关于NRF24的控制有相关头绪没?

早就都做完了,现在只是整理一下发上来
回复 支持 反对

使用道具 举报

发表于 2014-9-17 14:50:42 | 显示全部楼层
本帖最后由 bonarm 于 2014-9-17 14:52 编辑
cxl2014_ok 发表于 2014-9-17 14:28
刚又看了JAVA的资料,有相关语句可以转换,正在研究ing。。。谢了,我只要数据类型的,字符的没有。


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

使用道具 举报

 楼主| 发表于 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);
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-17 20:50:34 | 显示全部楼层
cxl2014_ok 发表于 2014-9-17 20:49
http://www.geek-workshop.com/archiver/tid-10040.html     根据这个帖子的内容更改后,变形完成,从字符串 ...

关于灯的明暗更改看大家有没有更好的建议。。
回复 支持 反对

使用道具 举报

发表于 2014-9-17 21:59:04 | 显示全部楼层
想起来了,如果是硬件串口,可以直接就转成数据接收的。软串口还是需要转换程序的。
回复 支持 反对

使用道具 举报

发表于 2014-9-17 22:02:13 | 显示全部楼层
cxl2014_ok 发表于 2014-9-17 20:50
关于灯的明暗更改看大家有没有更好的建议。。

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

使用道具 举报

发表于 2014-9-17 22:04:30 | 显示全部楼层
bonarm 发表于 2014-9-17 21:59
想起来了,如果是硬件串口,可以直接就转成数据接收的。软串口还是需要转换程序的。

Serial.parseInt
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 14:06 , Processed in 0.046254 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表