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

一共七个引脚,如果要改地址的话还需要用到第八个引脚(当时改地址试了半天,仔细一看数据手册还有第八个引脚),第八个引脚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:使用时请注意镜面反射的影响,如果不改地址使用多个传感器模块,需控制使能脚依次读取数据

GP2Y0E03夏普红外测距传感器简单使用相关推荐

  1. Arduino与ROS通讯的示例代码HelloWorld改写成夏普红外测距传感器数据传输的代码

    改写详情: 其实就是在原来的代码的基础上加了个红外测距传感器的代码,然后把红外测距传感器的double类型的数据用dtostrf函数转换成了char类型的字符串数组.并没有对消息类型进行任何的更改,仅 ...

  2. 夏普GP2Y0AYK0F红外测距传感器在STM32F103C8T6中的使用及电压转换公式。

    夏普GP2Y0AYK0F红外测距传感器在STM32F103C8T6中的使用及电压转换公式. 1.夏普GP2Y0AYK0F红外测距传感器介绍 参数介绍 品牌 夏普SHARP 型号 GP2Y0A21YK0 ...

  3. Arduino + GP2D12红外测距传感器+LCD1602

    一: GP2Y0A21YKIR Sensor是日本夏普公司推出的一款性价比高.最常用的红外测距传感器.其与GP2D12测量射程相同,但探测面积略有增加,可用来对物体的距离进行测量,实现轮式机器人的避障 ...

  4. 第十七篇、基于Arduino uno,获取cp2d12红外测距传感器的原始值和距离值——结果导向

    0.结果 说明:先来看看串口调试助手显示的结果,第一个值是原始的模拟电压值,第二个值是距离值,如果是你想要的,可以接着往下看. 1.外观 说明:虽然红外测距传感器形态各异,但是原理和代码都是适用的,只 ...

  5. arduino学习笔记十--Arduino 读红外测距传感器

    Arduino 读红外测距传感器GP2D12 实例,仅供大家参考! 器材:Arduino 开发板,GP2D12,1602 字符液晶,连接线若干. GP2D12 是日本SHARP 公司生产的红外距离传感 ...

  6. 红外测距传感器GP2D12与STM32单片机程序,滤波算法

    红外测距传感器GP2D12与STM32单片机程序,滤波算法,设计步骤和代码流程清晰非常实用. 是机器人中最常用的红外测距传感器. 程序源码注释详细,非常适合单片机开发人员. ID:7887031794 ...

  7. 距离感应音乐玩具计算机系统设计,可编程机器人玩具程小奔红外测距传感器测量距离案例...

    文:邱老师 上次课程我们学习了用速度乘以时间计算程小奔移动距离的方法.那么,它能否测量还没有走过的路程距离呢?答案是可以的. 程小奔编程机器人集合了多种传感器,今天我们要使用程小奔机器人的红外测距传感 ...

  8. 红外测距传感器(GP2D12、74HC595、ADC0832)

    红外测距传感器GP2D12 应用 要做的项目 原理 仿真效果图 74HC595的作用(串入) 项目目录 ADC0832X.c(延用之前的,但注意CS.CLK.DIO所对应的端口发生了变化) 74HC5 ...

  9. K210与多个VL53L0X红外测距传感器的iic应用

    前言:VL53L0X是个机灵的传感器,有使用手册,但没寄存器手册\狗头,写这篇博客记下,以防止后面再次遇坑. 使用说明 用户手册 引脚说明: IIC_SCL: IIC通信时钟线 IIC_SDA: II ...

最新文章

  1. 致远M1移动协同软件
  2. C语言实现数组Array(附完整源码)
  3. linux我ll查不到usr,Linux学习-文件查寻
  4. php mysql 写法_php 类的写法
  5. mysql的查表语句_mysql查表语句_MySQL
  6. hdu.1254.推箱子(bfs + 优先队列)
  7. 【实践驱动开发3-006】TI WL1835MODCOM8 在android的移植 - SDIO wifi驱动的注册步骤
  8. php-fpm的安装与测试
  9. Java多线程学习九:怎样确定线程数量及CPU 核心数和线程数的关系||如何定制自己的线程池
  10. Hibernate学习(二)持久化类,主键生成策略、一级缓存、事务
  11. 【定位问题】基于matlab GUI RSSI无线定位【含Matlab源码 1054期】
  12. 你不可错过的Java学习资源清单
  13. 软件评测师备考详细知识点
  14. Oracle12c设置PDB企业管理器登录端口
  15. 查询具体到时分秒的时间段数据(查询昨天的下午四点到今天的下午四点的数据)
  16. 微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)
  17. 这341句话,这么美,那么伤。
  18. 惊蛰时节,最好看的微信公众号图文排版,全在这里了
  19. golang的乐观锁与悲观锁
  20. 为什么学习Linux系统?

热门文章

  1. Intel RealSense D455 深度相机
  2. 为何都喜欢喝酱香型白酒,酱香型白酒和浓香型白酒有何区别? - 知乎
  3. Process: 23905 ExecStart=/usr/bin/kubelet (code=exited, status=1/FAILURE)
  4. windows安装绿色版Redis
  5. Copying DNA 复制DNA
  6. 从开源到众包---写在2015“程序员”节
  7. 高等数学-对无穷小无穷大的理解
  8. Android基础知识 - 碎片
  9. SystemVerilog调度机制与一些现象的思考
  10. matlab 矩阵旋转变换矩阵,matlab 矩阵与线性变换与计算.ppt