前言
方案介绍

硬件说明
主传感器:



主控单元:

运动部件:

交互部分:


功能介绍
软件设计

void MX_TOF_Process(void)
{
/* USER CODE BEGIN TOF_Process_PreTreatment */
/* USER CODE END TOF_Process_PreTreatment */
MX_VL53L5CX_SimpleRanging_Process();
/* USER CODE BEGIN TOF_Process_PostTreatment */
status = CUSTOM_RANGING_SENSOR_GetDistance(CUSTOM_VL53L5CX, &Result);
if (status == BSP_ERROR_NONE)
{
print_result(&Result);
}
if (com_has_data())
{
handle_cmd(get_key());
}
for(uint8_t i=0;i<16;i++)
{
tofdata[i] = Result.ZoneResult[i].Distance[0];
}
HAL_Delay(POLLING_PERIOD);
/* USER CODE END TOF_Process_PostTreatment */
}
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == KEY_Pin)
{
if(Autorunflag == 0)
Autorunflag = 1;
else
Autorunflag = 0;
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
Motor_stop();
}
if(GPIO_Pin == KEY1_Pin)
{
if(Autorunflag == 0 && runflag == 0)
{
Motor_run(0);
}
else if(Autorunflag == 0 && runflag == 1)
{
Motor_stop();
}
}
if(GPIO_Pin == KEY2_Pin)
{
if(Autorunflag == 0 && runflag == 0)
{
Motor_run(1);
}
else if(Autorunflag == 0 && runflag == 1)
{
Motor_stop();
}
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM15) {
HAL_IncTick();
if(Autorunflag == 1 && runflag == 1)
{
if(runDIRflag == 0)
OverCnt--;
else
OverCnt++;
if(OverCnt<75)
{
OverCnt = 75;
Overflag = 1;
}
else if(OverCnt>125)
{
OverCnt = 125;
Overflag = 1;
}
else
Overflag = 0;
}
}
}
while (1)
{
/* USER CODE END WHILE */
MX_TOF_Process();
/* USER CODE BEGIN 3 */
if(Autorunflag == 1)
{
tofdatamax = tofdata[3];
if(tofdata[7]<tofdatamax)
tofdatamax = tofdata[7];
if(tofdata[11]<tofdatamax)
tofdatamax = tofdata[11];
if(tofdata[15]<tofdatamax)
tofdatamax = tofdata[15];
if(tofdatamax>=300 && tofdatamax<=400)
{
Motor_stop();
}
else if(tofdatamax<300)
{
runDIRflag = 1;
if(Overflag == 0)
Motor_run(runDIRflag);
}
else if(tofdatamax>400)
{
runDIRflag = 0;
if(Overflag == 0)
Motor_run(runDIRflag);
}
}
}
void Motor_stop(void)
{
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,0);
runflag = 0;
}
void Motor_run(uint8_t runmode)
{
if(runmode == 0)
{
HAL_GPIO_WritePin(Motor_DIR_GPIO_Port, Motor_DIR_Pin, GPIO_PIN_SET);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,78);
}
else
{
HAL_GPIO_WritePin(Motor_DIR_GPIO_Port, Motor_DIR_Pin, GPIO_PIN_RESET);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,78);
}
runflag = 1;
}
效果展示


视频展示:
