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: VL53L1CB
Dependents: VL53L1CB_NoShield_1sensor_polling_multizone_MB6 VL53L1CB_NoShield_3sensors_interrupt_ranging_MB6 VL53L1CB_NoShield_MB6_3sensors_interrupt_ranging VL53L1CB_shield_1sensor_interrupt_auton ... more
XNucleo53L1A1.cpp
- Committer:
- charlesmn
- Date:
- 2020-11-08
- Revision:
- 3:ac8e3765ece8
- Parent:
- 2:4c77be1be0e3
File content as of revision 3:ac8e3765ece8:
#include "XNucleo53L1A1.h"
XNucleo53L1A1 *XNucleo53L1A1::_instance = NULL;
XNucleo53L1A1 *XNucleo53L1A1::instance(ToF_DevI2C *ext_i2c)
{
if (_instance == NULL) {
_instance = new XNucleo53L1A1(ext_i2c);
} else {
printf("Failed to create XNucleo53L1A1 instance\n\r\r\n");
}
return _instance;
}
XNucleo53L1A1 *XNucleo53L1A1::instance(ToF_DevI2C *ext_i2c,
PinName gpio1_centre,
PinName gpio1_left, PinName gpio1_right)
{
if (_instance == NULL) {
// printf("instance %d z\n",ext_i2c);
_instance = new XNucleo53L1A1(ext_i2c, gpio1_centre, gpio1_left, gpio1_right);
} else {
printf("Failed to create XNucleo53L0A1 instance\n\r");
}
return _instance;
}
int XNucleo53L1A1::init_board()
{
int status, n_dev = 0;
sensor_centre->VL53L1_Off();
sensor_left->VL53L1_Off();
sensor_right->VL53L1_Off();
int i = 0;
// On startup or on the shutdown pin going high the VL53l1 devices have a i2c address of 0x52.
// To initialise then we have to bring up one device at a time This involves raising the shutdown pin for that device,
// initialising then setting the i2c address to a unique value. Once that is done the shutdown pins don't need to be touched.
// set the shutdown pins to be outputs ( they are inputs on power up)
stmpe1600_exp1->set_gpio_dir(GPIO_15,OUTPUT);
stmpe1600_exp0->set_gpio_dir(GPIO_14,OUTPUT);
stmpe1600_exp0->set_gpio_dir(GPIO_15,OUTPUT);
// set the shutdown pins to low, this will reset the VL53l1s
stmpe1600_exp1->clear_gpio(GPIO_15);
stmpe1600_exp0->clear_gpio(GPIO_14);
stmpe1600_exp0->clear_gpio(GPIO_15);
// select the first VL53l1. It will have i2c address of 0x52. Set the i2c address to
//NEW_SENSOR_CENTRE_ADDRESS
stmpe1600_exp1->set_gpio(GPIO_15);
status = sensor_centre->InitSensor(NEW_SENSOR_CENTRE_ADDRESS);
if (status) {
delete sensor_centre;
delete xshutdown_centre;
sensor_centre = NULL;
xshutdown_centre = NULL;
printf("Sensor centre not present\n\r");
} else {
printf("Sensor centre present\n\r");
n_dev++;
}
#if (MBED_VERSION > 60300)
thread_sleep_for(2);
#else
wait_ms(2); // NEEDS A DELAY BETWEEN SENSORS
#endif
// select the second VL53l1. It will have i2c address of 0x52. Set the i2c address to
//NEW_SENSOR_LEFT_ADDRESS
stmpe1600_exp0->set_gpio(GPIO_14);
status = sensor_left->InitSensor(NEW_SENSOR_LEFT_ADDRESS);
if (status) {
delete sensor_left;
delete xshutdown_left;
sensor_left = NULL;
xshutdown_left = NULL;
printf("Sensor left not present\n\r");
} else {
printf("Sensor left present\n\r");
n_dev++;
}
#if (MBED_VERSION > 60300)
thread_sleep_for(50);
#else
wait_ms(50); // NEEDS A DELAY BETWEEN SENSORS
#endif
// select the 3rd VL53l1. It will have i2c address of 0x52. Set the i2c address to
//NEW_SENSOR_RIGHT_ADDRESS
stmpe1600_exp0->set_gpio(GPIO_15);
status = sensor_right->InitSensor(NEW_SENSOR_RIGHT_ADDRESS);
if (status) {
delete sensor_right;
delete xshutdown_right;
sensor_right = NULL;
xshutdown_right = NULL;
printf("Sensor right not present\n\r");
} else {
printf("Sensor right present\n\r");
n_dev++;
}
#if (MBED_VERSION > 60300)
thread_sleep_for(50);
#else
wait_ms(50); // NEEDS A DELAY BETWEEN SENSORS
#endif
if (n_dev == 0) {
return 1;
} else {
return 0;
}
}