小车寻线程序
- 格式:docx
- 大小:17.12 KB
- 文档页数:7
寻线程序内容
#include<BoeBot.h>
#include<uart.h>
sbit A=P1^5; //左边
sbit S=P2^1; //中间
sbit C=P3^5; //右边
sbit M1=P1^0; //左边电机
sbit M2=P1^1; //右边电机
unsigned char x=0;
unsigned char i,j,k;
void B_right_Turn(void);
void Forward(void) //前进
{
M1=1;
delay_nus(1600);
M1=0;
M2=1;
delay_nus(1400);
M2=0;
delay_nms(20); }
void Left_Turn(void) //以中心为轴左传{
Forward();
Forward();
Forward();
Forward();
Forward();
Forward();
Forward();
Forward();
for(i=1;i<=29;i++)
{
M1=1;
delay_nus(1300);
M1=0;
M2=1;
delay_nus(1300);
M2=0;
delay_nms(19);
}
}
void Left_2 (void) //以左轮为轴左传{
M1=1;
delay_nus(1500);
M1=0;
M2=1;
delay_nus(1400);
M2=0;
delay_nms(19);
}
void Right_Turn(void) //以中心为轴右转{
Forward();
Forward();
Forward();
Forward();
Forward();
Forward();
Forward();
Forward();
for(j=1;j<=29;j++)
{
M1=1;
delay_nus(1700);
M1=0;
M2=1;
delay_nus(1700);
M2=0;
delay_nms(20);
}
}
void Right_Turn_2(void) //以中心为轴右转{
M1=1;
delay_nus(1600);
M1=0;
M2=1;
delay_nus(1600);
M2=0;
delay_nms(20);
}
void Right_2(void) //以右轮为轴右转{
M1=1;
delay_nus(1600);
M1=0;
M2=1;
delay_nus(1500);
M2=0;
delay_nms(20);
}
void B_right_Turn(void) //右转45度
{
for(k=1;k<=15;k++)
{
M1=1;
delay_nus(1700);
M1=0;
M2=1;
delay_nus(1700);
M2=0;
delay_nms(20);
}
}
void z_x (void)
{
while(1)
{
Left_2();
if(S==1) break;
}
}
void y_x (void)
{
while(1)
{
Right_2();
if(S==1) break;
}
}
void main()
{
while(1) //1 duan
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先
z_x();
if(C==1&&S==0&&A==0)
y_x();
if(A==1&&S==1&&C==1) break;
}
Left_Turn(); //左转90度进入2段
while(1) //2段
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先
z_x();
if(C==1&&S==0&&A==0)
y_x();
if(S==1&&C==1) break;
}
Right_Turn(); //进入3段
while(1) //3段
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先z_x();
if(C==1&&S==0&&A==0)
y_x();
if(S==1&&C==1&&A==1) break;
}
Left_Turn(); //左转90度进入4段
while(1) //4段
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先z_x();
if(C==1&&S==0&&A==0)
y_x();
if(S==1&&C==1) break;
}
Right_Turn(); //进入5段while(1) //5段
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先z_x();
if(C==1&&S==0&&A==0)
y_x();
if(S==1&&C==1&&A==1) break;
}
while(C==1||A==1) //过渡到6
{
Forward();
}
while(1) //6段
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先z_x();
if(C==1&&S==0&&A==0)
y_x();
if(S==1&&C==1) break;
}
Right_Turn(); //进入7段
while(1) //7段
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先z_x();
if(C==1&&S==0&&A==0)
y_x();
if(S==1&&C==1) break;
}
Right_Turn(); //进入8段
while(1) //进入8段
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先z_x();
if(C==1&&S==0&&A==0)
y_x();
if(A==1&&S==1) break;
}
x=0;
while(x<20) //过渡到0.5ms
{
Forward();
x++;
}
while(1) //9段
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先z_x();
if(C==1&&S==0&&A==0)
y_x();
if(A==1&&S==1) break;
}
Left_Turn(); //左转90度进入10段
while(1) //10段
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先z_x();
if(C==1&&S==0&&A==0)
y_x();
if(A==1&&S==1) break;
}
Left_Turn(); //左转90度进入11段
while(1) //11段
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先z_x();
if(C==1&&S==0&&A==0)
y_x();
if(C==1&&S==1) break;
}
x=0;
while(x<20) //过渡到12段
{
Forward();
x++;
}
while(1) //12段
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先z_x();
if(C==1&&S==0&&A==0)
y_x();
if(A==1&&S==1) break;
}
Left_Turn(); //左转90度进入13段
while(1) //13段
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先
z_x();
if(C==1&&S==0&&A==0)
y_x();
if(C==1&&S==1&&A==1) Forward();
}
/* Forward();
Forward();
x=0;
while(x<20) //过渡到14段135度{
Right_Turn_2();
x++;
}
x=0;
while(x<35) //到14段
{
Forward();
x++;
if(A==1&&S==0&&C==0) //左边检测到黑先z_x();
if(C==1&&S==0&&A==0)
y_x();
}
Right_Turn();
Right_Turn();// 180
x=40;
while(x)
{
Forward();
x--;
}
Forward();
B_right_Turn(); //右转45度
while(1)
{
Forward();
if(A==1&&S==0&&C==0) //左边检测到黑先z_x();
if(C==1&&S==0&&A==0)
y_x();
if(C==1&&S==1&&A==1) break;
}
x=0;
while(x<200) //过渡到12段
{
Forward();
x++;
} */
}。