Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed VL53L1ExpansionBoard
Revision 0:43a14bd8164e, committed 2020-10-27
- Comitter:
- charlesmn
- Date:
- Tue Oct 27 10:08:27 2020 +0000
- Commit message:
- A sample program getting measurements from a VL53L1 ToF sensor which is directly connected to the STM32F401. ; Only copes with one sensor. Polls for measurements. VL53L1 is operated in multizone mode. MBed V2.
Changed in this revision
diff -r 000000000000 -r 43a14bd8164e VL53L1ExpansionBoard.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/VL53L1ExpansionBoard.lib Tue Oct 27 10:08:27 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/teams/ST-Expansion-SW-Team/code/VL53L1ExpansionBoard/#91e6528a6780
diff -r 000000000000 -r 43a14bd8164e main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Tue Oct 27 10:08:27 2020 +0000
@@ -0,0 +1,180 @@
+/*
+ * This application performs range measurements
+ * connecting directly to the onboard embedded centre sensor, in multizone, polling mode.
+ * Measured ranges are ouput on the Serial Port, running at 115200 baud.
+ *
+ *
+ * This is designed to work with MBed V2 ,MBed V5 and MBed V6.
+ *
+ *
+ * The Reset button can be used to restart the program.
+ */
+
+#include <stdio.h>
+
+#include "mbed.h"
+#include "NoShield53L1A1.h"
+#include "ToF_I2C.h"
+#include <time.h>
+
+
+// define the i2c comms pins
+#define I2C_SDA D14
+#define I2C_SCL D15
+
+
+
+static NoShield53L1 *board=NULL;
+Serial pc(SERIAL_TX, SERIAL_RX);
+
+void process_interrupt( VL53L1X * sensor,VL53L1_DEV dev );
+void print_results( int devSpiNumber, VL53L1_MultiRangingData_t *pMultiRangingData );
+
+VL53L1_Dev_t devCentre;
+VL53L1_Dev_t devLeft;
+VL53L1_Dev_t devRight;
+VL53L1_DEV Dev = &devCentre;
+
+
+/*=================================== Main ==================================
+=============================================================================*/
+int main()
+{
+ int status;
+ VL53L1X * Sensor;
+ uint16_t wordData;
+
+
+ pc.baud(115200); // baud rate is important as printf statements take a lot of time
+ printf("Polling single multizone\r\n");
+
+// create i2c interface
+ ToF_DevI2C *dev_I2C = new ToF_DevI2C(I2C_SDA, I2C_SCL);
+
+ /* creates the 53L1A1 expansion board singleton obj */
+ board = NoShield53L1::instance(dev_I2C, A2, D8, D2);
+
+ printf("board created!\r\n");
+
+ /* define the shutdown pins */
+ status = board->init_board(D9,D4,D3);
+ if (status) {
+ printf("Failed to init board!\r\n");
+ return 0;
+ }
+
+
+ printf("board initiated! - %d\r\n", status);
+ // create the sensor controller classes
+
+
+
+ Dev=&devCentre;
+ Sensor=board->sensor_centre;
+ Dev->i2c_slave_address = NEW_SENSOR_CENTRE_ADDRESS;
+ printf("configuring centre channel \n");
+
+
+// configure the sensors
+ Dev->comms_speed_khz = 400;
+
+ Dev->comms_type = 1;
+
+ Sensor->VL53L1_RdWord(Dev, 0x01, &wordData);
+ printf("VL53L1X: %02X %d\n\r", wordData,Dev->i2c_slave_address);
+/* Device Initialization and setting */
+ status = Sensor->vl53L1_DataInit();
+ status = Sensor->vl53L1_StaticInit();
+ status = Sensor->vl53L1_SetPresetMode( VL53L1_PRESETMODE_MULTIZONES_SCANNING);
+ status = Sensor->vl53L1_SetDistanceMode( VL53L1_DISTANCEMODE_LONG);
+// status = Sensor->vl53L1_SetMeasurementTimingBudgetMicroSeconds( 100 * 1000);
+// status = Sensor->vl53L1_SetInterMeasurementPeriodMilliSeconds( 100);
+
+
+ VL53L1_RoiConfig_t roiConfig;
+ roiConfig.NumberOfRoi =3;
+ roiConfig.UserRois[0].TopLeftX = 0;
+ roiConfig.UserRois[0].TopLeftY = 9;
+ roiConfig.UserRois[0].BotRightX = 4;
+ roiConfig.UserRois[0].BotRightY = 5;
+ roiConfig.UserRois[1].TopLeftX = 5;
+ roiConfig.UserRois[1].TopLeftY = 9;
+ roiConfig.UserRois[1].BotRightX = 9;
+ roiConfig.UserRois[1].BotRightY = 4;
+ roiConfig.UserRois[2].TopLeftX = 11;
+ roiConfig.UserRois[2].TopLeftY = 9;
+ roiConfig.UserRois[2].BotRightX = 15;
+ roiConfig.UserRois[2].BotRightY = 5;
+ status = Sensor->vl53L1_SetROI( &roiConfig);
+ printf("VL53L1_SetROI %d \n",status);
+
+ devCentre.i2c_slave_address = NEW_SENSOR_CENTRE_ADDRESS;
+ status = board->sensor_centre->vl53L1_StartMeasurement();
+
+ // looping polling for results
+ while (1)
+ {
+ VL53L1_MultiRangingData_t MultiRangingData;
+ VL53L1_MultiRangingData_t *pMultiRangingData = &MultiRangingData;
+
+ // wait for result
+ status = board->sensor_centre->vl53L1_WaitMeasurementDataReady();
+ // get the result
+ status = board->sensor_centre->vl53L1_GetMultiRangingData( pMultiRangingData);
+ // if valid, print it
+ if(status==0) {
+ print_results(devCentre.i2c_slave_address, pMultiRangingData );
+ status = board->sensor_centre->vl53L1_ClearInterruptAndStartMeasurement();
+
+ } //if(status==0)
+ else
+ {
+ printf("VL53L1_GetMultiRangingData centre %d \n",status);
+ }
+
+ wait_ms( 1 * 10);
+ }
+}
+
+
+
+ // prints the range result seen above
+void print_results( int devSpiNumber, VL53L1_MultiRangingData_t *pMultiRangingData )
+{
+ int no_of_object_found=pMultiRangingData->NumberOfObjectsFound;
+
+ int RoiNumber=pMultiRangingData->RoiNumber;
+// int RoiStatus=pMultiRangingData->RoiStatus;
+
+ if (( no_of_object_found < 10 ) && ( no_of_object_found != 0))
+ {
+
+ // printf("MZI Count=%5d, ", pMultiRangingData->StreamCount);
+ // printf("RoiNumber%1d, ", RoiNumber);
+ // printf("RoiStatus=%1d, \n", RoiStatus);
+ for(int j=0;j<no_of_object_found;j++){
+ if ((pMultiRangingData->RangeData[j].RangeStatus == VL53L1_RANGESTATUS_RANGE_VALID) ||
+ (pMultiRangingData->RangeData[j].RangeStatus == VL53L1_RANGESTATUS_RANGE_VALID_NO_WRAP_CHECK_FAIL))
+ {
+ printf("*****************\t spiAddr=%d \t RoiNumber=%d \t status=%d, \t D=%5dmm, \t Signal=%2.2f Mcps, \t Ambient=%2.2f Mcps \n",
+ devSpiNumber,
+ RoiNumber,
+ pMultiRangingData->RangeData[j].RangeStatus,
+ pMultiRangingData->RangeData[j].RangeMilliMeter,
+ pMultiRangingData->RangeData[j].SignalRateRtnMegaCps/65536.0,
+ pMultiRangingData->RangeData[j].AmbientRateRtnMegaCps/65536.0);
+ }
+ else
+ {
+// printf("RangeStatus %d %d\n",j, pMultiRangingData->RangeData[j].RangeStatus);
+ }
+ }
+ } // if (( no_of_object_found < 10 ) && ( no_of_object_found != 0))
+ else
+ {
+// printf("no_of_object_found %d \n",no_of_object_found);
+ }
+
+}
+
+
\ No newline at end of file
diff -r 000000000000 -r 43a14bd8164e mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Oct 27 10:08:27 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file