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

📄 原始 邮轮检测.txt

📁 08山东电子电子竞赛智能小车程序基于PIC+红外+电子罗盘ourdev551262 包含源码
💻 TXT
字号:
#include "C_main.h"
unsigned char test;
unsigned char NoWState;
unsigned char NoWState1;

//BD DC各段时间
unsigned int16 ABTime;
unsigned int16 BDTime;
unsigned int16 DCTime; 

//临时变量
unsigned char tmp;
//获得角度变量
unsigned int16 NorthRad;
//已经检测到铁标志
int1 eorned;
//走S路线使用罗盘标志
int1 SroadNorth;

//巡线:开始时只有右侧检验黑线
//骑线标志
int1 RightLine;

//显示方位
void dispNorth()
{
LCD_setpos(0,1);	
//获得罗盘角度
NorthRad=GetNorthmy();

LCD_disp_valueInt16(NorthRad);
LCD_disp_Putchar(' ');
LCD_disp_Putchar(' ');
}

void main()
{
	
init_sys();

//关闭
Iron(0);
Beep(0);
Butten_Detect=0;
LCDprintR(&frm_welcom,1,1);	



//========================================================	
while(input(Key)==1)
{
delay_ms(100);
LCD_setpos(0,0);
NowV=GetVol();
LCD_disp_valueInt16(NowV);	
};

while(input(Key)==0);

//初始化罗盘===========================================
init_spi();
//设置用户原点
SetOrg(GetNorth());	


//清屏
LCD_disp_CLS();
//计时开始
Time_Start(0);
//前进
Left_along();
//启动电机
PWM_Start();

//显示正在进行第一段
NoWState=1;
LCD_setpos(4,3);
LCD_disp_Putchar('0');

//启动电压
//ADStart();

SroadNorth=0;
while(1)
{

//1秒时间计时
if (Time_update==1)
{
		LCD_setpos(4,2);
		LCD_disp_valueInt16(Time_Get());
		//1S更新一次电压,显示PWM		
		LCD_setpos(0,2);
		LCD_disp_valueInt16(100-Left_Pwm);	
		LCD_setpos(6,2);
		LCD_disp_valueInt16(Right_Pwm);		
		
}


if (TimeUs>100)
{
	TimeUs=0;
	//电子罗盘走S路线
	dispNorth();
	if (SroadNorth==1)
	{
		if ( NorthRad>280 && NorthRad<300 )
		{	
			SroadNorth=0;
			NoWState=6;	
			LCD_setpos(4,3);
			
			LCD_disp_Putchar('L');	
			Left_along();	
		}
	}
}	

//一直扫描各传感器状态,并保存到状态变量	
GetSenser();

//走迷宫
if (LightUpdateS==1)
{
	

		
		switch(NoWState)
	{
		
		case 1:
		Left_along();
		if(HS==1)
		{
		PWM_Stop();	
		CC_turnright90();
		delay_ms(450);
		while(Hs==1)
		{
			GetSenser();
		}
		PWM_Start();
		NoWState=2;	
		LCD_setpos(4,3);
		LCD_disp_Putchar('1');
		}

		break;
		
		case 2:
		Left_along();
		if(HS==1)
		{
		PWM_Stop();	
		CC_turnright90();
		delay_ms(450);
		while(Hs==1)
		{
			GetSenser();
		}
		PWM_Start();
		NoWState=3;	
		LCD_setpos(4,3);
		LCD_disp_Putchar('2');		
		}

		break;
		
		case 3:
		Left_along();
		if(HS==1)
		{
		PWM_Stop();	
	
		CC_turnleft90();
		delay_ms(400);
		
		PWM_Start();
		NoWState=4;	
		LCD_setpos(4,3);
		LCD_disp_Putchar('3');
		}

		break;
		
		case 4:
		Left_along();
		
		if(HS==1)
		{
		PWM_Stop();	
		CC_turnleft90();
		
		//delay_ms(380);
		while(HS==1|| RS==0)
		{
		GetSenser();
		}
		PWM_Start();
		NoWState=5;	
		LCD_setpos(4,3);
		LCD_disp_Putchar('4');
		//定时
		TimeUs=0;
		}
		
		break;
		
		case 5:
		
	if (RS==1)
	{
		PWM_SetDRC(2,1);
		PWM_SetDuty(90,90);	
		SroadNorth=0;		
	};
	if (RS==0)
	{	
		PWM_SetDRC(1,2);
		PWM_SetDuty(80,20);			
		SroadNorth=1;
	};
		
		if(HS==1)
		{
		NoWState=6;	
		LCD_setpos(4,3);
		LCD_disp_Putchar('5');			
		SroadNorth=0;
		}
	
		
		break;

		case 6:
		//Left_along();
		Right_along();
		
		if(HS==1)
		{
		PWM_Stop();	
		CC_turnleft90();
		while(HS==1)
		{
		GetSenser();
		}

		//delay_ms(500);
		PWM_Start(); 
		NoWState=7;	
		LCD_setpos(4,3);
		LCD_disp_Putchar('6');
		}
		break;

		case 7:
		Left_along();
		
		if(HS==1)
		{
		PWM_Stop();	
		
		CC_turnright90();
		delay_ms(500);
		
		while(LS==1 || HS==1)
		{
		GetSenser();
		}
		
		
		//延时五秒
		//
		CC_CarStop();
		Time_Stop();
		ABTime=Time_Get();
		tmp=0;
		while(tmp!=25)
		{
		tmp++;
		Beep(1);	
		delay_ms(50);
		Beep(0);
		delay_ms(150);
		}
		
		LCD_setpos(4,2);
		LCDprintR(&Blank,1,1);	
			
		//计时重新开始
		Time_Start(0);
		

		
		NoWState=8;	
		LCD_setpos(4,3);
		LCD_disp_Putchar('B');
		Butten_Detect=1;
		eorned=0;
		Iron(1);
		PWM_Start();
		//骑线标志
 		RightLine=0;
		PWM_SetDuty(40,40);	
		PWM_SetDRC(1,1);
		}
		break;
		
		case 8:	
		//巡线检测
		if (BL==1 && BR==1)
		{

			PWM_SetDuty(20,15);	
			PWM_SetDRC(1,1);	
		}
		else
		{
			if (BR==0)
			{
				//右转
				if(RightLine==0)
				{
				PWM_SetDRC(1,2);
				PWM_SetDuty(80,80);	
				RightLine=1;
				}
				else
				{
				 PWM_SetDRC(1,2);
				 PWM_SetDuty(80,80);	
				}
			}
			else if (BL==0 && RightLine==1)
			{
				//左转
				PWM_SetDRC(2,1);
				PWM_SetDuty(80,80);	
					
			};

			
			
		
		}
			
		//检测到铁片显示
		if(ES==1 && eorned==0)
		{   
			Time_Stop();
			BDTime=Time_Get();	
			
			PWM_Stop();
			eorned=1;
			LCDprintR(&ERon,0,1);
			
			//延时三秒
			tmp=0;
			while(tmp!=20)
			{
			tmp++;
			Beep(1);	
			delay_ms(100);
			Beep(0);
			delay_ms(50);
			}
			PWM_Start();
			Time_Start(0);
		}
		else
		{
			LCDprintR(&ERonNO,0,1);	
		}
		//检测到最终的墙壁停止
		if(HS==1)
		{
			Time_Stop();
			DCTime=Time_Get();
			PWM_Stop();
			Iron(0);
			Beep(1);	
			delay_ms(40);
			Beep(0);
			delay_ms(100);
			Beep(1);	
			delay_ms(40);
			Beep(0);
			
			LCD_setpos(4,3);
			LCD_disp_Putchar('C');
			
			LCD_disp_CLS();
			
			LCDprintR(&finish,2,0);
			
			LCD_setpos(2,1);
			LCD_disp_Putchar('A');
			LCD_disp_Putchar('B');
			LCD_disp_Putchar(':');
			LCD_disp_valueInt16(ABTime);
			LCD_disp_Putchar(' ');			
			LCD_setpos(2,2);
			LCD_disp_Putchar('B');
			LCD_disp_Putchar('D');
			LCD_disp_Putchar(':');
			LCD_disp_valueInt16(BDTime);
			LCD_disp_Putchar(' ');
			LCD_setpos(2,3);
			LCD_disp_Putchar('D');
			LCD_disp_Putchar('C');
			LCD_disp_Putchar(':');
			LCD_disp_valueInt16(DCTime);
			while(1);

		}
			
		break;
	}
				
}//if light update




}//While

	


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -