傻了哔哩C罗炮 发表于 2016-6-10 16:37:36

跪求大神,姿态遥控,和手机的输出的命令一样,为什么自己DIY的不行?

本人做了一个基于MPU6050的姿态遥控器,通过HC05与小车HC06相连,以取代手机蓝牙遥控,通过串口助手读取 HC06接收的数据和手机蓝牙发送的一模一样,为什么手机可以控制而我自己做的却没有反应?

傻了哔哩C罗炮 发表于 2016-6-10 16:38:44

下面贴上代码,自己写的遥控程序:



#include <Wire.h>

int YPR;
int a=0,b=0,c=0,d=0,f=0;

unsigned char Re_buf,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==0xAA && Re_buf==0x55)      //检查帧头,帧尾
   {             
            YPR=(Re_buf<<8|Re_buf)/100;   //合成数据,去掉小数点后2位
            YPR=(Re_buf<<8|Re_buf)/100;
            YPR=(Re_buf<<8|Re_buf)/100;
            
            
   }
}

if(YPR<80&&YPR>30&&abs(YPR)<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>-80&&YPR<-30&&abs(YPR)<30&&d==0)
          {
         Serial.write('O');
            Serial.write('N');
            Serial.write('D');
               a=0;b=0;c=0;d=1;f=0;
      }
    elseif(YPR>-80&&YPR<-30&&abs(YPR)<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>30&&YPR<80&&abs(YPR)<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)<30&&abs(YPR)<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=(unsigned char)Serial1.read();
   if(counter==0&&Re_buf!=0xAA) return;      // 检查帧头         
    counter++;      
    if(counter==8)                //接收到数据
    {   
       counter=0;               //重新赋值,准备下一帧数据的接收
       sign=1;
    }      
}
}

傻了哔哩C罗炮 发表于 2016-6-10 19:11:07

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




void kongzhi()
{
    if(Serial1.available())
   {
    while (Serial1.available() > 0)//一直接收
   {
      buff=Serial1.read();//接收三个字节
      delay(2);
   }
      i=0;//重新接收
   if((buff=='O')&&(buff=='N'))//前进
   {
       switch(buff)
       {
         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'
页: [1]
查看完整版本: 跪求大神,姿态遥控,和手机的输出的命令一样,为什么自己DIY的不行?