极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12740|回复: 0

跪求大神,DIY姿态遥控,和手机发送的指令一样,小车却没反应

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



  

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'
回复

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 22:15 , Processed in 0.033810 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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