主要思路 :当前瞻检测到直角时,执行特殊操作,直到达到限制条件后返回初始状态。
目录
1.特殊操作
判断需要左转或者右转,给转弯标志赋值
2.限制条件
利用陀螺仪限制,当陀螺仪的偏航角度超过50°时,就返回为初始状态
3.代码示例
#include "headfile.h"
/***********引用的外部变量--不用管****************/
extern int err; //电感差值
extern int sum1,sum2,middle,left2,right2,left1,right1,weight_err;
/************元素相关变量****************/
extern unsigned char angle_flag=0; //直角标志
/*****************************/
void angle_decide() //直角判断
{
if((left1+right1)<35 && sum2>20 && middle<15&&angle_flag==0 ) //左面电感大,向左拐
{
angle_flag=1; //左转标志
angle[2]=0; //陀螺仪角度清零
}
else if((left1+right1)<355 && sum2<-20 && middle<15&&angle_flag==0) //右面电感大,向左拐
{
angle_flag=2; //右转标志
angle[2]=0;
}
if( angle_flag ==2 && angle[2]>50) //当车身转过50°
{
angle_flag=0;
}
else if( angle_flag ==1 && angle[2]<-50) //用路程积分和陀螺仪同时限制
{
angle_flag=0;
}
}
void angle_control() //直角控制
{
if(angle_flag==1)
{
MotorCtrl(0,500); //直接使用确定速度
}
else if(angle_flag==2)
{
MotorCtrl(500,0); //直接使用确定速度
}
}
void Element()
{
angle_decide(); //判断直角
}
void Control() //转向
{
if(angle_flag!=0)
{
angle_control();
}
}