基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(3)----修改设备地址

news2024/12/23 9:52:15

基于STM32CUBEMX驱动TOF模块VL6180与VL6180X----3.修改设备地址

  • 概述
  • 修改设备地址
  • 主程序
  • 测试结果

概述

本章主要介绍如何修改VL6180X传感器的I2C地址,并成功驱动设备以使用新的地址。VL6180X是一种多功能、高性能的接近和环境光传感器,常用于测量物体与传感器之间的距离、检测物体的接近程度以及测量环境光强度等应用。
在某些情况下,可能需要在同一I2C总线上使用多个VL6180X传感器,或与其他I2C设备共享总线资源。由于每个VL6180X传感器具有默认的固定I2C地址,这可能导致地址冲突,从而阻碍多个传感器的同时使用。为了解决这个问题,可以通过修改传感器的I2C地址来避免冲突,并使其能够在同一总线上与其他设备共存。
修改VL6180X传感器的I2C地址,通过配置传感器内部寄存器来修改I2C地址。将提供具体的寄存器配置值和步骤,确保能够成功更改传感器的地址。然后驱动新地址的VL6180X传感器,使用新的I2C地址与VL6180X传感器进行通信。
在这里插入图片描述

修改设备地址

VL6180X使用I²C总线进行通信。默认情况下,VL6180X的7位地址为0x29。然而,为了避免地址冲突并允许多个传感器共享相同的I2C总线,用户可以通过向寄存器I2C_SLAVE__DEVICE_ADDRESS(寄存器地址为0x212)写入自定义的7位地址来修改传感器的地址。
在使用I2C总线和修改传感器地址时注意以下事项:确保正确连接上拉电阻、避免短路或接线错误、提供稳定的电源供应等。
在这里插入图片描述

查看寄存器I2C_SLAVE__DEVICE_ADDRESS {0x212}可以得知每次上电之后地址会恢复为初始值。

在这里插入图片描述

首先,找到并打开VL6180.h文件,该文件包含了VL6180X传感器的相关定义和配置。
在VL6180.h文件中,可以定义4个设备的地址常量,分别表示不同的传感器。例如,可以使用以下方式定义地址常量:

#define VL6180X_DEFAULT_I2C_ADDR1 0x29  ///< The fixed I2C addres
#define VL6180X_DEFAULT_I2C_ADDR2 0x2A  ///< The fixed I2C addres
#define VL6180X_DEFAULT_I2C_ADDR3 0x2B  ///< The fixed I2C addres
#define VL6180X_DEFAULT_I2C_ADDR4 0x2C  ///< The fixed I2C addres

这里的地址值是根据实际需求和硬件连接情况选择的,确保每个设备具有唯一的地址。
通过使用定义的设备地址常量,可以轻松地管理和操作多个VL6180X传感器。
首先使用VL6180X_Init函数初始化传感器,接下来通过调用VL6180X_SetDeviceAddress函数来修改设备地址。这个函数需要两个参数:旧的设备地址(即初始的设备地址)和新的设备地址(你希望将传感器的地址修改为的值)。

  /* USER CODE BEGIN 2 */

	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);	
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);	

	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);	
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);	

	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);	
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);	
	
	
//VL6180_4
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);	
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

	HAL_Delay(1);
	VL6180X_Init(VL6180X_DEFAULT_I2C_ADDR1);
/************修改VL6180_4地址为VL6180X_DEFAULT_I2C_ADDR2(0x2A)*********************/
	VL6180X_WriteByte(VL6180X_DEFAULT_I2C_ADDR1,0x0212,VL6180X_DEFAULT_I2C_ADDR4);
//	HAL_Delay(100);
	uint8_t ii=VL6180X_ReadByte(VL6180X_DEFAULT_I2C_ADDR4,0x0212);	
	printf("地址为=0x%X\n",ii);		
	VL6180x_UpscaleSetScaling(VL6180X_DEFAULT_I2C_ADDR4,3);//缩放x3
	uint8_t id=VL6180X_Read_ID(VL6180X_DEFAULT_I2C_ADDR4);
	printf("id=%d\n",id);	


  /* USER CODE END 2 */

主程序

在主程序的while循环中,使用VL6180X_Read_Range函数从传感器读取距离数据。这个函数需要传入设备的新地址VL6180X_DEFAULT_I2C_ADDR4作为参数。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
		VL6180_L1=VL6180X_Read_Range(VL6180X_DEFAULT_I2C_ADDR4);

		printf("VL6180_L1=%dmm\n",VL6180_L1*3);
		HAL_Delay(1000);			
		
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

测试结果

测试距离结果如下所示。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在海外进行A/B测试

A/B测试是对应用的各个版本进行实验&#xff0c;以分析用户如何与其交互的有效过程&#xff0c;它能够帮助我们改进关键指标&#xff0c;例如参与度或应用内购买&#xff0c;以及推出新功能&#xff0c;从而最大限度地降低大规模流失用户的风险。 A/B测试和ASO优化通常适用于应…

唐僧的项目总结报告,我是真服了

早上好&#xff0c;我是老原。 上个月给大家更新了一篇项目管理案例——西天取经。 由于该项目的亏损必须要裁掉团队中的其中一人&#xff0c;究竟该裁掉谁&#xff0c;大家也是讨论的非常激烈&#xff0c;各有各的建议。 鉴于项目已经成功交付&#xff0c;唐僧作为这个项目…

基于51单片机和proteus的智能加湿器设计

此系统是基于51单片机和proteus的仿真设计&#xff0c;功能如下&#xff1a; 1. LCD1602实时显示环境温湿度。 2. 系统分为自动/手动模式&#xff0c;自动模式下系统根据读取的湿度值和设定的湿度值自动运行&#xff0c; 手动模式下使用按键启动/停止设备。 3. 湿度阈值可通…

基于 jmeter 和 shell 的接口性能自动化

目录 前言&#xff1a; 1. 总体需求 2. 实现流程 3.准备工作 4.具体实现 4.1 用例执行 主流程脚本 4.2 服务器监控 监控脚本&#xff1a; 服务器监控脚本 4.3 生成 html 报告 html 样式表 发邮件脚本 前言&#xff1a; 基于JMeter和Shell的接口性能自动化是一种有…

SpringBoot 项目使用 Redis 对用户IP进行接口限流

本文主要参考了该篇文章&#xff1a;https://www.zhihu.com/question/586213782/answer/3038040317?utm_id0 文章目录 一、思路1.1 固定时间段&#xff08;旧思路&#xff09;1.1.1 思路描述1.1.2 思路缺陷 1.2 滑动窗口&#xff08;新思路&#xff09;1.2.1 思路描述1.2.2 Re…

ELK 企业级日志分析系统(二)

ELK 一、FilebeatELK 部署二、logstash的使用grok正则捕获插件mutate 数据修改插件multiline 多行合并插件date 时间处理插件 一、FilebeatELK 部署 Node1节点&#xff08;2C/4G&#xff09;&#xff1a;node1/192.168.136.52 Elasticsearch Node2节点&#xff08;2C/4G&#…

第7集丨JavaScript 中函数——概述

目录 一、函数概览二、函数定义2.1 函数声明 (函数语句)2.2 函数表达式 (function expression)2.3 匿名函数立即执行2.4 函数生成器声明 (function* 语句)2.5 函数生成器表达式 (function*表达式)2.6 箭头函数表达式 (>)2.7 Function构造函数2.8 生成器函数的构造函数 三、函…

C#实现将小数值四舍五入为整数

一、需求说明 在项目的开发中&#xff0c;遇到一些除法计算内容会产生小数值&#xff0c;但是又需要根据项目的实际情况将这些小数内容化为整数&#xff0c;方便后续内容的实现。 二、需求分析 将小数内容转为整数【但是转为小数又分为几种情况】&#xff1a; ①将小数取为下…

银河麒麟服务器v10 sp1 部署 mysql 客户端工具 DBeaver

上一篇&#xff1a;银河麒麟服务器v10 sp1 安装mysql_csdn_aspnet的博客-CSDN博客 DBeaver 是数据库管理器的客户端&#xff0c;它允许以舒适的方式管理数据库实例的数据和选项。DBeaver 支持任何具有 JDBC 驱动程序的数据库 – MySQL/MariaDB、PostgreSQL、Oracle、DB2 LUW、…

性能测试工具 Loadrunner 和 Jmeter 测试结果大 PK

目录 前言&#xff1a; 测试一&#xff1a;1 个用户陆续执行登录操作&#xff0c;迭代 100 次&#xff0c;运行完就结束 测试二&#xff1a;50 个用户并发执行登录操作&#xff08;有集合点&#xff09; 前言&#xff1a; 性能测试工具LoadRunner和JMeter都是流行的工具&am…

ASP.net 配置CSP

ASP.net 开启全局CSP配置 <add name"Content-Security-Policy" value"default-src self; script-src self unsafe-inline unsafe-eval http://seal.digicert.com; style-src self unsafe-inline;" />在web.config中添加该行配置即可 配置完成后&am…

Im6ull 系统移植之 命令行

一 系统移植 系统移植 主要分四个不分由系统启动流程决定 U-Boot的移植 Linux内核的移植 根文件系统的构建系统烧写 1.1 交叉编译环境 交叉编译器有很多种&#xff0c;我们使用 Linaro 出品的交叉编译器&#xff0c; Linaro 是一间非营利性质的开 放源代码软件工程公…

LeetCode[11]盛水最多的容器

难度&#xff1a;Medium 题目&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 …

enreka使用错误

错误 java.net.UnknownHostException: INVENTORYSERVICE 分析&解决&#xff1a; 这里的请求执行错误 但eureka可以找到服务 手动创建RestTemlate到容器中&#xff0c;未加LoadBalanced注解 加上注解后重试&#xff0c;成功

在linux服务器上的基础操作

1.查看该文件最后两行的记录 tail -n 2 book.txt2.查找文本中的内容 grep info book.txt3.查找内容的上下文本内容 $ grep -C 2 info book.txt

leetcode 701. 二叉搜索树中的插入操作

2023.7.12 比较简单&#xff0c;不多说直接看代码&#xff1a; 迭代法&#xff1a; class Solution { public:TreeNode* insertIntoBST(TreeNode* root, int val) {//树为空的情况if(rootnullptr){TreeNode* node new TreeNode(val);return node;}//需要一个pre节点指向父节…

Echart 数据更新了,X轴或者Y轴显示不变化的问题

应用场景&#xff1a;点击不同的图例&#xff0c;显示不同的X轴或者Y轴的图表 问题&#xff1a;数据打印更新了&#xff0c;Y轴仍然不变。 点第一个legend块&#xff0c;Y轴应该[名称1, 名称2, 名称3, 名称4, 名称5, 名称6, 名称7, 名称8], 点第二个legend块&#xff0c;Y轴应…

C#编码规范

一、 命名惯例和规范 注&#xff1a; Pascal&#xff1a;大小写形式&#xff0d;所有单词第一个字母大写&#xff0c;其他字母小写。 驼峰式&#xff1a;大小写形式&#xff0d;除了第一个单词&#xff0c;所有单词第一个字母大写&#xff0c;其他字母小写。 1&#xff1a;类…

Java 动态规划 Leetcode 213. 打家劫舍 II

代码展示&#xff1a; class Solution {public int rob(int[] nums) {int nnums.length;return Math.max(nums[0]childRob(nums,2,n-2),childRob(nums,1,n-1));}public int childRob(int[]nums,int left,int right){if(left>right){return 0;}int nnums.length;//创建数组i…

Unity基础 物理系统 铰链关节 Hinge Joint

铰链关节是一种模拟物理系统中的连接方式&#xff0c;它允许两个物体围绕一个共同的轴点旋转。这种连接方式可以用于模拟门、摆钟、机器人手臂等各种物理运动。 Connected Body&#xff08;连接体&#xff09;&#xff1a;这是铰链关节连接的另一个刚体。通过设置这个属性&…