📄 原始 邮轮检测.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 + -