|
|
|
@ -69,13 +69,15 @@ extern "C" {
|
|
|
|
|
#ifdef L8
|
|
|
|
|
/* for VL53L8A1 */
|
|
|
|
|
#define RANGING_FREQUENCY (10U) /* Ranging frequency Hz (shall be consistent with TimingBudget value) */
|
|
|
|
|
#define LOW_THRESHOLD (200U)
|
|
|
|
|
#define HIGH_THRESHOLD (600U)
|
|
|
|
|
#define LOW_THRESHOLD (2000U)
|
|
|
|
|
#define HIGH_THRESHOLD (2600U)
|
|
|
|
|
|
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
|
|
|
static RANGING_SENSOR_Capabilities_t Cap;
|
|
|
|
|
static RANGING_SENSOR_ProfileConfig_t Profile;
|
|
|
|
|
static RANGING_SENSOR_Result_t Result;
|
|
|
|
|
static VL53L8CX_ResultsData L8CXResult;
|
|
|
|
|
static VL53L8CX_Motion_Configuration motion_config; /* Motion configuration*/
|
|
|
|
|
|
|
|
|
|
static void MX_53L8A1_ThresholdDetection_Init(void);
|
|
|
|
|
static void MX_53L8A1_ThresholdDetection_Process(void);
|
|
|
|
@ -235,7 +237,7 @@ static void MX_53L8A1_ThresholdDetection_Init(void)
|
|
|
|
|
printf("VL53L8A1_RANGING_SENSOR_Init failed\n");
|
|
|
|
|
//while (1);
|
|
|
|
|
}
|
|
|
|
|
printf("\r\nVL53L8A1_RANGING_SENSOR_Init Success\r\n");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void MX_53L8A1_ThresholdDetection_Process(void)
|
|
|
|
@ -263,6 +265,37 @@ static void MX_53L8A1_ThresholdDetection_Process(void)
|
|
|
|
|
|
|
|
|
|
VL53L8A1_RANGING_SENSOR_ConfigIT(VL53L8A1_DEV_CENTER, &ITConfig);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// L8CX Motion
|
|
|
|
|
|
|
|
|
|
/*********************************/
|
|
|
|
|
/* Program motion indicator */
|
|
|
|
|
/*********************************/
|
|
|
|
|
|
|
|
|
|
/* Create motion indicator with resolution 8x8 */
|
|
|
|
|
int status = vl53l8cx_motion_indicator_init(&Dev, &motion_config, VL53L8CX_RESOLUTION_8X8);
|
|
|
|
|
if(status)
|
|
|
|
|
{
|
|
|
|
|
printf("Motion indicator init failed with status : %u\n", status);
|
|
|
|
|
return status;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* (Optional) Change the min and max distance used to detect motions. The
|
|
|
|
|
* difference between min and max must never be >1500mm, and minimum never be <400mm,
|
|
|
|
|
* otherwise the function below returns error 127 */
|
|
|
|
|
status = vl53l8cx_motion_indicator_set_distance_motion(&Dev, &motion_config, 1000, 2000);
|
|
|
|
|
if(status)
|
|
|
|
|
{
|
|
|
|
|
printf("Motion indicator set distance motion failed with status : %u\n", status);
|
|
|
|
|
return status;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* If user want to change the resolution, he also needs to update the motion indicator resolution */
|
|
|
|
|
status = vl53l8cx_set_resolution(&Dev, VL53L8CX_RESOLUTION_8X8);
|
|
|
|
|
status = vl53l8cx_motion_indicator_set_resolution(&Dev, &motion_config, VL53L8CX_RESOLUTION_8X8);
|
|
|
|
|
|
|
|
|
|
// L8 Motion
|
|
|
|
|
|
|
|
|
|
status = VL53L8A1_RANGING_SENSOR_Start(VL53L8A1_DEV_CENTER, RS_MODE_ASYNC_CONTINUOUS);
|
|
|
|
|
|
|
|
|
|
if (status != BSP_ERROR_NONE)
|
|
|
|
@ -308,9 +341,9 @@ static void print_result(RANGING_SENSOR_Result_t *Result)
|
|
|
|
|
|
|
|
|
|
printf("%c[2H", 27); /* clear screen */
|
|
|
|
|
printf("53L8A1 Threshold Detection demo application\n\r");
|
|
|
|
|
printf("-------------------------------------------\n\n\r");
|
|
|
|
|
|
|
|
|
|
printf("Cell Format :\n\n\r");
|
|
|
|
|
printf("-------------------------------------------");
|
|
|
|
|
printf("-------- Low= %4d High= %4d ------------", LOW_THRESHOLD, HIGH_THRESHOLD);
|
|
|
|
|
printf("Cell Format :");
|
|
|
|
|
for (l = 0; l < RANGING_SENSOR_NB_TARGET_PER_ZONE; l++)
|
|
|
|
|
{
|
|
|
|
|
printf(" \033[38;5;10m%20s\033[0m : %20s\n", "Distance [mm]", "Status\r");
|
|
|
|
@ -342,11 +375,29 @@ static void print_result(RANGING_SENSOR_Result_t *Result)
|
|
|
|
|
for (k = (zones_per_line - 1); k >= 0; k--)
|
|
|
|
|
{
|
|
|
|
|
if (Result->ZoneResult[j + k].NumberOfTargets > 0)
|
|
|
|
|
{
|
|
|
|
|
/* ---- origin
|
|
|
|
|
printf("| \033[38;5;10m%5ld\033[0m :%2d%5ld ",
|
|
|
|
|
(long)Result->ZoneResult[j + k].Distance[l],(j+k),
|
|
|
|
|
(long)Result->ZoneResult[j + k].Status[l]);
|
|
|
|
|
*/
|
|
|
|
|
int32_t roi_distance =(uint32_t)(Result->ZoneResult[j + k].Distance[l]);
|
|
|
|
|
int16_t roi_low = (roi_distance - LOW_THRESHOLD)/10;
|
|
|
|
|
int16_t roi_high = (HIGH_THRESHOLD - roi_distance)/10;
|
|
|
|
|
|
|
|
|
|
if ((roi_low> 0)&&(roi_high>0))
|
|
|
|
|
{
|
|
|
|
|
//printf("| \033[38;5;10m%5ld\033[0m :%2d%5ld ", (uint32_t)(roi_distance-LOW_THRESHOLD), (j+k), (uint32_t)Result->ZoneResult[j + k].Status[l]);
|
|
|
|
|
printf("| \033[38;5;10m%5d\033[0m : ", (uint16_t)roi_low);
|
|
|
|
|
}
|
|
|
|
|
else if ((roi_low< 0)|| (roi_high<0))
|
|
|
|
|
{
|
|
|
|
|
//printf("| \033[38;5;10m%5s\033[0m :%2d%5ld ", ".",(j+k), (uint32_t)Result->ZoneResult[j + k].Status[l]);
|
|
|
|
|
printf("| \033[38;5;10m%5s\033[0m : ", ".");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
printf("| %5s : %5s ", "X", "X");
|
|
|
|
|
printf("| %5s : %5s ", ".", ".");
|
|
|
|
|
}
|
|
|
|
|
printf("|\n");
|
|
|
|
|
|
|
|
|
|