VL53L3CX sensor ranging example. No expansion shield. Satellite board wired straight in to the motherboard. Targetting MbedOS v6.10.

Dependencies:   VL53L3CX_mbed

Committer:
johnAlexander
Date:
Tue Nov 03 15:17:16 2020 +0000
Revision:
2:6cc14a15a98c
Parent:
1:302ec451d4d5
Child:
3:57541677b13b
Use updated sensor class lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charlesmn 0:2800b864165a 1 /*
charlesmn 0:2800b864165a 2 * no_shield_single_polling.h
charlesmn 0:2800b864165a 3 * This pogram is a simple sample program which demsonstrates the VL53L3 being used without
charlesmn 0:2800b864165a 4 * a nucleo sheild. The shutdown pins are directly connected to the MCU pins D9,D4 and D3
charlesmn 0:2800b864165a 5 * as defined by this line:
charlesmn 0:2800b864165a 6 * status = board->init_board(D9,D4,D3);
charlesmn 0:2800b864165a 7 * the interrupt pins are defined in
charlesmn 0:2800b864165a 8 * board = NoShield53L3::instance(dev_I2C, A2, D8, D2);
charlesmn 0:2800b864165a 9 *
charlesmn 0:2800b864165a 10 * Measured ranges are ouput on the Serial Port, running at 115200 baud.
charlesmn 0:2800b864165a 11 *
charlesmn 0:2800b864165a 12 * The Reset button can be used to restart the program.
charlesmn 0:2800b864165a 13 */
charlesmn 0:2800b864165a 14
charlesmn 0:2800b864165a 15 #include <stdio.h>
charlesmn 0:2800b864165a 16
charlesmn 0:2800b864165a 17 #include "mbed.h"
johnAlexander 2:6cc14a15a98c 18 //#include "NoShield53L3.h"
johnAlexander 2:6cc14a15a98c 19 #include "vl53lx_class.h"
charlesmn 1:302ec451d4d5 20 #include "vl53L3_I2c.h"
charlesmn 0:2800b864165a 21 #include <time.h>
charlesmn 0:2800b864165a 22
charlesmn 0:2800b864165a 23
charlesmn 0:2800b864165a 24 // define i2c mcu pins
charlesmn 1:302ec451d4d5 25 #define I2C_SDA D14
charlesmn 1:302ec451d4d5 26 #define I2C_SCL D15
charlesmn 0:2800b864165a 27
johnAlexander 2:6cc14a15a98c 28 //static NoShield53L3 *board=NULL;
johnAlexander 2:6cc14a15a98c 29 static VL53LX *sensor = NULL;
charlesmn 0:2800b864165a 30 Serial pc(SERIAL_TX, SERIAL_RX);
charlesmn 0:2800b864165a 31
charlesmn 0:2800b864165a 32
charlesmn 0:2800b864165a 33
charlesmn 0:2800b864165a 34 VL53LX_Dev_t devCentre;
charlesmn 0:2800b864165a 35 VL53LX_Dev_t devLeft;
charlesmn 0:2800b864165a 36 VL53LX_Dev_t devRight;
charlesmn 0:2800b864165a 37 VL53LX_DEV Dev = &devCentre;
charlesmn 0:2800b864165a 38
charlesmn 0:2800b864165a 39
charlesmn 0:2800b864165a 40
charlesmn 0:2800b864165a 41 /*=================================== Main ==================================
charlesmn 0:2800b864165a 42 =============================================================================*/
charlesmn 0:2800b864165a 43 int main()
charlesmn 0:2800b864165a 44 {
charlesmn 0:2800b864165a 45 int status;
charlesmn 0:2800b864165a 46 uint16_t wordData;
johnAlexander 2:6cc14a15a98c 47
johnAlexander 2:6cc14a15a98c 48 DigitalOut xshutdown(D7);
johnAlexander 2:6cc14a15a98c 49
charlesmn 0:2800b864165a 50
charlesmn 0:2800b864165a 51 static VL53LX_MultiRangingData_t RangingData;
charlesmn 0:2800b864165a 52
charlesmn 0:2800b864165a 53
charlesmn 0:2800b864165a 54 pc.baud(115200); // baud rate is important as printf statements take a lot of time
charlesmn 0:2800b864165a 55 printf("Hello world!\r\n");
charlesmn 0:2800b864165a 56
charlesmn 1:302ec451d4d5 57 vl53L3_DevI2C *dev_I2C = new vl53L3_DevI2C(I2C_SDA, I2C_SCL);
charlesmn 0:2800b864165a 58
charlesmn 0:2800b864165a 59 /* no expansion board so don't use stmpe1600 */
johnAlexander 2:6cc14a15a98c 60 // board = NoShield53L3::instance(dev_I2C, A2, D8, D2);
johnAlexander 2:6cc14a15a98c 61 sensor = new VL53LX(dev_I2C, &xshutdown, A2);
johnAlexander 2:6cc14a15a98c 62
johnAlexander 2:6cc14a15a98c 63 printf("sensor created!\r\n");
charlesmn 0:2800b864165a 64
johnAlexander 2:6cc14a15a98c 65 status = sensor->InitSensor(0x52);
charlesmn 0:2800b864165a 66 if (status) {
johnAlexander 2:6cc14a15a98c 67 printf("Failed to init sensor!\r\n");
charlesmn 0:2800b864165a 68 return 0;
johnAlexander 2:6cc14a15a98c 69 }
johnAlexander 2:6cc14a15a98c 70
johnAlexander 2:6cc14a15a98c 71 printf("sensor initialised! \n");
charlesmn 0:2800b864165a 72
charlesmn 0:2800b864165a 73 uint8_t NewDataReady=0;
charlesmn 0:2800b864165a 74
johnAlexander 2:6cc14a15a98c 75 status = sensor->VL53LX_StartMeasurement();
charlesmn 0:2800b864165a 76 printf("VL53LX_StartMeasurement %d \n",status);
charlesmn 0:2800b864165a 77
charlesmn 0:2800b864165a 78 // loop forever getting measurements
charlesmn 0:2800b864165a 79 while(1)
charlesmn 0:2800b864165a 80 {
johnAlexander 2:6cc14a15a98c 81 status = sensor->VL53LX_WaitMeasurementDataReady();
charlesmn 0:2800b864165a 82
charlesmn 0:2800b864165a 83 if(!status)
charlesmn 0:2800b864165a 84 {
charlesmn 0:2800b864165a 85
johnAlexander 2:6cc14a15a98c 86 status = sensor->VL53LX_GetMultiRangingData(&RangingData);
charlesmn 0:2800b864165a 87
johnAlexander 2:6cc14a15a98c 88 if (status == 0)
charlesmn 0:2800b864165a 89 {
johnAlexander 2:6cc14a15a98c 90 int no_of_object_found = RangingData.NumberOfObjectsFound;
charlesmn 0:2800b864165a 91 if ( no_of_object_found < 10 )
charlesmn 0:2800b864165a 92 {
johnAlexander 2:6cc14a15a98c 93 for(int j=0;j<no_of_object_found;j++)
johnAlexander 2:6cc14a15a98c 94 {
charlesmn 0:2800b864165a 95 if ((RangingData.RangeData[j].RangeStatus == VL53LX_RANGESTATUS_RANGE_VALID) ||
charlesmn 0:2800b864165a 96 (RangingData.RangeData[j].RangeStatus == VL53LX_RANGESTATUS_RANGE_VALID_NO_WRAP_CHECK_FAIL))
johnAlexander 2:6cc14a15a98c 97 { // print data
johnAlexander 2:6cc14a15a98c 98 printf("centre \t object %d \t status=%d, \t D=%5dmm, \t Signal=%2.2f Mcps, \t Ambient=%2.2f Mcps \n",
charlesmn 0:2800b864165a 99 j,
charlesmn 0:2800b864165a 100 RangingData.RangeData[j].RangeStatus,
charlesmn 0:2800b864165a 101 RangingData.RangeData[j].RangeMilliMeter,
charlesmn 0:2800b864165a 102 RangingData.RangeData[j].SignalRateRtnMegaCps/65536.0,
charlesmn 0:2800b864165a 103 RangingData.RangeData[j].AmbientRateRtnMegaCps/65536.0);
johnAlexander 2:6cc14a15a98c 104 } //if
charlesmn 0:2800b864165a 105 } //for
charlesmn 0:2800b864165a 106 } // if ( no_of_object_found < 10 )
johnAlexander 2:6cc14a15a98c 107 } // if status VL53LX_GetMultiRangingData
johnAlexander 2:6cc14a15a98c 108 } // if !status VL53LX_WaitMeasurementDataReady
johnAlexander 2:6cc14a15a98c 109 else
johnAlexander 2:6cc14a15a98c 110 {
johnAlexander 2:6cc14a15a98c 111 printf("VL53L1_WaitMeasurementDataReady failed %d \n",status);
johnAlexander 2:6cc14a15a98c 112 }
charlesmn 0:2800b864165a 113
johnAlexander 2:6cc14a15a98c 114 status = sensor->VL53LX_ClearInterruptAndStartMeasurement();
charlesmn 0:2800b864165a 115
charlesmn 0:2800b864165a 116 } // while(1)
charlesmn 0:2800b864165a 117
charlesmn 0:2800b864165a 118 }