一、XL53L0簡介激光測距,有效距離2米,多種測距模式(單次,連續,時間間隔),多種工作模式(默認,快速,高精度,長距離)。
二、XL53L0硬件介紹
如下圖:
除去供電引腳剩余的引腳作用分別如下
1.SDA,SCL兩腳為I2C通信引腳,兩個引腳上拉。
2.GPIO為中斷引腳,數據測完向外部發射一脈沖,不用時上拉。
3.XSHUT類似復位引腳,低電平有效,不用時上拉。
屏幕截圖 2021-11-29 130805.png (30.66 KB, 下載次數: 86)
下載附件
引腳連接
2021-11-29 13:08 上傳
STM32單片機源程序如下:
- #include "main.h"
- int main(void)
- {
- Led_Init(); //led引腳初始化
- Adc_Init();
- SystemInit(); //初始化
- Systick_Init(); //滴答時鐘初始化
- Uart1_Init(9600); //串口初始化
-
- USB_Port_Set(0); //斷開usb
- Delay_Ms(20); //延時
- USB_Port_Set(1); //連接USB
- Set_USBClock(); //使能USB時鐘
- USB_Interrupts_Config(); //USB中斷配置
- USB_Init(); //USB初始化
-
- Host_Value_Init(); //主機參數初始化
- vl53l0x_Init(); //VL53L0初始化
- vl53l0x_Calibration_Init(); //VL53L0設備參數設置
- while(1)
- {
- Vl53l0x_Get_Distance(3); //獲取高度數據
- Get_Adc_Average(5); //獲取角度值
- Dispose_Usb_Data(); //處理USB的數據
- }
- }
復制代碼- #include "vl53l0.h"
- VL53L0X_Dev_t vl53l0x_dev0;
- VL53L0X_Dev_t vl53l0x_dev1;
- VL53L0X_Dev_t vl53l0x_dev2;
- VL53L0X_Dev_t vl53l0x_dev3;
- VL53L0X_DeviceInfo_t vl53l0x_dev_info;
- VL53L0X_RangingMeasurementData_t vl53l0x_data;
- VL53L0X_Error vl53l0x_status;
- void print_pal_error(VL53L0X_Error Status)
- {
- char buf[VL53L0X_MAX_STRING_LENGTH];
- VL53L0X_GetPalErrorString(Status, buf); //得到錯誤碼與字符串
- printf("API Status: %i : %s\n", Status, buf);
- }
- void print_range_status(VL53L0X_RangingMeasurementData_t* pdata)
- {
- char buf[VL53L0X_MAX_STRING_LENGTH];
- uint8_t RangeStatus;
- // New Range Status: data is valid when pdata->RangeStatus = 0
- RangeStatus = pdata->RangeStatus;
- VL53L0X_GetRangeStatusString(RangeStatus, buf);
- printf("Range Status: %i : %s\n", RangeStatus, buf);
- }
- uint16_t vl53l0x_start_single_test(VL53L0X_Dev_t *pdev,
- VL53L0X_RangingMeasurementData_t *pdata)
- {
- int i=0,sum=0;
- VL53L0X_Error status = VL53L0X_ERROR_NONE;
-
- if(vl53l0x_status != VL53L0X_ERROR_NONE)
- return vl53l0x_status;
- status = VL53L0X_PerformSingleRangingMeasurement(pdev, pdata); //VL53L0X執行單一測量范圍
- if(status != VL53L0X_ERROR_NONE){
- printf("error:Call of VL53L0X_PerformSingleRangingMeasurement\n");
- return status;
- }
- for(i=0;i<5;i++)
- sum+=pdata->RangeMilliMeter;
- pdata->RangeMilliMeter=sum/5;
-
- return pdata->RangeMilliMeter;
- }
- /******************************************************************
- 函數功能:配置VL53L0X設備I2C地址
- 入口參數:dev:設備I2C參數結構體
- newaddr:設備新I2C地址
- 返 回 值:錯誤狀態
- ******************************************************************/
- VL53L0X_Error vl53l0x_Addr_set(VL53L0X_Dev_t *dev,uint8_t newaddr)
- {
- uint16_t Id;
- uint8_t FinalAddress;
- VL53L0X_Error Status = VL53L0X_ERROR_NONE;
- u8 sta=0x00;
-
- FinalAddress = newaddr;
-
- if(FinalAddress==dev->I2cDevAddr)//新設備I2C地址與舊地址一致,直接退出
- return VL53L0X_ERROR_NONE;
- //在進行第一個寄存器訪問之前設置I2C標準模式(400Khz)
- Status = VL53L0X_WrByte(dev,0x88,0x00);
- if(Status!=VL53L0X_ERROR_NONE)
- {
- sta=0x01;//設置I2C標準模式出錯
- goto set_error;
- }
- //嘗試使用默認的0x52地址讀取一個寄存器
- Status = VL53L0X_RdWord(dev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Id);
- if(Status!=VL53L0X_ERROR_NONE)
- {
- sta=0x02;//讀取寄存器出錯
- goto set_error;
- }
- if(Id == 0xEEAA)
- {
- //設置設備新的I2C地址
- Status = VL53L0X_SetDeviceAddress(dev,FinalAddress);
- if(Status!=VL53L0X_ERROR_NONE)
- {
- sta=0x03;//設置I2C地址出錯
- goto set_error;
- }
-
- //修改參數結構體的I2C地址
- dev->I2cDevAddr = FinalAddress;
- //檢查新的I2C地址讀寫是否正常
- Status = VL53L0X_RdWord(dev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Id);
- if(Status!=VL53L0X_ERROR_NONE)
- {
- sta=0x04;//新I2C地址讀寫出錯
- goto set_error;
- }
- }
- set_error:
- if(Status!=VL53L0X_ERROR_NONE)
- {
- print_pal_error(Status);//打印錯誤信息
- }
- if(sta!=0)
- printf("sta:0x%x\r\n",sta);
- return Status;
- }
- /******************************************************************
- 函數功能:VL53L0初始化
- 入口參數:VL53L0X_Dev_t *pMyDevice ,u8 vl53l0_x_id
- 設備結構體 設備ID
- 返 回 值:錯誤狀態
- ******************************************************************/
- VL53L0X_Error vl53l0x_InitX(VL53L0X_Dev_t *pMyDevice ,u8 vl53l0_x_id)
- {
- VL53L0X_Error Status = VL53L0X_ERROR_NONE; //初始值賦值為0
-
- pMyDevice->I2cDevAddr = 0x52; //iic地址 0x52是默認地址,要初始化必須先寫0x52,才能初始化,之后再通過軟件修改
- pMyDevice->comms_type = 1; //選擇IIC還是SPI iic=1;SPI=0
- pMyDevice->comms_speed_khz = 400; //iic速率
-
- //正點原子的VL53L0用戶手冊上寫明了再次使能時地址會恢復為0x52,所以只能使能一次,設置好地址即可,這里是核心
- switch(vl53l0_x_id)
- {
- case 0:
- I2C_X0_HIGH();
- Delay_Ms(1);
- vl53l0x_Addr_set(pMyDevice,0x54);//設置第一個VL53L0X傳感器I2C地址
- break;
- case 1:
- I2C_X1_HIGH();
- Delay_Ms(1);
- vl53l0x_Addr_set(pMyDevice,0x56);//設置第二個VL53L0X傳感器I2C地址
- break;
- case 2:
- I2C_X2_HIGH();
- Delay_Ms(1);
- vl53l0x_Addr_set(pMyDevice,0x58);
- break;
- case 3:
- I2C_X3_HIGH();
- Delay_Ms(1);
- vl53l0x_Addr_set(pMyDevice,0x5a);
- break;
- }
-
- Status = VL53L0X_DataInit(pMyDevice); //設備的初始化,賦默認值
- if(Status != VL53L0X_ERROR_NONE){ //判斷如果狀態不為0 打印錯誤信息
- print_pal_error(Status);
- return Status; //返回錯誤值 可通過此值DEBUG查找錯誤位置
- }
- Status = VL53L0X_GetDeviceInfo(pMyDevice, &vl53l0x_dev_info); //讀取給定設備的設備信息
- if(Status != VL53L0X_ERROR_NONE){
- print_pal_error(Status);
- return Status;
- }
- /*
- printf("VL53L0X_GetDeviceInfo:\n");
- printf("Device Name : %s\n", vl53l0x_dev_info.Name); //設備名
- printf("Device Type : %s\n", vl53l0x_dev_info.Type); //產品類型VL53L0X = 1, VL53L1 = 2
- printf("Device ID : %s\n", vl53l0x_dev_info.ProductId); // 設備ID
- printf("ProductRevisionMajor : %d\n", vl53l0x_dev_info.ProductRevisionMajor);
- printf("ProductRevisionMinor : %d\n", vl53l0x_dev_info.ProductRevisionMinor);
- if ((vl53l0x_dev_info.ProductRevisionMajor != 1) && (vl53l0x_dev_info.ProductRevisionMinor != 1)){
- printf("Error expected cut 1.1 but found cut %d.%d\n",
- vl53l0x_dev_info.ProductRevisionMajor, vl53l0x_dev_info.ProductRevisionMinor);
- Status = VL53L0X_ERROR_NOT_SUPPORTED;
- print_pal_error(Status);
- return Status;
- } */
-
- // Device Initialization
- Status = VL53L0X_StaticInit(pMyDevice); //基本設備初始化
- if(Status != VL53L0X_ERROR_NONE){ //判斷是否初始化成功 失敗打印錯誤信息
- printf ("Call of VL53L0X_StaticInit\n");
- print_pal_error(Status);
- return Status;
- }
- return Status;
- }
- /******************************************************************
- 函數功能:sPANS參考校準
- 入口參數:VL53L0X_Dev_t *pMyDevice ,Device_Message *pDev
- 設備結構體 設備信息
- 返 回 值:錯誤狀態
- ******************************************************************/
- VL53L0X_Error PerformRefSpad_CalibrationX(VL53L0X_Dev_t *pMyDevice,Device_Message *pDev)
- {
- uint32_t refSpadCount;
- uint8_t isApertureSpads;
- VL53L0X_Error Status = VL53L0X_ERROR_NONE; //執行sPANS參考校準
- Status = VL53L0X_PerformRefSpadManagement(pMyDevice,&refSpadCount, &isApertureSpads);
- if(Status != VL53L0X_ERROR_NONE){
- printf ("Call of VL53L0X_PerformRefSpadManagement\n");
- printf ("refSpadCount = %d, isApertureSpads = %d\n", refSpadCount, isApertureSpads);
- print_pal_error(Status);
- return Status;
- }
- pDev->refSpadCount = refSpadCount;
- pDev->isApertureSpads = isApertureSpads;
- return Status;
- }
- /******************************************************************
- 函數功能:Ref校準
- 入口參數:VL53L0X_Dev_t *pMyDevice ,Device_Message *pDev
- 設備結構體 設備信息
- 返 回 值:錯誤狀態
- ******************************************************************/
- VL53L0X_Error PerformRef_CalibrationX(VL53L0X_Dev_t *pMyDevice,Device_Message *pDev)
- {
- uint8_t VhvSettings;
- uint8_t PhaseCal;
- VL53L0X_Error Status = VL53L0X_ERROR_NONE;
- // Device Initialization //執行溫度參考校準
- Status = VL53L0X_PerformRefCalibration(pMyDevice, &VhvSettings,&PhaseCal);
- if(Status != VL53L0X_ERROR_NONE){
- printf ("Call of VL53L0X_PerformRefCalibration\n");
- print_pal_error(Status);
- return Status;
- }
- pDev->VhvSettings = VhvSettings; //更新結構體
- pDev->PhaseCal = PhaseCal;
- return Status;
- }
- /******************************************************************
- 函數功能:Offset校準
- 入口參數:VL53L0X_Dev_t *pMyDevice ,Device_Message *pDev
- 設備結構體 設備信息
- 返 回 值:錯誤狀態
- ******************************************************************/
- VL53L0X_Error Offset_CalibrationX(VL53L0X_Dev_t *pMyDevice,Device_Message *pDev)
- {
- int32_t OffsetMicroMeter;
- VL53L0X_Error Status = VL53L0X_ERROR_NONE; //初始值賦值為0
- Status=VL53L0X_PerformOffsetCalibration(pMyDevice,100<<16,&OffsetMicroMeter); //偏移校準,把白色物體放在100mm處進行,輸出偏移校準值
-
- if(Status != VL53L0X_ERROR_NONE)
- {
- print_pal_error(Status);
- return Status;
- }
- pDev->OffsetMicroMeter = OffsetMicroMeter;
- return Status;
- }
- /******************************************************************
- 函數功能:XTalk校準
- 入口參數:VL53L0X_Dev_t *pMyDevice ,u8 vl53l0_x_id
- 設備結構體 設備ID
- 返 回 值:錯誤狀態
- ******************************************************************/
- VL53L0X_Error XTalk_CalibrationX(VL53L0X_Dev_t *pMyDevice,Device_Message *pDev)
- {
- FixPoint1616_t XTalkCompensation;
- VL53L0X_Error Status = VL53L0X_ERROR_NONE; //初始值賦值為0
- Status=VL53L0X_PerformXTalkCalibration(pMyDevice,250<<16,&XTalkCompensation); //偏移校準,把白色物體放在100mm處進行,輸出偏移校準值
- if(Status != VL53L0X_ERROR_NONE)
- {
- print_pal_error(Status);
- return Status;
- }
- pDev->XTalkCompensation = XTalkCompensation;
- return Status;
- }
- //校準參數設置
- VL53L0X_Error vl53l0x_Set_InitX(VL53L0X_Dev_t *pMyDevice,Device_Message *pDev)
- {
- VL53L0X_Error Status = VL53L0X_ERROR_NONE;
-
- //SPAD校準參數設置
- Status = VL53L0X_SetReferenceSpads(pMyDevice,pDev->refSpadCount,pDev->isApertureSpads);
- if(Status!=VL53L0X_ERROR_NONE) { return Status; }
-
- //溫度校準參數設置
- Status = VL53L0X_SetRefCalibration(pMyDevice,pDev->VhvSettings,pDev->PhaseCal);
- if(Status!=VL53L0X_ERROR_NONE) { return Status; }
- //偏移校準參數設置
- Status = VL53L0X_SetOffsetCalibrationDataMicroMeter(pMyDevice,pDev->OffsetMicroMeter);
- if(Status!=VL53L0X_ERROR_NONE) { return Status; }
-
- //蓋玻片校準參數設置
- Status = VL53L0X_SetXTalkCompensationRateMegaCps(pMyDevice,pDev->XTalkCompensation);
- if(Status!=VL53L0X_ERROR_NONE) { return Status; }
-
- //使能串擾校準
- Status = VL53L0X_SetXTalkCompensationEnable(pMyDevice,ENABLE);
- if(Status!=VL53L0X_ERROR_NONE) { return Status; }
- return Status;
- }
- VL53L0X_Error vl53l0x_Set_ModeX(VL53L0X_Dev_t *pMyDevice)
- {
- // no need to do this when we use VL53L0X_PerformSingleRangingMeasurement
- VL53L0X_Error Status = VL53L0X_ERROR_NONE;
- Status = VL53L0X_SetDeviceMode(pMyDevice, VL53L0X_DEVICEMODE_SINGLE_RANGING); // Setup in single ranging mode 設置單一測量模式
- if(Status != VL53L0X_ERROR_NONE){
- printf ("Call of VL53L0X_SetDeviceMode\n");
- print_pal_error(Status);
- return Status;
- }
- // Enable/Disable Sigma and Signal check
- if(Status == VL53L0X_ERROR_NONE){Status = VL53L0X_SetLimitCheckEnable(pMyDevice, //啟用/禁用特定限制檢查
- VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, 1);
- }
- if(Status == VL53L0X_ERROR_NONE){Status = VL53L0X_SetLimitCheckEnable(pMyDevice,
- VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, 1);
- }
- if(Status == VL53L0X_ERROR_NONE){ Status = VL53L0X_SetLimitCheckValue(pMyDevice,
- VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE,
- (FixPoint1616_t)(0.25*65536));
- }
- if(Status == VL53L0X_ERROR_NONE){ Status = VL53L0X_SetLimitCheckValue(pMyDevice,
- VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE,
- (FixPoint1616_t)(18*65536));
- }
- if(Status == VL53L0X_ERROR_NONE){ Status = VL53L0X_SetMeasurementTimingBudgetMicroSeconds(pMyDevice, //設置微秒時間
- 200000);
- }
- if(Status != VL53L0X_ERROR_NONE){
- printf ("Sigma and Signal check error\n");
- print_pal_error(Status);
- return Status;
- }
- return Status; //返回0
- }
- /******************************************************************
- 函數功能:設備初始化·
- 入口參數:無
- 返 回 值:錯誤參數
- ******************************************************************/
- VL53L0X_Error vl53l0x_Init(void)
- {
- VL53L0X_Error Status = VL53L0X_ERROR_NONE; //初始值賦值為0
- //初始化一定按照這個順序執行,否則不成功
- VL53L0X_i2c_init();
- vl53l0x_InitX(&vl53l0x_dev0,0);
- vl53l0x_InitX(&vl53l0x_dev1,1);
- vl53l0x_InitX(&vl53l0x_dev2,2);
- vl53l0x_InitX(&vl53l0x_dev3,3);
-
- return Status; //返回0
- }
- /******************************************************************
- 函數功能:參數賦值程序
- 入口參數:無
- 返 回 值:錯誤參數
- ******************************************************************/
- VL53L0X_Error vl53l0x_Set_Init(void)
- {
- VL53L0X_Error Status = VL53L0X_ERROR_NONE; //初始值賦值為0
-
- vl53l0x_Set_InitX(&vl53l0x_dev0,&Device0_Calibration_Message);
- vl53l0x_Set_InitX(&vl53l0x_dev1,&Device1_Calibration_Message);
- vl53l0x_Set_InitX(&vl53l0x_dev2,&Device2_Calibration_Message);
- vl53l0x_Set_InitX(&vl53l0x_dev3,&Device3_Calibration_Message);
- if(Status != VL53L0X_ERROR_NONE)
- {
- print_pal_error(Status);
- return Status;
- }
- return Status;
- }
- /******************************************************************
- 函數功能:設置模式
- 入口參數:無
- 返 回 值:錯誤參數
- ******************************************************************/
- VL53L0X_Error vl53l0x_Set_Mode(void)
- {
- VL53L0X_Error Status = VL53L0X_ERROR_NONE;
- Status = vl53l0x_Set_ModeX(&vl53l0x_dev0);
- Status = vl53l0x_Set_ModeX(&vl53l0x_dev1);
- Status = vl53l0x_Set_ModeX(&vl53l0x_dev2);
- Status = vl53l0x_Set_ModeX(&vl53l0x_dev3);
-
- if(Status != VL53L0X_ERROR_NONE){
- printf ("Call of VL53L0X_SetDeviceMode\n");
- print_pal_error(Status);
- return Status;
- }
- return Status;
- }
- /******************************************************************
- 函數功能:校準程序
- 入口參數:無
- 返 回 值:錯誤參數
- ******************************************************************/
- VL53L0X_Error vl53l0x_Calibration_Init(void)
- {
- VL53L0X_Error Status = VL53L0X_ERROR_NONE;
- if(Host_Configuration.calibration_marker == 0xaa)
- {
-
- Status = vl53l0x_Set_Init();
- USB_USART_SendData(Host_Configuration.calibration_marker); //設備數據設定
- }
- else
- { usb_printf("等待偏移校準!");
- while(1){Dispose_Usb_Data();
- if(Host_Configuration.calibration_marker == 0x0a){break;}}; //等待偏移校準
- Status = PerformRefSpad_Calibration();
- if(Status!=VL53L0X_ERROR_NONE) { return Status; }
- Status = PerformRef_Calibration();
- if(Status!=VL53L0X_ERROR_NONE) { return Status; }
- Status = Offset_Calibration();
- if(Status!=VL53L0X_ERROR_NONE) { return Status; }
- usb_printf("等待載玻片校準!");
- while(1){Dispose_Usb_Data();
- if(Host_Configuration.calibration_marker == 0xaa){break;}}; //等待載玻片校準
- Status = XTalk_Calibration();
- if(Status!=VL53L0X_ERROR_NONE) { return Status; }
- usb_printf("校準成功!");
- Save_Device_Data_To_Flash(&Device0_Calibration_Message,0); //保存校準后參數
- Save_Device_Data_To_Flash(&Device1_Calibration_Message,1);
- Save_Device_Data_To_Flash(&Device2_Calibration_Message,2);
- Save_Device_Data_To_Flash(&Device3_Calibration_Message,3);
- }
- vl53l0x_Set_Mode();
- usb_printf("設備啟動!");
- return Status;
- }
- //SPAD校準程序
- VL53L0X_Error PerformRefSpad_Calibration(void)
- {
- VL53L0X_Error Status = VL53L0X_ERROR_NONE;
- //SPAD校準
- PerformRefSpad_CalibrationX(&vl53l0x_dev0,&Device0_Calibration_Message);
- PerformRefSpad_CalibrationX(&vl53l0x_dev1,&Device1_Calibration_Message);
- PerformRefSpad_CalibrationX(&vl53l0x_dev2,&Device2_Calibration_Message);
- PerformRefSpad_CalibrationX(&vl53l0x_dev3,&Device3_Calibration_Message);
- if(Status != VL53L0X_ERROR_NONE)
- {
- print_pal_error(Status);
- return Status;
- }
- return Status;
- }
- //溫度校準程序
- VL53L0X_Error PerformRef_Calibration(void)
- {
- VL53L0X_Error Status = VL53L0X_ERROR_NONE;
- //溫度校準
- PerformRef_CalibrationX(&vl53l0x_dev0,&Device0_Calibration_Message);
- PerformRef_CalibrationX(&vl53l0x_dev1,&Device1_Calibration_Message);
- PerformRef_CalibrationX(&vl53l0x_dev2,&Device2_Calibration_Message);
- PerformRef_CalibrationX(&vl53l0x_dev3,&Device3_Calibration_Message);
- if(Status != VL53L0X_ERROR_NONE)
- {
- print_pal_error(Status);
- return Status;
- }
- return Status;
- }
- //偏移校準程序
- VL53L0X_Error Offset_Calibration(void)
- {
- VL53L0X_Error Status = VL53L0X_ERROR_NONE; //初始值賦值為0
- //偏移校準
- Offset_CalibrationX(&vl53l0x_dev0,&Device0_Calibration_Message);
- Offset_CalibrationX(&vl53l0x_dev1,&Device1_Calibration_Message);
- Offset_CalibrationX(&vl53l0x_dev2,&Device2_Calibration_Message);
- Offset_CalibrationX(&vl53l0x_dev3,&Device3_Calibration_Message);
- if(Status != VL53L0X_ERROR_NONE)
- {
- print_pal_error(Status);
- return Status;
- }
- return Status;
- }
- //串擾校準程序
- VL53L0X_Error XTalk_Calibration(void)
- {
- VL53L0X_Error Status = VL53L0X_ERROR_NONE;
- //串擾校準
- XTalk_CalibrationX(&vl53l0x_dev0,&Device0_Calibration_Message);
- XTalk_CalibrationX(&vl53l0x_dev1,&Device1_Calibration_Message);
- XTalk_CalibrationX(&vl53l0x_dev2,&Device2_Calibration_Message);
- XTalk_CalibrationX(&vl53l0x_dev3,&Device3_Calibration_Message);
-
- if(Status != VL53L0X_ERROR_NONE)
- {
- print_pal_error(Status);
- return Status;
- }
- return Status;
- }
- /******************************************************************
- 函數功能:獲取四個傳感器測量的高度
- 入口參數:times :濾波次數
- 返 回 值:無
- ******************************************************************/
- void Vl53l0x_Get_Distance(u8 times) //times不易過大為好
- {
- static u8 m=0;
-
- Data_Mover(vl5310_1_value_filter,LEFT,times);
- Data_Mover(vl5310_2_value_filter,LEFT,times);
- Data_Mover(vl5310_3_value_filter,LEFT,times);
- Data_Mover(vl5310_4_value_filter,LEFT,times);
-
- for(;m<times;m++) //讀取距離數據
- {
- vl5310_1_value_filter[m]= vl53l0x_start_single_test(&vl53l0x_dev0, &vl53l0x_data);
- vl5310_2_value_filter[m]= vl53l0x_start_single_test(&vl53l0x_dev1, &vl53l0x_data);
- vl5310_3_value_filter[m]= vl53l0x_start_single_test(&vl53l0x_dev2, &vl53l0x_data);
- vl5310_4_value_filter[m]= vl53l0x_start_single_test(&vl53l0x_dev3, &vl53l0x_data);
- }
- m--; //下次執行此函數時只用讀取一次即可
- Send_Information.first_vl53l0_value = Buf_Add(vl5310_1_value_filter,times)/times; //更新傳感器的值
- Send_Information.second_vl53l0_value= Buf_Add(vl5310_2_value_filter,times)/times;
- Send_Information.third_vl53l0_value = Buf_Add(vl5310_3_value_filter,times)/times;
- Send_Information.fourth_vl53l0_value= Buf_Add(vl5310_4_value_filter,times)/times;
- }
-
復制代碼
Keil代碼下載:
四傳感器測距代碼.7z
(283.24 KB, 下載次數: 176)
2021-11-29 16:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|