📄 走白线.cpp
字号:
///////////小车走白线的程序,包括前进和后退/////////////
////bit flag=1; //标志位用来数白线,当第一次接触时count++ 以后则不加
///bit label; //标志位用来应付走出白线的情况
/***********************************小车向前走*********************************/
void forward(void) //小车直走白线
{ //uchar i;
LMF=0,LMB=1; //两电机向前转
RMF=0,RMB=1;
LastWLL=LastWLR=0;
if (WLL==1&&WLM==0&&WLR==1) //小车走直线时,两电机均向前转
{pwm(200,200);
flag=1;
}
else if (WLL==0&&WLM==0&&WLR==1) //小车向右偏时,左电机减速,右电机加速 左转
{pwm(190,210);
flag=1;
label=1; //标志位label=1表示右偏
}
else if (WLL==1&&WLM==0&&WLR==0) //小车向左偏时,右电机减速,左电机加速 右转
{pwm(210,190);
flag=1;
label=0; //标志位label=0表示左偏
}
else if (WLL==0&&WLM==1&&WLR==1) //小车向右偏得较多时,左电机减速,右电机加速 左转
{pwm(180,220);
flag=1;
label=1; //标志位label=1表示右偏
LastWLR=WLR;
}
else if (WLL==1&&WLM==1&&WLR==0) //小车向左偏得较多时,右电机减速,左电机加速 右转
{pwm(220,180);
flag=1;
label=0; //标志位label=0表示左偏
LastWLL=WLL;
}
else if(WLL==1&&WLM==1&&WLR==1) //小车越线,需要根据上次结果进行判断。
if( LastWLL=0) //小车在白线右边
{pwm(180,220);
flag=1;
label=1; //标志位label=1表示右偏
}
else if(LastWLR=0)
{pwm(220,180);
flag=1;
label=0; //标志位label=0表示左偏
}
/* else if (WLL==0&&WLM==0&&WLR==0) //小车越过白线 count++
{pwm(200,200);
if(flag)
{count++; //当第一次接触时count++
flag=0; //标志置零以免重复在一条直线上count++
}
}
else {flag=1;
if(label) pwm(100,140);
else pwm(140,100);
}
// 小车走出直线倒车
//现在暂时没有用
}
/************************************小车后退程序**********************/
void backward(void) //小车直走白线
{
LMF=1,LMB=0; //两电机向前转
RMF=1,RMB=0;
LastWLL=LastWLR=0;
if (WLL==1&&WLM==0&&WLR==1) //小车走直线时,两电机均向前转
{pwm(180,180);
flag=1;
}
else if (WLL==0&&WLM==0&&WLR==1) //小车向右偏时,右电机减速,左电机加速 右后转
{pwm(190,170);
flag=1;
label=1; //标志位label=1表示右偏
}
else if (WLL==1&&WLM==0&&WLR==0) //小车向左偏时,左电机减速,右电机加速 左后转
{pwm(170,190);
flag=1;
label=0; //标志位label=0表示左偏
}
else if (WLL==0&&WLM==1&&WLR==1) //小车向右偏得较多时,右电机减速,左电机加速 右后转
{pwm(200,160);
flag=1;
label=1; //标志位label=1表示右偏
LastWLR=WLR;
}
else if (WLL==1&&WLM==1&&WLR==0) //小车向左偏得较多时,左电机减速,右电机加速 左后转
{pwm(160,200);
flag=1;
label=0; //标志位label=0表示左偏
LastWLL=WLL;
}
else if(WLL==1&&WLM==1&&WLR==1) //小车越线,需要根据上次结果进行判断。
if( LastWLL=0) //小车在白线右边
{pwm(220,180);
flag=1;
label=1; //标志位label=1表示右偏
}
else if(LastWLR=0)
{pwm(180,220);
flag=1;
label=0; //标志位label=0表示左偏
}
/*else if (WLL==0&&WLM==0&&WLR==0) //小车越过白线 count--
{pwm(180,180);
if(flag)
{count--; //当第一次接触时count--
flag=0; //标志置零以免重复在一条直线上count--
}
}
else {flag=1;
//if(label) pwm(140,110); //右偏右后转弯,左电机加速,右电机减速
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -