qu_zl = 0; qu_zr = 0; qu_rr = 1; }
// /***********************小车后退函数************************/ // void back() // {
// qu_ll = 0; // qu_zl = 1; // qu_zr = 1; // qu_rr = 0; // }
/***********************小车左转函数 只有一个轮子动************************/ void left() { qu_ll = 0; qu_zl = 0; qu_zr = 0; qu_rr = 1; }
/***********************小车左转函数 左边轮子后退 右边轮子前进************************/ void left_s() { qu_ll = 0; qu_zl = 1; qu_zr = 0; qu_rr = 1; }
/***********************小车停下函数************************/ void stop() { qu_ll = 0; qu_zl = 0; qu_zr = 0; qu_rr = 0; }
/***********************小车右转函数 只有一个轮子动************************/ void right() {
29
qu_ll = 1; qu_zl = 0; qu_zr = 0; qu_rr = 0; }
/***********************小车右转函数 左边轮子前进 右边轮子后退************************/ void right_s() { qu_ll = 1; qu_zl = 0; qu_zr = 1; qu_rr = 0; }
void che_90_180_break(uchar dat) { uchar i_z = 0; while(1) //循环等待中间寻迹传感器到黑线上 { if(xun_z == 0) //如果中间那寻迹传感器到了黑线上,要让小车停下来前进了 { i_z++; //消去干扰 if(i_z >= 10) //10次之后就确定寻迹模块的中间传感器到黑线上了 { if(dat == L) //如果是左转90度就让右转的方法制动 right_s(); else left_s(); //如果是右转90度就让左转的方法制动 DelayMs(50); go(); break; //break退出while(1)这个死循环 } } else //没有在黑钱上就给i_z变量清零 { i_z = 0; } } }
/***********************小车左转90度************************/ void left_s_90_while() //小车向左转90度
30
{ go(); //前进一小会让小车转90度时刚好让黑线在小车的中间 DelayMs(120); left_s(); //左转90度注意这个延时不能太长 只要能让寻迹模块中间的传感离开黑线就好 DelayMs(180); che_90_180_break(L); }
/***********************小车向右转90度************************/ void right_s_90_while() // { go(); //前进一小会让小车转90度时刚好让黑线在小车的中间 DelayMs(120); right_s(); //左转90度注意这个延时不能太长 只要能让寻迹模块中间的传感离开黑线就好 DelayMs(180); che_90_180_break(R); }
// 白线为 1 黑线为 0 void xunnji() { if((xun_ll==1) && (xun_l==1) && (xun_z==0) && (xun_r==1) && (xun_rr==1)) { go(); //小车前进 } if((xun_ll==0) && (xun_l==0) && (xun_z==0) && (xun_r==0) && (xun_rr==0)) { stop(); } if(((xun_ll==1) && (xun_l==1) && (xun_z==0) && (xun_rr==1)) || ((xun_ll==1) && (xun_l==1) && (xun_z==1) && (xun_rr==1)) || ((xun_ll==1) && (xun_z==1) && (xun_rr==0)) || ((xun_ll==1) && (xun_l==1) && (xun_z==1) && ( (xun_rr==0))) { right(); } if(((xun_ll==1) && (xun_l==0) && (xun_r==1) && (xun_rr==1)) || ((xun_ll==0) && (xun_l==0) && (xun_z==1) && (xun_rr==1)) || ((xun_ll==0) && (xun_l==1) && && (xun_r==1) && (xun_rr==1)))
31
{ left(); } if((xun_ll==1) && (xun_z==0) && (xun_rr==0)) { go(); DelayMs(1); if((xun_ll==1) && (xun_z==0)&& (xun_rr==0)) { right_s_90_while(); } } if((xun_ll==0) && (xun_l==0) && (xun_rr==1)) { go(); DelayMs(1); if((xun_ll==0) && (xun_l==0) && (xun_rr==1)) { left_s_90_while(); } } }
void main(void) { int Dis = 0; InitTimer(); Init_1602(); CsbInit(); Dis = GetDis(); while(1) { xunnji(); if(bTime_500Ms) { bTime_500Ms = 0 ; Dis = GetDis(); Lcd1602Printf(2,3,\ if(Dis < 24) { right_s(); DelayMs(500); }
32
}
}
}
33