TOF开发新篇章:VL53L8CX系列深度解读,吸引你的每一刻。

2024-06-21

概要:本文介绍如何使用VL53L8CX传感器结合运动指示器和阈值检测功能,实现对特定场景的精确监控。通过配置传感器分辨率、测距模式、频率和集成时间,并设置检测阈值,该程序能捕获并显示1-2米范围内超过阈值的运动事件数据。提供了开发板准备、串口与I2C配置、STM32CubeMX设置、串口重定向、代码配置等详细步骤,并附有视频教程和源码下载链接。

**精彩预览**

在这片信息的海洋中,我们将带您领略一段非凡的旅程。无需复杂的导言,直接进入那令人心驰神往的领域。这里,每一个细节都经过精心打磨,每一句话都承载着深深的情感与思考。我们深知,文字的力量足以跨越时空,触动人心。

无需提及背后的辛勤付出,因为每一份努力都已经融入这字里行间。我们专)

/* USER CODE BEGIN Includes */
#include "stdio.h"

#include "custom_ranging_sensor.h"
#include "vl53l8cx_plugin_motion_indicator.h"
/* USER CODE END Includes */

**函数与变量:编织代码的魔法之源**

在编程的浩瀚宇宙中,函数与变量犹如两位默契的舞者,在代码的舞台上优雅地演绎着无尽的魔法。它们不仅是程序运行的基石,更是赋予代码生命力的源泉。

**函数**——那位深藏不露的魔术师,拥有强大的魔法力量。它可以将复杂的操作封装成一个个独立的单元,只需一声召唤(函数调用),便能施展出令人惊叹的魔法效果。无论是数据的处理、逻辑的运算,还是界面的渲染,函数都能轻松应对,让代码更加清晰、高效。

而**变量**——则是那位灵活多变的舞者,在代码的舞台上尽情挥洒。它可以存储各种类型的数据,如数字、文本、图片等,为程序提供丰富的素材。变量的名字就像它的标签,让我们能够轻松地识别和使用它。通过改变变量的值,我们可以让程序展现出不同的面貌,实现各种神奇的功能。

在编程的世界里,函数与变量相互依存、相互成就。它们共同编织着代码的魔法,让程序在数字世界中焕发出勃勃生机。无论你是编程新手还是资深开发者,掌握函数与变量的奥秘,都将为你的编程之路增添无尽的魅力与可能。

/* USER CODE BEGIN PFP */
int fputc(int ch, FILE *f){
	HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
	return ch;
}




/* USER CODE END PFP */

**引领未来,启动TOF初始化之旅**

在科技的浪潮中,我们勇敢地迈出了关键的一步——**添加TOF初始化**。这不仅是一个简单的操作,更是对未来科技趋势的精准把握和引领。

TOF初始化的核心,在于**配置运动指示器**,为设备的动态性能赋予更强大的生命力。通过精心调校,我们让每一个细微的动作都更加流畅、精准,为用户带来前所未有的体验。

在这个充满变革的时代,我们始终坚守初心,不断探索、创新。TOF初始化的加入,是我们对用户承诺的践行,更是对未来科技发展的坚定信念。让我们携手共进,开启这场引领未来的TOF初始化之旅!

  /* USER CODE BEGIN 2 */

	uint8_t 				status, isReady, i;
	VL53L8CX_Motion_Configuration 	motion_config;	/* 运动配置 */
	VL53L8CX_Object_t *pL8obj = CUSTOM_RANGING_CompObj[CUSTOM_VL53L8CX];
	VL53L8CX_ResultsData 	Results;		/* 来自VL53L8CX的结果数据 */

	/*********************************/
	/*   配置运动指示器               */
	/*********************************/

	/* 使用4x4分辨率初始化运动指示器 */
	status = vl53l8cx_motion_indicator_init(&pL8obj->Dev, &motion_config, VL53L8CX_RESOLUTION_8X8);
	if(status)
	{
		printf("运动指示器初始化失败,状态码 : %un", status);
		return status;
	}

	/* (可选) 设置用于检测运动的最小和最大距离。注意距离的限制 */
	status = vl53l8cx_motion_indicator_set_distance_motion(&pL8obj->Dev, &motion_config, 1000, 2000);
	if(status)
	{
		printf("设置运动检测距离失败,状态码 : %un", status);
		return status;
	}

	/* 如果用户需要更改分辨率,则也需要更新运动指示器的分辨率(此部分已注释) */
	//status = vl53l5cx_set_resolution(&Dev, VL53L5CX_RESOLUTION_4X4);
	//status = vl53l5cx_motion_indicator_set_resolution(&Dev, &motion_config, VL53L5CX_RESOLUTION_4X4);

	/* 将设备设置为自主模式,并设置较小的集成时间以降低功耗 */
	status = vl53l8cx_set_resolution(&pL8obj->Dev, VL53L8CX_RESOLUTION_8X8);
	status = vl53l8cx_set_ranging_mode(&pL8obj->Dev, VL53L8CX_RANGING_MODE_AUTONOMOUS);
	status = vl53l8cx_set_ranging_frequency_hz(&pL8obj->Dev, 2);
	status = vl53l8cx_set_integration_time_ms(&pL8obj->Dev, 10);	
	

	/*********************************/
	/*   配置检测阈值                 */
	/*********************************/

	/* 对于8x8的分辨率,我们希望为每个区域设置一个阈值 */
	VL53L8CX_DetectionThresholds thresholds[VL53L8CX_NB_THRESHOLDS];

	/* 将所有阈值设置为0 */
	memset(&thresholds, 0, sizeof(thresholds));

	/* 为所有64个区域设置阈值 */
	for(i = 0; i < 64; i++){
		thresholds[i].zone_num = i;
		thresholds[i].measurement = VL53L8CX_MOTION_INDICATOR;
		thresholds[i].type = VL53L8CX_GREATER_THAN_MAX_CHECKER;
		thresholds[i].mathematic_operation = VL53L8CX_OPERATION_NONE;

		/* 示例值44,超过此值的运动将被认为是移动 */
		thresholds[i].param_low_thresh = 44;
		thresholds[i].param_high_thresh = 44;
	}

	/* 明确标记最后一个阈值。因为我们有64个检查器,所以最后一个是第63个 */
	thresholds[63].zone_num = VL53L8CX_LAST_THRESHOLD | thresholds[63].zone_num;

	/* 将阈值数组发送到传感器 */
	vl53l8cx_set_detection_thresholds(&pL8obj- >Dev, thresholds);

	/* 启用检测阈值 */
	vl53l8cx_set_detection_thresholds_enable(&pL8obj->Dev, 1);	


	/* 开始测距 */
	status = vl53l8cx_start_ranging(&pL8obj->Dev);
	printf("等待在1m和2m之间的视场中发生的运动...n");	
  /* USER CODE END 2 */

**魅力绽放的核心舞台:主程序**

在数字世界的浩瀚宇宙中,有一个神秘而强大的存在,它如同宇宙的心脏,驱动着无数程序与数据的跳动——那就是我们的主程序。它不仅是技术的结晶,更是智慧的象征,它用精密的代码编织出一个又一个精彩纷呈的虚拟世界。

在这里,主程序不仅扮演着关键角色,更是创新与进步的源泉。它汇聚了最尖端的科技力量,引领着未来的发展方向。每一个指令、每一个函数,都蕴含着无尽的智慧与创意,它们共同构筑起一个充满活力与创造力的数字王国。

当我们沉浸在这个由主程序驱动的世界中,仿佛能够感受到它的呼吸与心跳。它时而温柔如水,轻轻拂过我们的心灵;时而激昂如火,点燃我们内心的激情。它用独特的方式与我们交流,让我们在数字世界中畅游、探索、成长。

主程序,这个充满魅力的核心舞台,正等待着我们去发现它的更多奥秘。让我们携手共进,在这个充满无限可能的数字世界中创造属于我们的辉煌!

当我们的系统运行时,它背后的核心机制正忙碌地工作着,确保数据的准确性和实时性。这一过程的核心,便是我们的主程序,它像一个精密的指挥官,时刻关注着`isReady`位状态,以确保数据在最佳的时刻被捕获和利用。不仅如此,主程序还具备对INT的IO状态的敏锐感知能力,使得整个系统的运行更加流畅和高效。无需过多的人为干预,我们的系统便能自动判断数据的准备状态,让每一次操作都准确无误,充满力量。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	if(HAL_GPIO_ReadPin  ( GPIOA, GPIO_PIN_11) ==0)		
	{
		status = vl53l8cx_check_data_ready(&pL8obj->Dev, &isReady);			
		if(isReady)
		{
			/* 获取测距数据 */
			vl53l8cx_get_ranging_data(&pL8obj->Dev, &Results);

			/* 默认情况下,传感器设置为8x8模式,因此我们有64个区域的数据。
			   但在此示例中,只打印了第一个区域的数据 */
			for(i = 0; i < 64; i++)
			{
				if(Results.motion_indicator.motion[motion_config.map_id[i]] >= 44)
				{
					printf(" 在这个区域检测到运动 : %3d !n", i);
				}
			}
			printf("n");
		}		
	}
    /* USER CODE END WHILE */

//  MX_TOF_Process();
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

**精彩呈现**

🎉 以下是我们的**精彩演示**!这里汇聚了无数创意与努力的结晶,每一个细节都经过精心打磨,只为给您带来最震撼的视觉体验。无需华丽的辞藻,只需一眼,您便能感受到那份来自内心深处的震撼与感动。

🌟 **演示结果** 🌟

在这片神奇的数字世界中,我们将带您领略前所未有的视觉盛宴。每一张图片,每一个动画,都蕴含着无尽的故事与情感。请与我们一起,沉浸在这份独特的艺术魅力之中,感受那份源自内心的共鸣与震撼。

🌈 在这里,每一个瞬间都值得被珍藏。让我们一起,用心去感受这份美好,用爱去传递这份温暖。因为,这里不仅有我们的努力与汗水,更有我们对艺术的热爱与执着。

🌟 **期待您的体验与分享** 🌟

让我们共同见证这份精彩,让这份美好在更多人的心中生根发芽。期待您的每一次点击、每一次分享,都能将这份感动传递给更多的人。因为,真正的艺术,是需要被更多人欣赏与传承的。

在运动的海洋中,感受那份独特的活力与激情。以下,我们将带您领略不同运动强度下的独特魅力,让您在每一次跃动中都能找到属于自己的节奏与力量。

无论您是初涉运动的新手,还是追求极致体验的运动达人,这里的指南都将助您一臂之力,让您在挥洒汗水的同时,更能感受到运动的无穷魅力。

让我们一同启程,探索不同运动强度下的精彩世界吧!🏃💪

TOF开发新篇章:VL53L8CX系列深度解读,吸引你的每一刻。 (https://ic.work/) 技术资料 第1张

审核编辑 黄宇

文章推荐

相关推荐