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:
Fri Apr 30 14:46:24 2021 +0000
Revision:
3:57541677b13b
Parent:
2:6cc14a15a98c
Use published sensor library.; Update serial port pin labels.; Align with MbedOS v6.10.

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 3:57541677b13b 19 #include "vl53l3_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 3:57541677b13b 29 static VL53L3 *sensor = NULL;
johnAlexander 3:57541677b13b 30 // MBed V6.x has renamed wait_ms and UnbufferedSerial replaces Serial
johnAlexander 3:57541677b13b 31 #if (MBED_VERSION > 60300)
johnAlexander 3:57541677b13b 32 UnbufferedSerial pc(USBTX, USBRX);
johnAlexander 3:57541677b13b 33 extern "C" void wait_ms(int ms);
johnAlexander 3:57541677b13b 34 #else
charlesmn 0:2800b864165a 35 Serial pc(SERIAL_TX, SERIAL_RX);
johnAlexander 3:57541677b13b 36 #endif
johnAlexander 3:57541677b13b 37
charlesmn 0:2800b864165a 38
charlesmn 0:2800b864165a 39
charlesmn 0:2800b864165a 40
charlesmn 0:2800b864165a 41 VL53LX_Dev_t devCentre;
charlesmn 0:2800b864165a 42 VL53LX_Dev_t devLeft;
charlesmn 0:2800b864165a 43 VL53LX_Dev_t devRight;
charlesmn 0:2800b864165a 44 VL53LX_DEV Dev = &devCentre;
charlesmn 0:2800b864165a 45
charlesmn 0:2800b864165a 46
charlesmn 0:2800b864165a 47
charlesmn 0:2800b864165a 48 /*=================================== Main ==================================
charlesmn 0:2800b864165a 49 =============================================================================*/
charlesmn 0:2800b864165a 50 int main()
charlesmn 0:2800b864165a 51 {
charlesmn 0:2800b864165a 52 int status;
charlesmn 0:2800b864165a 53 uint16_t wordData;
johnAlexander 2:6cc14a15a98c 54
johnAlexander 2:6cc14a15a98c 55 DigitalOut xshutdown(D7);
johnAlexander 2:6cc14a15a98c 56
charlesmn 0:2800b864165a 57
charlesmn 0:2800b864165a 58 static VL53LX_MultiRangingData_t RangingData;
charlesmn 0:2800b864165a 59
charlesmn 0:2800b864165a 60
charlesmn 0:2800b864165a 61 pc.baud(115200); // baud rate is important as printf statements take a lot of time
charlesmn 0:2800b864165a 62 printf("Hello world!\r\n");
charlesmn 0:2800b864165a 63
charlesmn 1:302ec451d4d5 64 vl53L3_DevI2C *dev_I2C = new vl53L3_DevI2C(I2C_SDA, I2C_SCL);
charlesmn 0:2800b864165a 65
charlesmn 0:2800b864165a 66 /* no expansion board so don't use stmpe1600 */
johnAlexander 2:6cc14a15a98c 67 // board = NoShield53L3::instance(dev_I2C, A2, D8, D2);
johnAlexander 3:57541677b13b 68 sensor = new VL53L3(dev_I2C, &xshutdown, A2);
johnAlexander 2:6cc14a15a98c 69
johnAlexander 2:6cc14a15a98c 70 printf("sensor created!\r\n");
charlesmn 0:2800b864165a 71
johnAlexander 2:6cc14a15a98c 72 status = sensor->InitSensor(0x52);
charlesmn 0:2800b864165a 73 if (status) {
johnAlexander 2:6cc14a15a98c 74 printf("Failed to init sensor!\r\n");
charlesmn 0:2800b864165a 75 return 0;
johnAlexander 2:6cc14a15a98c 76 }
johnAlexander 2:6cc14a15a98c 77
johnAlexander 2:6cc14a15a98c 78 printf("sensor initialised! \n");
charlesmn 0:2800b864165a 79
charlesmn 0:2800b864165a 80 uint8_t NewDataReady=0;
charlesmn 0:2800b864165a 81
johnAlexander 2:6cc14a15a98c 82 status = sensor->VL53LX_StartMeasurement();
charlesmn 0:2800b864165a 83 printf("VL53LX_StartMeasurement %d \n",status);
charlesmn 0:2800b864165a 84
charlesmn 0:2800b864165a 85 // loop forever getting measurements
charlesmn 0:2800b864165a 86 while(1)
charlesmn 0:2800b864165a 87 {
johnAlexander 2:6cc14a15a98c 88 status = sensor->VL53LX_WaitMeasurementDataReady();
charlesmn 0:2800b864165a 89
charlesmn 0:2800b864165a 90 if(!status)
charlesmn 0:2800b864165a 91 {
charlesmn 0:2800b864165a 92
johnAlexander 2:6cc14a15a98c 93 status = sensor->VL53LX_GetMultiRangingData(&RangingData);
charlesmn 0:2800b864165a 94
johnAlexander 2:6cc14a15a98c 95 if (status == 0)
charlesmn 0:2800b864165a 96 {
johnAlexander 2:6cc14a15a98c 97 int no_of_object_found = RangingData.NumberOfObjectsFound;
charlesmn 0:2800b864165a 98 if ( no_of_object_found < 10 )
charlesmn 0:2800b864165a 99 {
johnAlexander 2:6cc14a15a98c 100 for(int j=0;j<no_of_object_found;j++)
johnAlexander 2:6cc14a15a98c 101 {
charlesmn 0:2800b864165a 102 if ((RangingData.RangeData[j].RangeStatus == VL53LX_RANGESTATUS_RANGE_VALID) ||
charlesmn 0:2800b864165a 103 (RangingData.RangeData[j].RangeStatus == VL53LX_RANGESTATUS_RANGE_VALID_NO_WRAP_CHECK_FAIL))
johnAlexander 2:6cc14a15a98c 104 { // print data
johnAlexander 2:6cc14a15a98c 105 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 106 j,
charlesmn 0:2800b864165a 107 RangingData.RangeData[j].RangeStatus,
charlesmn 0:2800b864165a 108 RangingData.RangeData[j].RangeMilliMeter,
charlesmn 0:2800b864165a 109 RangingData.RangeData[j].SignalRateRtnMegaCps/65536.0,
charlesmn 0:2800b864165a 110 RangingData.RangeData[j].AmbientRateRtnMegaCps/65536.0);
johnAlexander 2:6cc14a15a98c 111 } //if
charlesmn 0:2800b864165a 112 } //for
charlesmn 0:2800b864165a 113 } // if ( no_of_object_found < 10 )
johnAlexander 2:6cc14a15a98c 114 } // if status VL53LX_GetMultiRangingData
johnAlexander 2:6cc14a15a98c 115 } // if !status VL53LX_WaitMeasurementDataReady
johnAlexander 2:6cc14a15a98c 116 else
johnAlexander 2:6cc14a15a98c 117 {
johnAlexander 2:6cc14a15a98c 118 printf("VL53L1_WaitMeasurementDataReady failed %d \n",status);
johnAlexander 2:6cc14a15a98c 119 }
charlesmn 0:2800b864165a 120
johnAlexander 2:6cc14a15a98c 121 status = sensor->VL53LX_ClearInterruptAndStartMeasurement();
charlesmn 0:2800b864165a 122
charlesmn 0:2800b864165a 123 } // while(1)
charlesmn 0:2800b864165a 124
charlesmn 0:2800b864165a 125 }
johnAlexander 3:57541677b13b 126
johnAlexander 3:57541677b13b 127 #if (MBED_VERSION > 60300)
johnAlexander 3:57541677b13b 128 void wait_ms(int ms)
johnAlexander 3:57541677b13b 129 {
johnAlexander 3:57541677b13b 130 thread_sleep_for(ms);
johnAlexander 3:57541677b13b 131 }
johnAlexander 3:57541677b13b 132 #endif