|
发表于 2015-1-13 22:14:09
|
显示全部楼层
- #include "motor.h"
- #include "uart.h"
- #include "timer.h"
- bit Cruising_Flag =0;
- uchar Robots_Run_Status;
- bit Pre_Cruising_Flag = 0;
- /**电机初始化**/
- void Motor_Init(void)
- {
- MOTOR_A_EN=1;
- MOTOR_B_EN=1;
- MOTOR_GO_STOP;
- }
- void Cruising_Mod(void)
- {
-
- if(Pre_Cruising_Flag != Cruising_Flag)//自动巡航模式和非巡航模式切换
- {
- if(Pre_Cruising_Flag != 0)
- {
- MOTOR_GO_STOP;
- }
- Pre_Cruising_Flag = Cruising_Flag;
- }
- // Cruising_Flag=1; //for test
- if(1 == Cruising_Flag)
- {
- switch(Robots_Run_Status)
- {
- case 0x01:MOTOR_GO_RIGHT; break; //状态偏左
- case 0x02:MOTOR_GO_LEFT; break; //状态偏右
- case 0x03:MOTOR_GO_FORWARD; break; //直行状态
- case 0x04:MOTOR_GO_STOP; break; //停止状态
- }
- if((Input_Detect0 == 0)&& (Input_Detect2 == 0))
- {
- //左右两侧均未检测到障碍物
- Robots_Run_Status=0x03;
- }
-
- if((Input_Detect0 == 0)&& (Input_Detect2 == 1))
- {
- //右侧检测到障碍物
- MOTOR_GO_LEFT;
- Delay_Ms(1000);
- MOTOR_GO_FORWARD;
- Delay_Ms(3000);
- MOTOR_GO_RIGHT;
- Delay_Ms(1000);
- Robots_Run_Status=0x03;
- }
-
- if((Input_Detect0 == 1)&& (Input_Detect2 == 0))
- {
- //左侧检测到障碍物
- MOTOR_GO_RIGHT;
- Delay_Ms(1000);
- MOTOR_GO_FORWARD;
- Delay_Ms(3000);
- MOTOR_GO_LEFT;
- Delay_Ms(1000);
- Robots_Run_Status=0x03;
- }
-
- if((Input_Detect0 == 1)&& (Input_Detect2 == 1))
- {
- //两边都检测到了障碍物,停止
- Robots_Run_Status=0x04;
- }
-
- }
- }
复制代码
由于电机无法精确控制转动的角度,因此估算了一个1秒的转动时间,如果转角不够或过多,那么自己适当增加延时。 |
|