⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mouse_drive.c

📁 周立功电子鼠V1.3内部演示版源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
						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 + -