求助,无线蓝牙模块的数据传输问题
本帖最后由 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:03 编辑
analogWrite的参数必须是0~255之间的整数,你的comdata是字符串吧。比如你看到的字符是1,实际收到的是49。不过数据类型不对,编译应该都无法通过的。 bonarm 发表于 2014-9-17 01:01 static/image/common/back.gif
analogWrite的参数必须是0~255之间的整数,你的comdata是字符串吧。比如你看到的字符是1,实际收到的是49。 ...
那如何定义呢?谢谢 目前是如何将String字符串转换成int类型的数据。 Integer.parseInt(userId);//转int
找到这个语句的转换方法了,但编译不能通过。。。 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;
}
bonarm 发表于 2014-9-17 14:15 static/image/common/back.gif
0~9这几个很容易转成int,但是像“Hello”你怎么转呢?
这里有个16进制int的字符串转成10进制的程序,包含 ...
刚又看了JAVA的资料,有相关语句可以转换,正在研究ing。。。谢了,我只要数据类型的,字符的没有。 bonarm 发表于 2014-9-17 14:15 static/image/common/back.gif
0~9这几个很容易转成int,但是像“Hello”你怎么转呢?
这里有个16进制int的字符串转成10进制的程序,包含 ...
我看你在做打靶的,咋样了?关于NRF24的控制有相关头绪没? cxl2014_ok 发表于 2014-9-17 14:29 static/image/common/back.gif
我看你在做打靶的,咋样了?关于NRF24的控制有相关头绪没?
早就都做完了,现在只是整理一下发上来 本帖最后由 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的话就保留那一行即可。 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:49 static/image/common/back.gif
http://www.geek-workshop.com/archiver/tid-10040.html 根据这个帖子的内容更改后,变形完成,从字符串 ...
关于灯的明暗更改看大家有没有更好的建议。。 想起来了,如果是硬件串口,可以直接就转成数据接收的。软串口还是需要转换程序的。 cxl2014_ok 发表于 2014-9-17 20:50 static/image/common/back.gif
关于灯的明暗更改看大家有没有更好的建议。。
你怎么调光的都没说啊。其实我发的坦克项目里就有调速和调舵机的程序。 bonarm 发表于 2014-9-17 21:59 static/image/common/back.gif
想起来了,如果是硬件串口,可以直接就转成数据接收的。软串口还是需要转换程序的。
Serial.parseInt
页:
[1]
2