小车。红外避障源码笔记

本文详细解析了红外避障小车的源码,介绍了如何使用左右红外传感器进行障碍物检测,并通过不同的转向策略控制小车绕过障碍物。源码中包括GetVoidStatus函数用于获取障碍物状态,VoidRun函数用于判断并执行转向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码地址:红外避障源码

右红外传感器 /***************************************/ 左红外传感器

在这里插入图片描述

GetVoidStatus函数

#define BARRIER_Y 0 //有障碍物
#define BARRIER_N 1  //无障碍物

左右传感器同时检测,当左边红外检测到障碍物,left=1,当右边传感器检测到障碍物,right=2,因此我们就可以通过传感器来控制车子电机的转动
总共右三种情况:
case1:右转
case2:左转
case3:后退->左转或者右转90度,重新检测

char GetVoidStatus(void)
{
	char left=0,right=0;
	char count;
	/*********************************************/
	if(VOID_L_IO == BARRIER_Y)//PG2检测到有障碍物
	{
		count = 2;
		while(--count)//10ms 采集2次均要采集到前面障碍物信息,滤波
		{
			if(VOID_L_IO == BARRIER_N)
				break;
			Delayms(1);
		}
		if(count == 0) left = 1;
	}
	/****************************************/
	if(VOID_R_IO == BARRIER_Y)
	{
		count = 2;
		while(--count)//10ms 采集2次均要采集到前面障碍物信息,滤波
		{
			if(VOID_R_IO == BARRIER_N)
				break;
			Delayms(1);
		}
		if(count == 0) right = 2;
	}
	
	return left + right;
}

VoidRun函数判断转向

#define VOID_LEFT 1//左边检测到
#define VOID_RIGHT 2//右边检测到
#define VOID_BOTH 3 //两边都检测到
#define VOID_NONE 0//都没检测到
char ctrl_comm = COMM_STOP;//控制指令
char ctrl_comm_last = COMM_STOP;//上一次的指令
void VoidRun(void)
{
	char status;
	status = GetVoidStatus();
	
	switch(status)
	{
		case VOID_LEFT: 
			ctrl_comm = COMM_RIGHT;CarBack(); Delayms(500); CarLeft(); DelayCheck(500);
			break;
		case VOID_RIGHT:
			ctrl_comm = COMM_LEFT;CarBack(); Delayms(500); CarRight(); DelayCheck(500);	
			break;
		case VOID_BOTH:
			ctrl_comm = COMM_RIGHT;CarBack(); Delayms(700); CarRight(); DelayCheck(500);
			break;
		case VOID_NONE:
			ctrl_comm = COMM_UP;CarGo();
			break;
		default: break;
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值