极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23577|回复: 11

跪求大神,姿态遥控,为什么和手机蓝牙发送的命令一样,小车却没有反应?

[复制链接]
发表于 2016-6-10 17:50:20 | 显示全部楼层 |阅读模式
本人做了一个基于MPU6050的姿态遥控器,通过HC05与小车HC06相连,以取代手机蓝牙遥控,通过串口助手读取 HC06接收的数据和手机蓝牙发送的一模一样,为什么手机可以控制而我自己做的却没有反应?
下面贴上代码,自己写的遥控程序:



#include <Wire.h>

int YPR[3];
int a=0,b=0,c=0,d=0,f=0;

unsigned char Re_buf[8],counter=0;
unsigned char sign=0;
void setup()  
{   Serial1.begin(115200);
   delay(2000);   
   Serial1.write(0XA5);
   Serial1.write(0X52);     //初始化GY25,连续输出模式

   // set the data rate for the NewSoftSerial port
   Serial.begin(9600);  //
}

void loop()                     // run over and over again

{
   if(sign)
   {  
      sign=0;
      if(Re_buf[0]==0xAA && Re_buf[7]==0x55)        //检查帧头,帧尾
      {                 
             YPR[0]=(Re_buf[1]<<8|Re_buf[2])/100;   //合成数据,去掉小数点后2位
             YPR[1]=(Re_buf[3]<<8|Re_buf[4])/100;
             YPR[2]=(Re_buf[5]<<8|Re_buf[6])/100;
            
            
    }
   }
   
if(YPR[0]<80&&YPR[0]>30&&abs(YPR[1])<30&&c==0)
     {
          Serial.write('O');
             Serial.write('N');
                Serial.write('C');
             a=0;b=0;c=1;d=0;f=0;
         }
     else   if(YPR[0]>-80&&YPR[0]<-30&&abs(YPR[1])<30&&d==0)
           {
            Serial.write('O');
             Serial.write('N');
               Serial.write('D');
                a=0;b=0;c=0;d=1;f=0;
         }
     else  if(YPR[1]>-80&&YPR[1]<-30&&abs(YPR[0])<30&&a==0)
           {
              Serial.write('O');
               Serial.write('N');
                 Serial.write('A');
                a=1;b=0;c=0;d=0;f=0;
         }
      else   if(YPR[1]>30&&YPR[1]<80&&abs(YPR[0])<30&&b==0)
           {
             Serial.write('O');
                Serial.write('N');
                  Serial.write('B');
                a=0;b=1;c=0;d=0;f=0;
         }
      else
         {
           if(abs(YPR[0])<30&&abs(YPR[1])<30&&f==0)
           {
             Serial.write('O');
             Serial.write('N');
             Serial.write('F');
             a=0;
             b=0;
             c=0;
             d=0;
             f=1;
           }
         }
      
}

void serialEvent1() {
   while (Serial1.available()) {   
     Re_buf[counter]=(unsigned char)Serial1.read();
    if(counter==0&&Re_buf[0]!=0xAA) return;      // 检查帧头         
     counter++;      
     if(counter==8)                //接收到数据
     {   
        counter=0;                 //重新赋值,准备下一帧数据的接收
        sign=1;
     }      
   }
}

a b c d f   是状态标识,表示如果已处于本状态,那么就置1,下个循环如果还处于此状态,就不需要再次输出了。
下面是小车的接收控制代码:

void kongzhi()
{
    if(Serial1.available())
   {
    while (Serial1.available() > 0)//一直接收
     {
        buff[i++]=Serial1.read();//接收三个字节
        delay(2);
     }
      i=0;//重新接收
     if((buff[0]=='O')&&(buff[1]=='N'))//前进
     {
       switch(buff[2])
       {
         case up:    qian(); break;
         case down:  hou();  break;
         case left:  zuo();  break;
         case right: you();  break;
         case stop1: ting();break;



#define left     'C'
#define right    'D'
#define up       'A'
#define down     'B'
#define stop1    'F'
回复

使用道具 举报

发表于 2016-6-10 20:10:06 | 显示全部楼层
我就问个问题,HC05可以和HC06连接吗,你要考虑HC05有主从的问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-10 21:01:52 | 显示全部楼层
zjz5717 发表于 2016-6-10 20:10
我就问个问题,HC05可以和HC06连接吗,你要考虑HC05有主从的问题

可以,HC05已经设置为主模式,我是用串口助手读的HC06上接收的数据,和手机遥控接收的是一样的,但是小车只对手机遥控的有反映
回复 支持 反对

使用道具 举报

发表于 2016-6-10 21:45:52 | 显示全部楼层
傻了哔哩C罗炮 发表于 2016-6-10 21:01
可以,HC05已经设置为主模式,我是用串口助手读的HC06上接收的数据,和手机遥控接收的是一样的,但是小车 ...

这么说你的HC05是主从一体的?
如果说小车对于你手机发送的有相应的话,说明你的接收端程序没有问题
回复 支持 反对

使用道具 举报

发表于 2016-6-10 21:53:18 | 显示全部楼层
傻了哔哩C罗炮 发表于 2016-6-10 21:01
可以,HC05已经设置为主模式,我是用串口助手读的HC06上接收的数据,和手机遥控接收的是一样的,但是小车 ...

这就说明你的发送端的代码有问题,你仔细看一下,Serial.write指令发出去的应该是ascii码,那边接收到的应该也是ascii码所以识别不了,而手机这边是按照文本发送的你的接收端就可以接受啊,你要不考虑试一下serial.print
回复 支持 反对

使用道具 举报

发表于 2016-6-10 21:54:04 | 显示全部楼层
傻了哔哩C罗炮 发表于 2016-6-10 21:01
可以,HC05已经设置为主模式,我是用串口助手读的HC06上接收的数据,和手机遥控接收的是一样的,但是小车 ...

http://blog.csdn.net/avrmcu1/article/details/28182533
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-10 22:27:37 | 显示全部楼层
zjz5717 发表于 2016-6-10 21:54
http://blog.csdn.net/avrmcu1/article/details/28182533

分析的很有道理,我一开始也在纠结print和write的问题,但是并没有效果,我再试试看吧,多谢!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-11 09:16:17 | 显示全部楼层
zjz5717 发表于 2016-6-10 21:53
这就说明你的发送端的代码有问题,你仔细看一下,Serial.write指令发出去的应该是ascii码,那边接收到的应 ...

还是不行啊,是不是和报文有关系啊,手机蓝牙和蓝牙模块的不一样?可串口助手上的接收到的字符串是一模一样的。
回复 支持 反对

使用道具 举报

发表于 2016-6-11 13:04:44 | 显示全部楼层
傻了哔哩C罗炮 发表于 2016-6-11 09:16
还是不行啊,是不是和报文有关系啊,手机蓝牙和蓝牙模块的不一样?可串口助手上的接收到的字符串是一模一 ...

我想问一下你做的遥控器为什么要用wire库
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-11 18:49:30 | 显示全部楼层
zjz5717 发表于 2016-6-11 13:04
我想问一下你做的遥控器为什么要用wire库

没有用,忘删
回复 支持 反对

使用道具 举报

发表于 2016-6-11 19:11:17 | 显示全部楼层
傻了哔哩C罗炮 发表于 2016-6-11 18:49
没有用,忘删

那你把串口助手连接到发射端,看看能不能正常工作
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-12 08:58:21 | 显示全部楼层
zjz5717 发表于 2016-6-11 19:11
那你把串口助手连接到发射端,看看能不能正常工作

可以正常工作,连接收端的蓝牙到串口助手,接收到的命令两个发送端发送的都一样。。。
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

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

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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