自动避障小车技术报告2_避障小车技术报告
自动避障小车技术报告2由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“避障小车技术报告”。
自动避障小车
技术报告
学
校:乐山师范学院成员:郑素仙
朱平
吴志 指导老师:张九华
前言
设计背景:在科学探索和紧急抢险中经常会遇到对与一些危险或人类不能直接到达的地域的探测,这些就需要用机器人来完成。而在机器人在复杂地形中行进时自动避障是一项必不可少也是最基本的功能。因此,自动避障系统的研发就应运而生。
我们的自动避障小车就是基于这一系统开发而成的。随着科技的发展,对于未知空间和人类所不能直接到达的地域的探索逐步成为热门,这就使机器人的自动避障有了重大的意义。我们的自动避障小车就是自动避障机器人中的一类。自动避障小车可以作为地域探索机器人和紧急抢险机器人的运动系统,让机器人在行进中自动避过障碍物。
目录
一、设计目标:.........................................................4
二、方案设计:.........................................................4
2.1直流调速系统.................................................4 2.2检测系统.....................................................5 三 硬件设计.............................................................6 3.1、SPCE061A单片机最小系统.....................................6
3.1.1.SPCE061A时钟电路...........................................................................................8
3.1.2.PLL锁相环...........................................................................................................9 3.1.3.看门狗Watchdog..................................................................................................9 3.1.4.低电压复位(LVR).........................................................................................10 3.1.5.I/O端口..............................................................................................................10 3.1.6.时基与定时器.....................................................................................................11 3.1.7.SPCE061A的定时器/计数器............................................................................11 3.1.8.ADC、DAC........................................................................................................12 3.2、超声波传感器..............................................12 四 软件设计...........................................................16 4.1软件设计各模块..............................................16 4.2速度控制....................................................17 4.3障碍物检测..................................................17 4.4看门狗......................................................17 4.5基频中断....................................................18 4.6程序设计流程图..............................................19 五:测试数据、测试结果分析及结论.......................................19 程序附录...............................................................21 1.主程序:....................................................21 2.中断程序....................................................243、测距程序....................................................28
一、设计目标:
1.小车从无障碍地区启动前进,感应前进路线上的障碍物后,能自动避开障碍物。
2.根据障碍物的位置选择下一步行进方向,选择左拐还是右拐,若障碍物在左边则自动右拐,若障碍物在右边则左拐,若障碍物在正前方可任意选择左拐或者是右拐,以达到避开障碍物的目的。
3.通过利用单片机内时钟源的控制设定左拐和右拐的时间,从而能持续前进。
4.为达到速度的可控性,需设置两个独立按键对小车进行控速。
二、方案设计:
根据设计要求,确定如下方案:在现有玩具电动车的基础上,加装超声波传感器,实现对电动车的运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。
这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。
2.1直流调速系统
采用脉宽调速系统
脉宽调速系统的主电路采用脉宽调制式变换器,简称PWM变换器。
脉宽调速也可通过单片机控制继电器的闭合来实现,但是驱动能力有限。为顺利实现电动小汽车的前行与倒车,本设计采用了可逆PWM变换器。可逆PWM变换器主电路的结构式有H型、T型等类型。我们在设计中采用了常用的双极式H型变换器,它是由4个三极电力晶体管和4个续流二极管组成的桥式电路。如附录一:
2.2检测系统
检测系统主要实现红外传感器,超声波传感,光电传感器对车的运行进行实时测量,即利用这种传感器对电动车的避障、位置、行车状态进行测量。行车开始、结束及超声波检测:
在车的开始和结束阶段,都是用红外式的光电传感器,当按下此光电开头,小车就开始行驶,在完成任务后,再按下此开关,小车就停止前进。在前进的过程中不断的发送超声波,并对接到的进行处理计算。如果处理得到的结果是发现前面的障碍时,再行进一次距离的处理,当距离小是40CM时,让小车倒退一段时间,再进行避障处理,如果距离大于40CM,就直接进避障处理。
三 硬件设计
3.1、SPCE061A单片机最小系统
我们用的是凌阳的SPCE061A单片机最小系统其概述如下: SPCE061A 是继μ’nSP™系列产品SPCE500A等之后凌阳科技推出的又一款16位结构的微控制器。与SPCE500A不同的是,在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,SPCE061A里只内嵌32K字的闪存(FLASH)。较高的处理速度使μ’nSP™能够非常容易地、快速地处理复杂的数字信号。因此,与SPCE500A相比,以μ’nSP™为核心的SPCE061A微控制器是适用于数字语音识别应用领域产品的一种最经济的选择。
性能
16位μ’nSP™微处理器;
工作电压(CPU)VDD为2.4~3.6V(I/O)VDDH为2.4~5.5V ;
CPU时钟:0.32MHz~49.152MHz ;
内置2K字SRAM;
内置32K FLASH;
可编程音频处理;
晶体振荡器;
系统处于备用状态下(时钟处于停止状态),耗电仅为2μA@3.6V;
2个16位可编程定时器/计数器(可自动预置初始计数值);
2个10位DAC(数-模转换)输出通道;
32位通用可编程输入/输出端口;
14个中断源可来自定时器A / B,时基,2个外部时钟源输入,键唤醒;
具备触键唤醒的功能;
使用凌阳音频编码SACM_S240方式(2.4K位/秒),能容纳210秒的语音数据;
锁相环PLL振荡器提供系统时钟信号;
32768Hz实时时钟;
7通道10位电压模-数转换器(ADC)和单通道声音模-数转换器;
声音模-数转换器输入通道内置麦克风放大器和自动增益控制(AGC)功能;
具备串行设备接口;
具有低电压复位(LVR)功能和低电压监测(LVD)功能;
内置在线仿真电路ICE(In-Circuit Emulator)接口;
具有保密能力;
具有WatchDog功能;
16位μ’nSP™微处理器硬件结构图
ICE_ENICE_SCKICE_SDA16位微控制器u'nSPFLASH双16位定时器/计数器时基中断控制+ICERAMVCPXI/RXO锁相环振荡器CPU时钟实时时钟7通道10位ADC单通道ADC+AGCMIC_IN低电压监测/低电压复位Watchdog串行异步通讯接口IOB7(RXD)IOB10(TXD)双通道10位DAC串行输入输出接口IOB0(SCK)IOB1(SDA)AUD1AUD232管脚通用输入输出端口IOA150 3.1.1.SPCE061A时钟电路
SPCE061A时钟电路采用晶体振荡器。下图为SPCE061A时钟电路的接线图。外接晶振采用32768Hz。
3.1.2.PLL锁相环
PLL电路的作用是将系统提供的实时时钟的基频(32768Hz)进行倍频,输出系统时钟Fosc
32768Hz晶振锁相环(PLL)系统时钟发生器频率:20.48M,24.576M,32.768M,40.96M,49.152Mb7b6b5Fosc(默认值24.576MHz)系统时钟选频P_SystemClock单元的第7,6,5位
3.1.3.看门狗Watchdog SPCE061A的清狗周期为0.75S;清看门狗操作寄存器:P_Watchdog_Clear(0x7012H)清狗操作:在每个0.75S的清狗周期里P_Watchdog_Clear写入0x0001。
3.1.4.低电压复位(LVR)
通过某种方式,使单片机内存各寄存器的值变为初始的操作称为复位。SPCE061A的复位方式为低电压复位。
3.1.5.I/O端口 OA口:
IOA0~IOA6:7路普通AD输入端口,IOA0~IOA7:触键唤醒功能
IOB口:
外部中断输入,串行接口、PWM输出等复用端口
3.1.6.时基与定时器
时基信号可提供常用的、现成的频率信号,完成部分定时器的功能
时间基准信号部分时基选频时基中断32768Hz RTCPLL倍频定时器/计数器Fosc时钟源 3.1.7.SPCE061A的定时器/计数器
递增计数方式,自动重载定时器/计数器初始值,输出4位可调脉宽比PWM信号,溢出频率/2的方波输出,多种时钟源 11
输入。
3.1.8.ADC、DAC SPCE061A的特色是其强大灵活的语音功能;而单片机对语音处理的支持,除了其处理能力外,还有片内集成的ADC、DAC;特别是集成有AGC电路的MIC通道。ADC转换过程:
启动自动方式 RDY=0SAR = 10 0000 0000BDAC0输出Vdac0与Vin逐次比较比较结束,RDY=1结果存入结果寄存器等待读取结果寄存器
3.2、超声波传感器
1.基本特性与参数指标
超声波传感器谐振频率:40KHz; 模组传感器工作电压:4.5V~9V 模组接口电压:4.5V~5.5V 2.主要功能
三种测距模式选择跳线J1(短距、中距、可调距):
短距:20cm~100cm左右(根据被测物表面材料决定),精度1cm;
中距:70cm~400cm左右(根据被测物表面材料决定); 可调:范围由可调节参数确定,当调节在合适的值时,最远测距700cm左右; 3.结构示意图
一般应用时,只需要用两条10PIN排线把J5与SPCE061A的IOB口低八位连接,J4与IOB口高八位连接,同时设置好J1、J2跳线就完成硬件的连接了。不同测距模式的选择只需改变测距模式跳线J1的连接方法即可。模组工作的性能与被测物表面材料有很大关系,如毛料、布料对超声波的反射率很小,会严重影响测量结果 实物图: 13
J1为选择工作模式,J2选择电源接口 4.电路原理图介绍:
超声波谐振频率调理电路
由单片机产生40KHz的方波,并通过模组接口(J4)送到模组的CD4049,而后面的CD4049则对40KHz频率信号进行调理,以使超声波传感器产生谐振。
超声波回波接收处理电路
超声波接收处理部分电路前级采用NE5532构成10000倍放大器,对接收信号进行放大;后级采用LM311比较器对接收信号进行调整,比较电压为LM311的3管脚的输入,可由J1跳线选择不同的比较电压以选择不同的测距模式。
测距程序流程图
超声波测距的功能函数流程图如图。用户只需进行六次测距操作,这六次的测量结果需要经过处理后才可得到最终的测距返回值,然后将返回值化成距离。
四
软件设计
4.1软件设计各模块
void RunTime2Hz(void);设置2HZ基频中断向量函数。
void OffTime2Hz(void);清2HZ基频中断向量函数。void Clear_WatchDog(void);清看门狗函数
unsigned int SP_GetCh(void);取键值函数 void delay2s(int timer)可调的延迟函数
4.2速度控制
速度控制用TIMERA的PWM输出控制,当它前进时设PWM为12/16,当它转弯时设为8/16。其代码为:*P_TimerA_Ctrl=0x0333;*P_TimerA_Data=0xff9f;
4.3障碍物检测
用TIMERB的TONT输出给超声波提供出射频率,并给它延迟一段时间,发射完时,清TIMERB,让它工作在计时方式,当计到10000时!没有收到回波,则说明前在无障碍。如果有收到回波则说明有障碍。
4.4看门狗
看门狗只要一定时间给其喂狗,就可以保证程序不会跑飞,跑飞就会自动复位。其代码就只有一句: *P_Watchdog_Clear = 0x0001;
4.5基频中断
采用2HZ的基频中断,实现实时控制;一次中断,中断时间为0。5S,其代码如下:
[P_INT_Ctrl] = r1;
INT IRQ;
//开中断
4.6程序设计流程图
五:测试数据、测试结果分析及结论
测试方法与仪器: 1.测试仪器
测试仪器包括数字万用表、信号发生器、示波器、直流稳压电源等。
2.测试方法
数字万用表主要用来测试各个IO口的状态;
信号发生器与示波器用于测试超声波传感器信号的接收与传输;
试验测试能不能完成固定避障。
结论:
经过了我们的努力,我们基本上能完上避障的功能!当然我们之后还有很长的路要走,在之后我们会自己做一个最小系统,此次我们更侧重于软件方面的设计。同时我们还要设计更多的外围电路,实现更多的功能。其中包括:红外光电检测用来检测旁边的物体;还有红外遥控器,用来控制小车的运行与停止;再加一个显示器,用来显示路程和时间等等。
附录一:
程序附录:
程序设计中包括:主程序,测距程序,中断程序组成;
1.主程序:
#include “SPCE061A.h” #include “ceju.h”
unsigned char INTflag;
//定时标识
unsigned int sum;
//2hz 计数器
1次为0。5秒 void RunTime2Hz(void);void OffTime2Hz(void);void Clear_WatchDog(void);void delay2s(int timer)
//设置基频为2HZ的中断,就是一次定时0。5S {
sum=timer;RunTime2Hz();
//运行中断
while(!INTflag)
{
Clear_WatchDog();//清看门狗
}
INTflag = 0;
OffTime2Hz();
//结束中断
} void delay2s(int timer);int main(void){ unsigned int Back_data;
*P_IOB_Dir=0x1f00;
IOB,IOB8~12同向输出
*P_IOB_Attrib=0x1f00;*P_IOB_Data=0x0000;INTflag = 0;Clear_WatchDog();
while(1){
*P_TimerA_Ctrl=0x0373;
*P_TimerA_Data=0xff9f;
这14/16
Back_data = measure_Times(0);if(Back_data==0)
//装距离 //
初
始
化
//清看门狗
//设前进PWM
//测距
//判断是否为0,22
为0则为前进
{
*P_TimerA_Ctrl=0x0373;
*P_TimerA_Data=0xff9f;
}
else if(Back_data
40CM,小于则进行倒车
{
*P_TimerA_Ctrl=0x006;
*P_IOB_Data=0x1000;
delay2s(0);
*P_IOB_Data=0x0100;
delay2s(3);
}
else if(Back_data
1M,小于则进行避障
{
*P_TimerA_Ctrl=0x0333;
*P_IOB_Data=0x0400;
delay2s(1);
*P_IOB_Data=0x0800;
delay2s(1);
//判断是否小于
//倒车
//前进 //判断是否小于//左转
//右转 23
*P_IOB_Data=0x0400;
//左转
delay2s(1);*P_TimerA_Ctrl=0x006;
//停止PWM运行
*P_IOB_Data=0x0000;
//停车
while(1)
{;}
}
else
Clear_WatchDog();
}
}
2.中断程序: #include “SPCE061A.h” #include “ceju.h”
void IRQ3(void)__attribute__((ISR));
void IRQ3(void){ *P_INT_Clear = 0x0100;
//
//IRQ中断服务程序 24
EXT1_IRQ_ult();
//调用超声波测距的外部中断服务程序 }
.TEXT.include SPCE061A.inc;.external _sum;.external _INTflag;.public _IRQ5;_IRQ5:
push r1,r4 to [sp];
r1 =0x0008;
test r1,[P_INT_Ctrl];
jnz L_4Hz;
r1 = 0x0004;
[P_INT_Clear] = r1;
r1 = [_sum]
r1 += 1;
//定时3秒的中断程序
// Timer A FIQ entrence
//清中断
//取时基信号量
cmp r1,4;
je loop0;
[_sum]=r1
//保存时基信号量
pop r1,r4 from [sp];
reti;
loop0:
r1 = 0x0001;
[_INTflag] = r1;
r1 = 0
[_sum] = r1 pop r1,r4 from [sp];
reti;
L_4Hz:
r1 = 0x0008;
[P_INT_Clear] = r1;
pop r1,r4 from [sp];reti;
//设置中断标识
//清中断 26
.external _sum;.include SPCE061A.inc;.CODE.public _Clear_WatchDog;_Clear_WatchDog:.PROC
R1=0x0001;
[P_Watchdog_Clear]=R1;
//清看门狗
retf;.ENDP
.public _RunTime2Hz;//初始化中断为2HZ定时中断源_RunTime2Hz:
.proc r1 = 0x0004;
[P_INT_Ctrl] = r1;
INT IRQ;
//开中断
retf.endp;
.public _OffTime2Hz;_OffTime2Hz:.proc
r1 = [P_INT_Ctrl]
r1 &= 0xfffb;
[P_INT_Ctrl] = r1;
r1 = 0x0000
[_sum] = r1;
retf;.endp;
3、测距程序
#include “SPCE061A.h” #define LONG_SEND_TIMER 40KHz信号发射时长
#define LONG_SEND_TIMER2 测距时的40KHz信号发射时长#define LONG_WAIT_DELAY 的防余波干扰延时时长
#define LONG_WAIT_DELAY2 测距时的防余波干扰延时时长
1000 3000
600 1500
//中距测距时的//中距测距的补充
//中距测距
//中距测距的补充
#define LONG_RES_ADD 补偿值
0x00B0 //中距测距的结果#define LONG_RES_ADD2 充测距时的结果补偿值
#define LOW_SEND_TIMER 40KHz信号发射时长 #define LOW_SEND_TIMER2
0x0220 //中距测距的补
250
//短距测距时的1000 //短距测距的补充测距时的40KHz信号发射时长 #define LOW_WAIT_DELAY 余波干扰延时时长
#define LOW_WAIT_DELAY2
400
//短距测距
180
//短距测距的防的补充测距时的防余波干扰延时时长 #define LOW_RES_ADD 果补偿值
#define LOW_RES_ADD2 测距时的结果补偿值
unsigned int Counter_buf;
//超声波测距当中,用于0x00B0
//短距测距的补充
0x0034
//短距测距的结保存TimerB计数的变量,相当于时长 unsigned int EXT1_IRQ_flag=0;
//外部中断标志变量,用于EXT1的IRQ中断程序和测距程序同步
void Delay_ult(unsigned int timers){ unsigned int i;for(i=0;i
__asm(“nop”);} } unsigned int Resoult_ult(unsigned int Counter){ unsigned int uiTemp;unsigned long ulTemp;ulTemp =(unsigned long)Counter*33500;度,以厘米为单位 ulTemp = ulTemp/196608;
ulTemp = ulTemp>>1;
//除二 uiTemp =(unsigned int)ulTemp;return uiTemp;} unsigned int measure2_ult(unsigned int type);unsigned int measure_ult(unsigned int type)
声波测距模组的测距程序,完成一次测距
//计算距离 //*以声音的速
// 超30
{
unsigned int Exit_flag = 1;unsigned int uiTemp;unsigned int uiResoult;unsigned int uiSend_Timer,uiWait_Timer,uiRes_Add;unsigned int uiSystem_Clock;uiSystem_Clock = *P_SystemClock;//将当前的系统时钟设置暂时保存起来 *P_SystemClock = 0x0088;
//将系统时钟设置为49MHz,分频比为1,强振模式 if(type)
//根据type即测距类型,选择不同的测距参数
{
} else {
uiSend_Timer = LOW_SEND_TIMER;uiWait_Timer = LOW_WAIT_DELAY;uiRes_Add = LOW_RES_ADD;
uiSend_Timer = LONG_SEND_TIMER;uiWait_Timer = LONG_WAIT_DELAY;uiRes_Add = LONG_RES_ADD;
} *P_TimerB_Data = 0xfed2;*P_TimerB_Ctrl = 0x03c0;
//发40KHz的信号触发超声波传感器
率 while(*P_TimerB_Data
//TrB 工作在192KHz频
//等待发送 //关定时器B 再打开TimerA的计数(来源于EXT1)
断
*P_INT_Ctrl = *P_INT_Ctrl_New|0x0100;*P_INT_Clear = 0xffff;__asm(“IRQ ON”);
//清除中断发生标志 //打开总中断使能
//TimerA的溢出中断{
} *P_INT_Clear = 0x0100;
//开中断前先清中
//以避开余波的干扰
*P_Watchdog_Clear = 0x0001;EXT1_IRQ_flag = 0;的标志变量置0
while(Exit_flag)
{ if(EXT1_IRQ_flag==1)
//当该变量在timerA的FIQ中断中被置1时表示接收到了回波
{ Exit_flag = 0;
//退出标示
Counter_buf = Counter_buf+uiRes_Add;//计数值加上一定的调整数据
uiResoult = Resoult_ult(Counter_buf);//对计数值进行处理,得出距离值
} if(*P_TimerB_Data>10000)
//如计数值大于10000,表示超时
{ Exit_flag = 0;
uiResoult = measure2_ult(type);//再进行一次补充的测距,将会加长40KHz信号发射的量
} } *P_TimerB_Ctrl = 0x0006;//停止定时器B uiTemp = *P_TimerB_Data;*P_Watchdog_Clear = 0x0001;*P_INT_Ctrl = *P_INT_Ctrl_New&(~0x0100);//关掉外部
中断
置
} void EXT1_IRQ_ult(void)
//超声波测距模组的测距程序的EXT1中断服务程序 {
Counter_buf = *P_TimerB_Data;*P_TimerB_Ctrl = 0x0006;
return uiResoult;__asm(“IRQ OFF”);
*P_SystemClock = uiSystem_Clock;//恢复系统时钟的设
//关掉总中断
*P_INT_Ctrl = *P_INT_Ctrl_New&(~0x0100);//关掉外部中断
*P_INT_Clear = 0xffff;EXT1_IRQ_flag = 1;
//清除中断发生标志
//通知测距程序,外部中断已发生 } unsigned int measure2_ult(unsigned int type)
//补充进行一次远距的测量,以保证能够获取测量结果 {
unsigned int Exit_flag = 1;
unsigned int uiResoult;unsigned int uiSend_Timer,uiWait_Timer,uiRes_Add;*P_TimerB_Ctrl = 0x0006;
*P_INT_Ctrl = *P_INT_Ctrl_New&(~0x0100);//关掉外部中断
__asm(“IRQ OFF”);
//关掉总中断
//清除掉中断发生标志 *P_INT_Clear = 0xffff;
if(type)
//根据type即测距类型,选择不同的测距参数
{
} else {
}
uiSend_Timer = LONG_SEND_TIMER2;uiWait_Timer = LONG_WAIT_DELAY2;uiRes_Add = LONG_RES_ADD2;uiSend_Timer = LOW_SEND_TIMER2;uiWait_Timer = LOW_WAIT_DELAY2;uiRes_Add = LOW_RES_ADD2;
*P_TimerB_Data = 0xfed2;*P_TimerB_Ctrl = 0x03c0;Delay_ult(uiSend_Timer);*P_TimerB_Ctrl = 0x0006;*P_TimerB_Data = 0x0000;*P_TimerB_Ctrl = 0x0001;
while(*P_TimerB_Data
*P_INT_Ctrl = *P_INT_Ctrl_New|0x0100;//打开外部中断 *P_INT_Clear = 0xffff;__asm(“IRQ ON”);
EXT1_IRQ_flag = 0;
//TimerA的溢出中断
//清除中断发生标志 //打开总中断使能 { } *P_Watchdog_Clear = 0x0001;的标志变量置0
while(Exit_flag){ if(EXT1_IRQ_flag==1)
//当该变量在timerA的FIQ中断中被置1时表示接收到了回波
{ Exit_flag = 0;
//exit Counter_buf = Counter_buf+uiRes_Add;//计数值加上一定的调整数据
uiResoult = Resoult_ult(Counter_buf);//对计数值进行处理,得出距离值
} if(*P_TimerB_Data>10000)
//如计数值大于10000,表示超时
} unsigned int measure_Times(unsigned int type)
//组合进行共6次的测距程序,包括对6次测量结果的取平均值处理 {
} {
} Exit_flag = 0;uiResoult = 0;
*P_TimerB_Ctrl = 0x0006;return uiResoult;unsigned int uiResoult=0,uiMeasure_Index=0,i;unsigned int uiTemp_buf[6],uiTemp;
unsigned int uiSystem_Clock;
for(;uiMeasure_Index
//循环进行四次测量
//进行一次测uiTemp = measure_ult(type);
量,测量类型由type决定
if(uiMeasure_Index==0)
//如果为本次测量的第一次测距,则直接保存在缓冲区第一个单元
uiTemp_buf[0] = uiTemp;
else {
//否,则对结果进行比较,进行排序,从大到小排
i = uiMeasure_Index;while(i){
if(uiTemp>uiTemp_buf[i-1]){
} else {
//以下为排序的代码
uiTemp_buf[i] = uiTemp_buf[i-1];uiTemp_buf[i-1] = uiTemp;
}
}
}
uiTemp_buf[i] = uiTemp;break;
//退出排序
i--;
//两次测量之间的延时等待,利用以下代码软仿真时的cycles数结合设置的CPUCLK进行计算,大概72ms uiSystem_Clock = *P_SystemClock;
//将之前的系统时钟的设置用变量保存
*P_SystemClock = 0x000b;
//
设
置
为24.576MHz 分频比为8
for(i=0;i
} *P_SystemClock = uiSystem_Clock;
//恢复系统时钟Delay_ult(1000);
//调用延时程序
*P_Watchdog_Clear = 0x0001;设置
} //此处延时结束
//对6次测距的结果进行处理
if(uiTemp_buf[5]==0){
//如果缓冲区中的最小的测距值为0,则采用中间4个数据进行平均
uiResoult
= uiTemp_buf[1]+uiTemp_buf[2]+uiTemp_buf[3]+uiTemp_buf[4];
} else {
//否则就取后5个数据uiResoult = uiResoult/4;进行平均
uiResoult
= uiTemp_buf[1]+uiTemp_buf[2]+uiTemp_buf[3]+uiTemp_buf[4]+uiTemp_buf[5];
} } return uiResoult;uiResoult = uiResoult/5;40