?? 走白線.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 + -