📄 mouse_drive.c
字号:
else if(l<6)
{
g_Run.LeftPulse ++;
l -=2;
}
else
{
g_Run.LeftPulse ++;
l -= 3;
}
}
}
if(Check_Maze_State[0].right_1)
{
g_Run.LeftPulse++;
r++;
Check_Maze_State[0].right_1 = 0;
}
else
{
if(r)
{
if(r<4)
{
g_Run.RightPulse++;
r--;
}
else if(r<6)
{
g_Run.RightPulse++;
r -=2;
}
else
{
g_Run.RightPulse++;
r -= 3;
}
}
}
}
g_Run.MouseStop = 0; // 标记车体运动
}
else // 还需要运行的总脉冲数为0
{
g_Run.MouseStop = 1; // 标记车体停止
}
}
else
{
wheeljamcheck();
wheelJamdispose();
}
}
//------------------------------------------------------------------------------------
// 函数名称:
// 函数功能:
//
//------------------------------------------------------------------------------------
void wheeljamcheck(void)
{
if((g_Run.WheelStop&0x10)==0) // 查询左轮是否运行
{
if(g_Run.LeftTime+MAX_NOT_RUN_TIME<g_Run.SysTick)
{
g_Run.LeftTime = g_Run.SysTick;
g_Run.WheelStop |= 1<<5;
}
else
{
g_Run.WheelStop &= ~(1<<5);
}
}
if((g_Run.WheelStop&0x01)==0) // 查询右轮是否运行
{
if(g_Run.RightTime+MAX_NOT_RUN_TIME<g_Run.SysTick)
{
g_Run.RightTime = g_Run.SysTick;
g_Run.WheelStop |= 1<<1;
}
else
{
g_Run.WheelStop &= ~(1<<1);
}
}
}
//------------------------------------------------------------------------------------
// 函数名称:
// 函数功能:
//
//------------------------------------------------------------------------------------
void wheelJamdispose(void)
{
if(g_Run.WheelStop & 0x22)
{
g_Run.PulseCount = 5;
switch(g_Run.WheelStop & 0x22)
{
case 0x22 :
g_Run.LeftPulse = 0;
g_Run.RightPulse = 0;
LeftWheelRun(3);
RightWheelRun(3);
break;
case 0x02:
if(g_Run.WheelStop&0x08)
LeftWheelRun(2);
else
LeftWheelRun(1);
break;
case 0x20:
if(g_Run.WheelStop&0x80)
RightWheelRun(2);
else
RightWheelRun(1);
break;
}
//g_Run.MousePulCount += g_Run.PulseCount;
}
}
//------------------------------------------------------------------------------------
// 函数名称: MouseRUN
// 函数功能: 车体运动控制函数。
//
//------------------------------------------------------------------------------------
void MouseRUNIni( int run,int puls,int percent)
{
g_Run.COM_Run = run;
g_Run.MousePulCount = puls;
//PwmPercent(percent);
Delay(10000);
while(g_Run.MouseStop == 0);
}
//------------------------------------------------------------------------------------
// 函数名称: MouseRUN
// 函数功能: 车体运动控制函数。
//
//------------------------------------------------------------------------------------
void Go_Ahead(uint32 n)
{
goahead = 1;
for(;n>0;n--)
{
MouseRUNIni(GO_ON, 31, g_Run.percent);
}
goahead = 0;
}
//------------------------------------------------------------------------------------
// 函数名称: MouseRUN
// 函数功能: 车体运动控制函数。
//
//------------------------------------------------------------------------------------
void Turnleft(void)
{
static uint32 reg_l,reg_r;
MouseRUNIni(GO_ON, 18, g_Run.percent);
if((Check_Maze_State[1].left_2 == 0) && (Check_Maze_State[0].left_2 ==0))
{
Delay(10000);
//MappulseClear();
MAP.leftpulse = 0;
MAP.rightpulse = 0;
reg_l = g_Run.LeftPulse;
reg_r = g_Run.RightPulse;
g_Run.LeftPulse = 0;
g_Run.RightPulse = 0;
MouseRUNIni(TURN_90_L, 12, g_Run.percent);//13
if(MAP.dir)
MAP.dir--;
else
MAP.dir = 3;
DirDisplay();
g_Run.LeftPulse = reg_l;
g_Run.RightPulse = reg_r;
MouseRUNIni(GO_ON, 16, g_Run.percent);
MAP.leftpulse = 0;
MAP.rightpulse = 0;
map_xy();
}
}
//------------------------------------------------------------------------------------
// 函数名称: MouseRUN
// 函数功能: 车体运动控制函数。
//
//------------------------------------------------------------------------------------
void Turnright(void)
{
static uint32 reg_l,reg_r;
MouseRUNIni(GO_ON, 18, g_Run.percent);
if((Check_Maze_State[1].right_2 == 0) && (Check_Maze_State[0].right_2 ==0))
{
Delay(10000);
//MappulseClear();
MAP.leftpulse = 0;
MAP.rightpulse = 0;
reg_l = g_Run.LeftPulse;
reg_r = g_Run.RightPulse;
g_Run.LeftPulse = 0;
g_Run.RightPulse = 0;
MouseRUNIni(TURN_90_R, 12, g_Run.percent);
if(MAP.dir!=3)
MAP.dir++;
else
MAP.dir = 0;
DirDisplay();
g_Run.LeftPulse = reg_l;
g_Run.RightPulse = reg_r;
MouseRUNIni(GO_ON, 16, g_Run.percent);
MAP.leftpulse = 0;
MAP.rightpulse = 0;
map_xy();
}
}
//------------------------------------------------------------------------------------
// 函数名称: MouseRUN
// 函数功能: 车体运动控制函数。
//
//------------------------------------------------------------------------------------
void Turn180L(void)
{
static uint32 reg_l,reg_r;
Delay(10000);
MAP.leftpulse = 0;
MAP.rightpulse = 0;
reg_l = g_Run.LeftPulse;
reg_r = g_Run.RightPulse;
g_Run.LeftPulse = 0;
g_Run.RightPulse = 0;
MouseRUNIni(TURN_180_L, 25, g_Run.percent);//26
if(MAP.dir<2)
MAP.dir += 2;
else
MAP.dir -= 2;
DirDisplay();
g_Run.LeftPulse = reg_l;
g_Run.RightPulse = reg_r;
MouseRUNIni(GO_ON, 10, g_Run.percent);
MAP.leftpulse = 0;
MAP.rightpulse = 0;
map_xy();
}
//------------------------------------------------------------------------------------
// 函数名称: MouseRUN
// 函数功能: 车体运动控制函数。
//
//------------------------------------------------------------------------------------
void Turn180R(void)
{
static uint32 reg_l,reg_r;
Delay(10000);
MAP.leftpulse = 0;
MAP.rightpulse = 0;
reg_l = g_Run.LeftPulse;
reg_r = g_Run.RightPulse;
g_Run.LeftPulse = 0;
g_Run.RightPulse = 0;
MouseRUNIni(TURN_180_R, 25, g_Run.percent);//26
if(MAP.dir<2)
MAP.dir += 2;
else
MAP.dir -= 2;
DirDisplay();
g_Run.LeftPulse = reg_l;
g_Run.RightPulse = reg_r;
MouseRUNIni(GO_ON, 10, g_Run.percent);
MAP.leftpulse = 0;
MAP.rightpulse = 0;
map_xy();
}
//------------------------------------------------------------------------------------
// 函数名称: MouseRUN
// 函数功能: 车体运动控制函数。
//
//------------------------------------------------------------------------------------
void MouseRUN( int run)
{
SysTickIntDisable();
switch(run)
{
case STOP: // 车体停止运行
LeftWheelRun(0); // 左轮止转动
RightWheelRun(0); // 右轮止转动
break;
case GO_ON: // 车体向前运行
LeftWheelRun(1); // 左轮向前转动
RightWheelRun(1); // 右轮向前转动
break;
case COME_BACK: // 向后走
LeftWheelRun(2); // 左轮向后转动
RightWheelRun(2); // 右轮向后转动
break;
case TURN_RIGHT: // 向右靠
LeftWheelRun(0); // 左轮向前转动
RightWheelRun(2); // 右轮停止转动
break;
case TURN_LEFT: // 向左靠
LeftWheelRun(2); // 左轮停止转动
RightWheelRun(0); // 右轮向前转动
break;
case TURN_90_L: // 向左转90度
LeftWheelRun(2); // 左轮向后转动
RightWheelRun(1); // 右轮向前转动
break;
case TURN_90_R: // 向右转90度
LeftWheelRun(1); // 左轮向前转动
RightWheelRun(2); // 右轮向后转动
break;
case TURN_180_L: // 向左转180度
LeftWheelRun(2); // 左轮向后转动
RightWheelRun(1); // 右轮向前转动
break;
case TURN_180_R: // 向右转180度
LeftWheelRun(1); // 左轮向前转动
RightWheelRun(2); // 右轮向后转动
break;
}
SysTickIntEnable();
}
//------------------------------------------------------------------------------------
// 函数名称: Timer1Ini
// 函数功能: 定时器1初始化。
//
//------------------------------------------------------------------------------------
void Timer1Ini(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); // 使能定时器1模块
/* 定时器配置*/
TimerConfigure(TIMER1_BASE, TIMER_CFG_32_BIT_PER); //
TimerLoadSet(TIMER1_BASE,TIMER_A,SysCtlClockGet()/200);
TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
TimerEnable(TIMER1_BASE, TIMER_A);
IntEnable(INT_TIMER1A);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -