GP2Y0E03夏普红外测距传感器简单使用

news/2025/3/19 22:39:02/

夏普红外测距传感器规格书引脚如下

 一共七个引脚,如果要改地址的话还需要用到第八个引脚(当时改地址试了半天,仔细一看数据手册还有第八个引脚),第八个引脚Vpp如下图所示

 和GP2Y0E03通讯是用IIC协议,数据手册上具体协议格式如下

 笔者使用STM32F103系列单片机IIC通讯代码如下

void GP2_SDA_Mode(GPIOMode_TypeDef  sdagpio_mode)
{GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin =GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = sdagpio_mode;GPIO_Init(GPIOB, &GPIO_InitStructure);
} 
void delay_us_us(u16 time)
{    u16 i=0;  while(time--){i=10;  while(i--) ;    }
}
void GP2_IIC_Start(void)
{GP2_IIC_SCL=0;GP2_SDA_Mode(GPIO_Mode_Out_OD);	GP2_IIC_SDA=1;	  	  GP2_IIC_SCL=1;delay_us_us(4);GP2_IIC_SDA=0;delay_us_us(4);GP2_IIC_SCL=0;
}void GP2_IIC_Stop(void)
{GP2_IIC_SCL=0;GP2_SDA_Mode(GPIO_Mode_Out_OD);	GP2_IIC_SCL=0;GP2_IIC_SDA=0;GP2_IIC_SCL=1; delay_us_us(4);GP2_IIC_SDA=1;delay_us_us(4);	GP2_IIC_SCL=0;	
}
uint8_t GP2_IIC_Wait_Ack(void)
{uint8_t ucErrTime=0;GP2_SDA_Mode(GPIO_Mode_IN_FLOATING);	   delay_us_us(4);	   GP2_IIC_SCL=1;delay_us_us(4);	while(GP2_READ_SDA){ucErrTime++;if(ucErrTime>250){GP2_IIC_Stop();return 1;}}GP2_IIC_SCL=0;//ʱÖÓÊä³ö0 	   return 0;  
}
void GP2_IIC_Ack(void)
{GP2_IIC_SCL=0;GP2_SDA_Mode(GPIO_Mode_Out_OD);	GP2_IIC_SDA=0;delay_us_us(4);GP2_IIC_SCL=1;delay_us_us(4);GP2_IIC_SCL=0;
}
void GP2_IIC_NAck(void){GP2_IIC_SCL=0;GP2_SDA_Mode(GPIO_Mode_Out_OD);	GP2_IIC_SDA=1;delay_us_us(4);GP2_IIC_SCL=1;delay_us_us(4);GP2_IIC_SCL=0;
}
void GP2_IIC_Send_Byte(uint8_t txd){                        uint8_t t;   GP2_SDA_Mode(GPIO_Mode_Out_OD);	 	    GP2_IIC_SCL=0;for(t=0;t<8;t++){              if(txd&0x80)GP2_IIC_SDA=1;			else GP2_IIC_SDA=0;				txd<<=1; 	  delay_us_us(4);  GP2_IIC_SCL=1;delay_us_us(4); GP2_IIC_SCL=0;	delay_us_us(4);}	 
} 
uint8_t GP2_IIC_Read_Byte(void){unsigned char i,receive=0;GP2_SDA_Mode(GPIO_Mode_IN_FLOATING);	        delay_us_us(4);for(i=0;i<8;i++ ){receive<<=1;		GP2_IIC_SCL=1;delay_us_us(4);if(GP2_READ_SDA)receive |= 0x01; delay_us_us(4); //1GP2_IIC_SCL=0; delay_us_us(4); //1}	return receive;
}
uint8_t GP2_IIC_Write_1Byte(uint8_t SlaveAddress,uint8_t REG_Address,uint8_t REG_data)
{GP2_IIC_Start();GP2_IIC_Send_Byte(SlaveAddress);if(GP2_IIC_Wait_Ack()){GP2_IIC_Stop();//ÊÍ·Å×ÜÏßreturn 1;//ûӦ´ðÔòÍ˳ö}GP2_IIC_Send_Byte(REG_Address);GP2_IIC_Wait_Ack();	delay_us_us(5);GP2_IIC_Send_Byte(REG_data);GP2_IIC_Wait_Ack();	GP2_IIC_Stop();return 0;
}
uint8_t GP2_IIC_Read_1Byte(uint8_t SlaveAddress, uint8_t REG_Address)
{uint8_t REG_data; GP2_IIC_Start();GP2_IIC_Send_Byte(SlaveAddress);if(GP2_IIC_Wait_Ack()){GP2_IIC_Stop();//ÊÍ·Å×ÜÏßreturn 1;//ûӦ´ðÔòÍ˳ö}		GP2_IIC_Send_Byte(REG_Address);GP2_IIC_Wait_Ack();GP2_IIC_Stop();//ÊÍ·Å×ÜÏßdelay_us_us(5);GP2_IIC_Start(); GP2_IIC_Send_Byte(SlaveAddress|0x01);GP2_IIC_Wait_Ack();REG_data = GP2_IIC_Read_Byte();GP2_IIC_Stop();return REG_data;
}uint8_t GP2_I2C_Read_nByte(uint8_t SlaveAddress, uint8_t REG_Address, uint8_t *buf, uint16_t len)
{GP2_IIC_Start();GP2_IIC_Send_Byte(SlaveAddress);if(GP2_IIC_Wait_Ack()) {GP2_IIC_Stop();//ÊÍ·Å×ÜÏßreturn 1;//ûӦ´ðÔòÍ˳ö}GP2_IIC_Send_Byte(REG_Address);GP2_IIC_Wait_Ack();GP2_IIC_Stop();//ÊÍ·Å×ÜÏßdelay_us_us(5);GP2_IIC_Start(); GP2_IIC_Send_Byte(SlaveAddress|0x01);GP2_IIC_Wait_Ack();while(len){*buf = GP2_IIC_Read_Byte();if(1 == len){GP2_IIC_NAck();}else{GP2_IIC_Ack();}buf++;len--;}GP2_IIC_Stop();return STATUS_OK;
}
uint8_t GP2_I2C_Write_nByte(uint8_t SlaveAddress, uint8_t REG_Address, uint8_t *buf, uint16_t len)
{GP2_IIC_Start();GP2_IIC_Send_Byte(SlaveAddress);if(GP2_IIC_Wait_Ack()) {GP2_IIC_Stop();return 1;}GP2_IIC_Send_Byte(REG_Address);GP2_IIC_Wait_Ack();while(len--){GP2_IIC_Send_Byte(*buf++);GP2_IIC_Wait_Ack();}GP2_IIC_Stop();return STATUS_OK;
}

PS:使用时请注意镜面反射的影响,如果不改地址使用多个传感器模块,需控制使能脚依次读取数据


http://www.ppmy.cn/news/510949.html

相关文章

夏普服务器安装系统,夏普云服务器

夏普云服务器 内容精选 换一换 弹性云服务器(Elastic Cloud Server)是一种可随时自动获取、计算能力可弹性伸缩的云服务器&#xff0c;可帮助您打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率。 通过创建应用&#xff0c;将待…

夏普的无边框技术

最新发布的AQUOS Crystal实现了无边框的效果&#xff0c;其实还是有点边框的&#xff0c;只是边框非常小。 如下图所示&#xff1a; 用的是两种技术&#xff1a;「窄框液晶面板」和「面板切边后形成的光学镜头效果」&#xff0c;具体不详。

Java Web框架对比:选择适合你的项目

导言 选择合适的Java Web框架是开发成功的关键之一。本文将详细对比几个常见的Java Web框架&#xff0c;包括Spring MVC、JavaServer Faces (JSF)、Struts、Play Framework、Apache Wicket和Vaadin&#xff0c;并分析它们的特点、优缺点&#xff0c;以帮助您做出明智的选择。 …

NUCLEO-F411RE RT-Thread 体验 (7) - GCC环境外部中断的使用

NUCLEO-F411RE RT-Thread 体验 (7) - GCC环境外部中断的使用 1、简述 NUCLEO-F411RE开发版的蓝色按键对应PC13管脚&#xff0c;我们将其配成外部中断的方式&#xff0c;并设置低电平触发。 2、测试代码 驱动其实对应的还是之前移植好的pin驱动&#xff0c;所以这里不需要修…

魅蓝3 android底层,因各种不稳定 魅族要和YunOS说再见了,魅蓝3将转安卓底层

魅友都知道&#xff0c;魅族的魅蓝系列手机&#xff0c;几乎大部分机型都采用的是YunOS底层的Flyme系统&#xff0c;很多人用过一次就不想再用了&#xff0c;非常坑&#xff0c;用过的应该不用我多说有多坑。魅族和阿里YunOS的合作时间还是挺长的&#xff0c;为此还召开了战略合…

智能AI越用越快 魅族魅蓝Note5抢鲜适配Flyme6

在国产系统之中&#xff0c;魅族Flyme肯定算得上是一个相当出色的定制系统。早前&#xff0c;魅族推出了全新的Flyme6系统&#xff0c;在系统底层与Android M深度融合&#xff0c;加入了三大平行空间与全新色彩体系等功能。当然&#xff0c;最显著的提升就是加入了越用越快的On…

魅族Flyme6已适配魅蓝Note5智能AI引擎惊喜不断

魅族针对年轻用户推出的新品魅蓝Note5近期成为了千元市场最为火热的机型&#xff0c;起售价仅899元的魅蓝Note5采用HelioP10处理器&#xff0c;电池容量4000mAh支持18W快充&#xff0c;综合质素堪称出色。昨天&#xff0c;有网友放出消息&#xff0c;魅蓝Note5目前已经完成了Fl…

魅蓝Note5适配魅族Flyme6 智能AI加速越用越快

上月底&#xff0c;魅族正式推出了全新的Flyme6系统&#xff0c;Flyme系统时隔一年半再度迎来了大规模更新。魅族革新性的One Mind智能思维引擎的加入无疑是Flyme6的一大亮点&#xff0c;其越用越快的体验打破了Android系统下由于系统缓存而卡顿等问题。有消息称&#xff0c;目…