找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 17266|回復(fù): 33
打印 上一主題 下一主題
收起左側(cè)

stm32 vl53l0x激光測距程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主



vl53l0x激光測距的stm32單片機(jī)源程序如下:
  1. #include "vl53l0.h"
  2. VL53L0X_Dev_t vl53l0x_dev;
  3. VL53L0X_DeviceInfo_t vl53l0x_dev_info;
  4. VL53L0X_RangingMeasurementData_t vl53l0x_data;
  5. VL53L0X_Error vl53l0x_status;

  6. /***************************************************************************************/

  7. void print_pal_error(VL53L0X_Error Status)
  8. {
  9.     char buf[VL53L0X_MAX_STRING_LENGTH];
  10.     VL53L0X_GetPalErrorString(Status, buf);  //得到錯(cuò)誤碼與字符串
  11.     printf("API Status: %i : %s\n", Status, buf);
  12. }

  13. void print_range_status(VL53L0X_RangingMeasurementData_t* pdata)
  14. {
  15.     char buf[VL53L0X_MAX_STRING_LENGTH];
  16.     uint8_t RangeStatus;
  17.     // New Range Status: data is valid when pdata->RangeStatus = 0
  18.     RangeStatus = pdata->RangeStatus;

  19.     VL53L0X_GetRangeStatusString(RangeStatus, buf);
  20.    // printf("Range Status: %i : %s\n", RangeStatus, buf);
  21. }

  22. VL53L0X_Error vl53l0x_start_single_test(VL53L0X_Dev_t *pdev, \
  23.                             VL53L0X_RangingMeasurementData_t *pdata)
  24. {
  25.     VL53L0X_Error status = VL53L0X_ERROR_NONE;
  26.    
  27.     if(vl53l0x_status != VL53L0X_ERROR_NONE)
  28.         return vl53l0x_status;

  29.     status = VL53L0X_PerformSingleRangingMeasurement(pdev, pdata);   //VL53L0X執(zhí)行單一測量范圍
  30.     if(status != VL53L0X_ERROR_NONE){
  31.        // printf("error:Call of VL53L0X_PerformSingleRangingMeasurement\n");
  32.         return status;
  33.     }
  34.     print_range_status(pdata);
  35.     printf("%icm\n\n", (pdata->RangeMilliMeter)/10);
  36.     return status;
  37. }


  38. VL53L0X_Error vl53l0x_measure_init(VL53L0X_Dev_t *pMyDevice)
  39. {
  40.     VL53L0X_Error Status = VL53L0X_ERROR_NONE;

  41.     //FixPoint1616_t LimitCheckCurrent;
  42.     uint32_t refSpadCount;
  43.     uint8_t isApertureSpads;
  44.     uint8_t VhvSettings;
  45.     uint8_t PhaseCal;
  46.     // Device Initialization
  47.     Status = VL53L0X_StaticInit(pMyDevice);   //基本設(shè)備初始化
  48.     if(Status != VL53L0X_ERROR_NONE){         //判斷是否初始化成功 失敗打印錯(cuò)誤信息
  49.         printf ("Call of VL53L0X_StaticInit\n");
  50.         print_pal_error(Status);
  51.         return Status;
  52.     }
  53.     // Device Initialization
  54.     Status = VL53L0X_PerformRefCalibration(pMyDevice, &VhvSettings, &PhaseCal);    //執(zhí)行參考校準(zhǔn)
  55.     if(Status != VL53L0X_ERROR_NONE){        //判斷是否校準(zhǔn)成功
  56.         printf ("Call of VL53L0X_PerformRefCalibration\n");
  57.         print_pal_error(Status);
  58.         return Status;
  59.     }

  60.     // needed if a coverglass is used and no calibration has been performed
  61.     Status = VL53L0X_PerformRefSpadManagement(pMyDevice,&refSpadCount, &isApertureSpads);
  62.     if(Status != VL53L0X_ERROR_NONE){
  63.         printf ("Call of VL53L0X_PerformRefSpadManagement\n");
  64.         printf ("refSpadCount = %d, isApertureSpads = %d\n", refSpadCount, isApertureSpads);
  65.         print_pal_error(Status);
  66.         return Status;
  67.     }

  68.     // no need to do this when we use VL53L0X_PerformSingleRangingMeasurement  當(dāng)我們使用VL53L0X_PerformSingleRangingMeasurement不需要
  69.     Status = VL53L0X_SetDeviceMode(pMyDevice, VL53L0X_DEVICEMODE_SINGLE_RANGING); // Setup in single ranging mode 設(shè)置單一測量模式
  70.     if(Status != VL53L0X_ERROR_NONE){
  71.         printf ("Call of VL53L0X_SetDeviceMode\n");
  72.         print_pal_error(Status);
  73.         return Status;
  74.     }

  75.     // Enable/Disable Sigma and Signal check
  76.     if(Status == VL53L0X_ERROR_NONE){
  77.         Status = VL53L0X_SetLimitCheckEnable(pMyDevice,  //啟用/禁用特定限制檢查
  78.                         VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, 1);
  79.     }
  80.     if(Status == VL53L0X_ERROR_NONE){
  81.         Status = VL53L0X_SetLimitCheckEnable(pMyDevice,
  82.                         VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, 1);
  83.     }
  84.                                 
  85.     if(Status == VL53L0X_ERROR_NONE){
  86.         Status = VL53L0X_SetLimitCheckValue(pMyDevice,
  87.                         VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE,
  88.                         (FixPoint1616_t)(0.25*65536));
  89.         }                        
  90.     if(Status == VL53L0X_ERROR_NONE){
  91.         Status = VL53L0X_SetLimitCheckValue(pMyDevice,
  92.                         VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE,
  93.                         (FixPoint1616_t)(18*65536));                        
  94.     }
  95.     if(Status == VL53L0X_ERROR_NONE){
  96.         Status = VL53L0X_SetMeasurementTimingBudgetMicroSeconds(pMyDevice,   //設(shè)置微秒時(shí)間
  97.                         200000);
  98.     }
  99.     if(Status != VL53L0X_ERROR_NONE){
  100.         printf ("Sigma and Signal check error\n");
  101.         print_pal_error(Status);
  102.         return Status;
  103.     }
  104.     /*
  105.      *  Step  4 : Test ranging mode
  106.      */
  107.   /*  for(i=0;i<10;i++){
  108.             printf ("Call of VL53L0X_PerformSingleRangingMeasurement\n");
  109.             Status = VL53L0X_PerformSingleRangingMeasurement(pMyDevice,
  110.                             &vl53l0x_data);

  111.             print_pal_error(Status);
  112.             print_range_status(&vl53l0x_data);

  113.             VL53L0X_GetLimitCheckCurrent(pMyDevice,
  114.                             VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD, &LimitCheckCurrent);

  115.             printf("RANGE IGNORE THRESHOLD: %f\n\n", (float)LimitCheckCurrent/65536.0);


  116.             if (Status != VL53L0X_ERROR_NONE) break;

  117.             printf("Measured distance: %i\n\n", vl53l0x_data.RangeMilliMeter);

  118.     }
  119. */
  120.     return Status;   //返回0
  121. }

  122. VL53L0X_Error vl53l0x_init(void)
  123. {
  124.     VL53L0X_Error Status = VL53L0X_ERROR_NONE;   //初始值賦值為0

  125.     VL53L0X_Dev_t *pMyDevice = &vl53l0x_dev;       //得到設(shè)備地址

  126.     pMyDevice->I2cDevAddr      = 0x52;            //iic地址
  127.     pMyDevice->comms_type      =  1;              //選擇IIC還是SPI    iic=1;SPI=0
  128.     pMyDevice->comms_speed_khz =  400;            //iic速率
  129.    
  130.     VL53L0X_i2c_init();          //IIC配置   

  131.     Status = VL53L0X_DataInit(pMyDevice); // Data initialization  //VL53L0X_DataInit:一次設(shè)備的初始化,初始化成功返回0
  132.     if(Status != VL53L0X_ERROR_NONE){     //判斷如果狀態(tài)不為0   打印錯(cuò)誤信息
  133.         print_pal_error(Status);
  134.         return Status;        //  返回錯(cuò)誤值 可通過此值DEBUG查找錯(cuò)誤位置
  135.     }

  136.     Status = VL53L0X_GetDeviceInfo(pMyDevice, &vl53l0x_dev_info);   //讀取給定設(shè)備的設(shè)備信息
  137.     if(Status != VL53L0X_ERROR_NONE){
  138.         print_pal_error(Status);
  139.         return Status;
  140.     }
  141.     printf("VL53L0X_GetDeviceInfo:\n");
  142.     printf("Device Name : %s\n", vl53l0x_dev_info.Name);     //設(shè)備名
  143.     printf("Device Type : %s\n", vl53l0x_dev_info.Type);    //產(chǎn)品類型VL53L0X = 1, VL53L1 = 2
  144. ……………………

  145. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
vl53l0x_測距.rar (639.98 KB, 下載次數(shù): 486)



評(píng)分

參與人數(shù) 5黑幣 +69 收起 理由
xuesong7417 + 8 贊一個(gè)!
emmmmm + 5 很給力!
默認(rèn)隱藏 + 1 很給力!我剛剛好需要,就拿來參考了
32818 + 5 贊一個(gè)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏12 分享淘帖 頂7 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:223540 發(fā)表于 2017-8-16 16:09 | 只看該作者
感謝您的分享
回復(fù)

使用道具 舉報(bào)

板凳
ID:290110 發(fā)表于 2018-3-10 17:04 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

地板
ID:297594 發(fā)表于 2018-3-26 23:09 | 只看該作者
感謝樓主分享 長見識(shí)啊 對(duì)得起這價(jià)格
回復(fù)

使用道具 舉報(bào)

5#
ID:72988 發(fā)表于 2018-3-27 13:06 | 只看該作者
感謝您的分享
回復(fù)

使用道具 舉報(bào)

6#
ID:314389 發(fā)表于 2018-4-23 12:59 | 只看該作者
感謝您的分享
回復(fù)

使用道具 舉報(bào)

7#
ID:119803 發(fā)表于 2018-4-25 15:50 | 只看該作者
謝謝分享 可惜要黑筆
回復(fù)

使用道具 舉報(bào)

8#
ID:345678 發(fā)表于 2018-6-21 15:00 | 只看該作者
guaishushu 發(fā)表于 2018-4-25 15:50
謝謝分享 可惜要黑筆

樓主使用的單片機(jī)的具體型號(hào)是多少呀,求告知
回復(fù)

使用道具 舉報(bào)

9#
ID:356817 發(fā)表于 2018-7-10 09:13 | 只看該作者
多謝樓主,很厲害
回復(fù)

使用道具 舉報(bào)

10#
ID:267607 發(fā)表于 2018-7-12 13:17 | 只看該作者
謝謝分享,樓主很棒
回復(fù)

使用道具 舉報(bào)

11#
ID:312675 發(fā)表于 2018-8-2 10:28 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

12#
ID:371971 發(fā)表于 2018-8-8 18:45 | 只看該作者
看完了有點(diǎn)不明所以
回復(fù)

使用道具 舉報(bào)

13#
ID:394398 發(fā)表于 2018-9-6 15:01 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

14#
ID:250090 發(fā)表于 2018-9-29 12:38 | 只看該作者
        很給力!我剛剛好需要,就拿來參考了
回復(fù)

使用道具 舉報(bào)

15#
ID:414444 發(fā)表于 2018-10-24 09:34 | 只看該作者
正在找呢,謝謝您
回復(fù)

使用道具 舉報(bào)

16#
ID:434041 發(fā)表于 2018-11-28 14:05 | 只看該作者
非常不錯(cuò)
回復(fù)

使用道具 舉報(bào)

17#
ID:439402 發(fā)表于 2018-12-4 17:07 | 只看該作者
終于找到了,感謝樓主
回復(fù)

使用道具 舉報(bào)

18#
ID:439402 發(fā)表于 2018-12-4 17:09 | 只看該作者
正在找呢,謝謝
回復(fù)

使用道具 舉報(bào)

19#
ID:282138 發(fā)表于 2018-12-11 10:47 | 只看該作者
感謝樓主
回復(fù)

使用道具 舉報(bào)

20#
ID:455438 發(fā)表于 2018-12-28 16:27 | 只看該作者
感謝感謝��!
回復(fù)

使用道具 舉報(bào)

21#
ID:388992 發(fā)表于 2019-1-16 13:22 | 只看該作者
最近也在找這方面的資料,感謝樓主分享!
回復(fù)

使用道具 舉報(bào)

22#
ID:437392 發(fā)表于 2019-2-20 22:00 | 只看該作者
挺好,值得大家學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

23#
ID:45026 發(fā)表于 2019-2-24 19:52 | 只看該作者
非常好,很好的學(xué)習(xí)資料,多謝分享!
回復(fù)

使用道具 舉報(bào)

24#
ID:411805 發(fā)表于 2019-3-4 09:00 | 只看該作者
感謝感謝!
回復(fù)

使用道具 舉報(bào)

25#
ID:500798 發(fā)表于 2019-3-30 10:06 | 只看該作者
想請(qǐng)問一下樓主和各位已經(jīng)下載的大神,這個(gè)只需要接好IO口就可以直接使用嗎
回復(fù)

使用道具 舉報(bào)

26#
ID:6906 發(fā)表于 2019-3-30 10:48 | 只看該作者
這個(gè)測距的測量范圍是多少?測量精度又是多少?
回復(fù)

使用道具 舉報(bào)

27#
ID:393856 發(fā)表于 2019-7-11 11:52 | 只看該作者
感謝UP主!得以借鑒一下。
回復(fù)

使用道具 舉報(bào)

28#
ID:597851 發(fā)表于 2019-8-8 16:43 | 只看該作者
啦啦啦,我要代碼
回復(fù)

使用道具 舉報(bào)

29#
ID:510572 發(fā)表于 2019-8-8 23:33 | 只看該作者
想問問xshut和GPIO1怎么接,庫的代碼看不過來
回復(fù)

使用道具 舉報(bào)

30#
ID:485354 發(fā)表于 2019-8-19 09:30 | 只看該作者
感謝樓主的無私奉獻(xiàn)
回復(fù)

使用道具 舉報(bào)

31#
ID:558527 發(fā)表于 2019-9-21 14:49 | 只看該作者
感謝樓主的無私奉獻(xiàn)
回復(fù)

使用道具 舉報(bào)

32#
ID:630593 發(fā)表于 2019-10-28 18:49 | 只看該作者
很給力,正需要
回復(fù)

使用道具 舉報(bào)

33#
ID:697669 發(fā)表于 2020-3-29 20:19 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

34#
ID:741590 發(fā)表于 2020-4-30 11:31 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表