Initial release to ST Sw Expansion Team Repo.

Dependencies:   VL53L3CX_mbed

Dependents:   VL53L3CX_Shield_Polling VL53L3CX_Shield_Polling VL53L3CX_Shield_Polling_v5_15 VL53L3_shield_1sensor_polling_Mb515 ... more

Committer:
johnAlexander
Date:
Tue Nov 10 08:43:07 2020 +0000
Revision:
11:cccb5f470785
Parent:
10:12c0dd3cba9b
Code tidy-up.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
johnAlexander 7:c0e18dd78c42 1 #include "XNucleo53L3A2.h"
johnAlexander 3:4ed68a07058d 2
johnAlexander 7:c0e18dd78c42 3 XNucleo53L3A2 *XNucleo53L3A2::_instance = NULL;
johnAlexander 3:4ed68a07058d 4
johnAlexander 3:4ed68a07058d 5
johnAlexander 7:c0e18dd78c42 6 XNucleo53L3A2 *XNucleo53L3A2::instance(vl53L3_DevI2C *ext_i2c)
johnAlexander 3:4ed68a07058d 7 {
johnAlexander 3:4ed68a07058d 8 if (_instance == NULL) {
johnAlexander 7:c0e18dd78c42 9 _instance = new XNucleo53L3A2(ext_i2c);
johnAlexander 3:4ed68a07058d 10 } else {
johnAlexander 7:c0e18dd78c42 11 printf("Failed to create XNucleo53L3A2 instance\n\r\r\n");
johnAlexander 3:4ed68a07058d 12 }
johnAlexander 3:4ed68a07058d 13 return _instance;
johnAlexander 3:4ed68a07058d 14 }
johnAlexander 3:4ed68a07058d 15
johnAlexander 7:c0e18dd78c42 16 XNucleo53L3A2 *XNucleo53L3A2::instance(vl53L3_DevI2C *ext_i2c,
johnAlexander 3:4ed68a07058d 17 PinName gpio1_centre,
johnAlexander 3:4ed68a07058d 18 PinName gpio1_left, PinName gpio1_right)
johnAlexander 3:4ed68a07058d 19 {
johnAlexander 3:4ed68a07058d 20 if (_instance == NULL) {
johnAlexander 3:4ed68a07058d 21 // printf("instance %d z\n",ext_i2c);
johnAlexander 7:c0e18dd78c42 22 _instance = new XNucleo53L3A2(ext_i2c, gpio1_centre, gpio1_left, gpio1_right);
johnAlexander 3:4ed68a07058d 23 } else {
johnAlexander 7:c0e18dd78c42 24 printf("Failed to create XNucleo53L3A2 instance\n\r");
johnAlexander 3:4ed68a07058d 25 }
johnAlexander 3:4ed68a07058d 26 return _instance;
johnAlexander 3:4ed68a07058d 27 }
johnAlexander 3:4ed68a07058d 28
johnAlexander 3:4ed68a07058d 29
johnAlexander 7:c0e18dd78c42 30 int XNucleo53L3A2::init_board()
johnAlexander 3:4ed68a07058d 31 {
johnAlexander 3:4ed68a07058d 32 printf("init_board \n");
johnAlexander 3:4ed68a07058d 33 int status, n_dev = 0;
johnAlexander 3:4ed68a07058d 34
johnAlexander 10:12c0dd3cba9b 35 sensor_centre->VL53L3_Off();
johnAlexander 10:12c0dd3cba9b 36 sensor_left->VL53L3_Off();
johnAlexander 10:12c0dd3cba9b 37 sensor_right->VL53L3_Off();
johnAlexander 3:4ed68a07058d 38
johnAlexander 3:4ed68a07058d 39
johnAlexander 3:4ed68a07058d 40
johnAlexander 3:4ed68a07058d 41 // On startup or on the shutdown pin going high the VL53l1 devices have a i2c address of 0x52.
johnAlexander 3:4ed68a07058d 42 // To initialise then we have to bring up one device at a time This involves raising the shutdown pin for that device,
johnAlexander 3:4ed68a07058d 43 // initialising then setting the i2c address to a unique value. Once that is done the shutdown pins don't need to be touched.
johnAlexander 3:4ed68a07058d 44
johnAlexander 3:4ed68a07058d 45 // set the shutdown pins to be outputs ( they are inputs on power up)
johnAlexander 3:4ed68a07058d 46 stmpe1600_exp1->set_gpio_dir(GPIO_15,OUTPUT);
johnAlexander 3:4ed68a07058d 47 stmpe1600_exp0->set_gpio_dir(GPIO_14,OUTPUT);
johnAlexander 3:4ed68a07058d 48 stmpe1600_exp0->set_gpio_dir(GPIO_15,OUTPUT);
johnAlexander 3:4ed68a07058d 49
johnAlexander 3:4ed68a07058d 50 // set the shutdown pins to low, this will reset the VL53l1s
johnAlexander 3:4ed68a07058d 51 stmpe1600_exp1->clear_gpio(GPIO_15);
johnAlexander 3:4ed68a07058d 52 stmpe1600_exp0->clear_gpio(GPIO_14);
johnAlexander 3:4ed68a07058d 53 stmpe1600_exp0->clear_gpio(GPIO_15);
johnAlexander 3:4ed68a07058d 54
johnAlexander 11:cccb5f470785 55 // select the first VL53l3. It will have i2c address of 0x52. Set the i2c address to
johnAlexander 3:4ed68a07058d 56 //NEW_SENSOR_CENTRE_ADDRESS
johnAlexander 3:4ed68a07058d 57 stmpe1600_exp1->set_gpio(GPIO_15);
johnAlexander 3:4ed68a07058d 58 printf("InitSensor \n");
johnAlexander 3:4ed68a07058d 59 status = sensor_centre->InitSensor(NEW_SENSOR_CENTRE_ADDRESS);
johnAlexander 3:4ed68a07058d 60 if (status) {
johnAlexander 3:4ed68a07058d 61 delete sensor_centre;
johnAlexander 3:4ed68a07058d 62 delete xshutdown_centre;
johnAlexander 3:4ed68a07058d 63 sensor_centre = NULL;
johnAlexander 3:4ed68a07058d 64 xshutdown_centre = NULL;
johnAlexander 3:4ed68a07058d 65 printf("Sensor centre not present\n\r");
johnAlexander 3:4ed68a07058d 66 } else {
johnAlexander 3:4ed68a07058d 67 printf("Sensor centre present\n\r");
johnAlexander 3:4ed68a07058d 68 n_dev++;
johnAlexander 3:4ed68a07058d 69 }
johnAlexander 3:4ed68a07058d 70
johnAlexander 11:cccb5f470785 71 // select the second VL53l3. It will have i2c address of 0x52. Set the i2c address to
johnAlexander 3:4ed68a07058d 72 //NEW_SENSOR_LEFT_ADDRESS
johnAlexander 3:4ed68a07058d 73
johnAlexander 3:4ed68a07058d 74 stmpe1600_exp0->set_gpio(GPIO_14);
johnAlexander 3:4ed68a07058d 75
johnAlexander 3:4ed68a07058d 76 status = sensor_left->InitSensor(NEW_SENSOR_LEFT_ADDRESS);
johnAlexander 3:4ed68a07058d 77 if (status) {
johnAlexander 3:4ed68a07058d 78 delete sensor_left;
johnAlexander 3:4ed68a07058d 79 delete xshutdown_left;
johnAlexander 3:4ed68a07058d 80 sensor_left = NULL;
johnAlexander 3:4ed68a07058d 81 xshutdown_left = NULL;
johnAlexander 3:4ed68a07058d 82 printf("Sensor left not present\n\r");
johnAlexander 3:4ed68a07058d 83 } else {
johnAlexander 3:4ed68a07058d 84 printf("Sensor left present\n\r");
johnAlexander 3:4ed68a07058d 85 n_dev++;
johnAlexander 3:4ed68a07058d 86 }
johnAlexander 3:4ed68a07058d 87
johnAlexander 11:cccb5f470785 88 // select the 3rd VL53l3. It will have i2c address of 0x52. Set the i2c address to
johnAlexander 3:4ed68a07058d 89 //NEW_SENSOR_RIGHT_ADDRESS
johnAlexander 3:4ed68a07058d 90 stmpe1600_exp0->set_gpio(GPIO_15);
johnAlexander 3:4ed68a07058d 91 status = sensor_right->InitSensor(NEW_SENSOR_RIGHT_ADDRESS);
johnAlexander 3:4ed68a07058d 92 if (status) {
johnAlexander 3:4ed68a07058d 93 delete sensor_right;
johnAlexander 3:4ed68a07058d 94 delete xshutdown_right;
johnAlexander 3:4ed68a07058d 95 sensor_right = NULL;
johnAlexander 3:4ed68a07058d 96 xshutdown_right = NULL;
johnAlexander 3:4ed68a07058d 97 printf("Sensor right not present\n\r");
johnAlexander 3:4ed68a07058d 98 } else {
johnAlexander 3:4ed68a07058d 99 printf("Sensor right present\n\r");
johnAlexander 3:4ed68a07058d 100 n_dev++;
johnAlexander 3:4ed68a07058d 101 }
johnAlexander 3:4ed68a07058d 102
johnAlexander 3:4ed68a07058d 103 return 0;
johnAlexander 3:4ed68a07058d 104 if (n_dev == 0) {
johnAlexander 3:4ed68a07058d 105 return 1;
johnAlexander 3:4ed68a07058d 106 } else {
johnAlexander 3:4ed68a07058d 107 return 0;
johnAlexander 3:4ed68a07058d 108 }
johnAlexander 3:4ed68a07058d 109 }
johnAlexander 3:4ed68a07058d 110