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
Diff: XNucleo53L1A2.cpp
- Revision:
- 4:924dac74daed
- Parent:
- 3:ac8e3765ece8
- Child:
- 8:074d411a56f3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/XNucleo53L1A2.cpp Mon Nov 09 10:25:21 2020 +0000
@@ -0,0 +1,119 @@
+#include "XNucleo53L1A2.h"
+
+XNucleo53L1A2 *XNucleo53L1A2::_instance = NULL;
+
+
+XNucleo53L1A2 *XNucleo53L1A2::instance(ToF_DevI2C *ext_i2c)
+{
+ if (_instance == NULL) {
+ _instance = new XNucleo53L1A2(ext_i2c);
+ } else {
+ printf("Failed to create XNucleo53L1A2 instance\n\r\r\n");
+ }
+ return _instance;
+}
+
+XNucleo53L1A2 *XNucleo53L1A2::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 XNucleo53L1A2(ext_i2c, gpio1_centre, gpio1_left, gpio1_right);
+ } else {
+ printf("Failed to create XNucleo53L0A1 instance\n\r");
+ }
+ return _instance;
+}
+
+
+int XNucleo53L1A2::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;
+ }
+}