Library for the NucleoVl53L1 shield and the Vl53L1

Dependencies:   VL53L1

Dependents:   VL53L1CB_shield_sensor_polling VL53L1CB_MB2_NoShield_3sensors_interrupt_ranging VL53L1CB_MB5_NoShield_3sensors_interrupt_ranging VL53L1CB_MB5_NoShield_3sensors_interrupt_ranging

Committer:
charlesmn
Date:
Fri Nov 06 10:09:44 2020 +0000
Revision:
0:00a40f7a4114
Child:
2:4c77be1be0e3
Mbed Library for X-Nucleo-53L1A1 expansion board.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charlesmn 0:00a40f7a4114 1 #include "XNucleo53L1A1.h"
charlesmn 0:00a40f7a4114 2
charlesmn 0:00a40f7a4114 3 XNucleo53L1A1 *XNucleo53L1A1::_instance = NULL;
charlesmn 0:00a40f7a4114 4
charlesmn 0:00a40f7a4114 5
charlesmn 0:00a40f7a4114 6 XNucleo53L1A1 *XNucleo53L1A1::instance(ToF_DevI2C *ext_i2c)
charlesmn 0:00a40f7a4114 7 {
charlesmn 0:00a40f7a4114 8 if (_instance == NULL) {
charlesmn 0:00a40f7a4114 9 _instance = new XNucleo53L1A1(ext_i2c);
charlesmn 0:00a40f7a4114 10 } else {
charlesmn 0:00a40f7a4114 11 printf("Failed to create XNucleo53L1A1 instance\n\r\r\n");
charlesmn 0:00a40f7a4114 12 }
charlesmn 0:00a40f7a4114 13 return _instance;
charlesmn 0:00a40f7a4114 14 }
charlesmn 0:00a40f7a4114 15
charlesmn 0:00a40f7a4114 16 XNucleo53L1A1 *XNucleo53L1A1::instance(ToF_DevI2C *ext_i2c,
charlesmn 0:00a40f7a4114 17 PinName gpio1_centre,
charlesmn 0:00a40f7a4114 18 PinName gpio1_left, PinName gpio1_right)
charlesmn 0:00a40f7a4114 19 {
charlesmn 0:00a40f7a4114 20 if (_instance == NULL) {
charlesmn 0:00a40f7a4114 21 // printf("instance %d z\n",ext_i2c);
charlesmn 0:00a40f7a4114 22 _instance = new XNucleo53L1A1(ext_i2c, gpio1_centre, gpio1_left, gpio1_right);
charlesmn 0:00a40f7a4114 23 } else {
charlesmn 0:00a40f7a4114 24 printf("Failed to create XNucleo53L0A1 instance\n\r");
charlesmn 0:00a40f7a4114 25 }
charlesmn 0:00a40f7a4114 26 return _instance;
charlesmn 0:00a40f7a4114 27 }
charlesmn 0:00a40f7a4114 28
charlesmn 0:00a40f7a4114 29
charlesmn 0:00a40f7a4114 30 int XNucleo53L1A1::init_board()
charlesmn 0:00a40f7a4114 31 {
charlesmn 0:00a40f7a4114 32 int status, n_dev = 0;
charlesmn 0:00a40f7a4114 33
charlesmn 0:00a40f7a4114 34 sensor_centre->VL53L1_Off();
charlesmn 0:00a40f7a4114 35 sensor_left->VL53L1_Off();
charlesmn 0:00a40f7a4114 36 sensor_right->VL53L1_Off();
charlesmn 0:00a40f7a4114 37 int i = 0;
charlesmn 0:00a40f7a4114 38
charlesmn 0:00a40f7a4114 39 // On startup or on the shutdown pin going high the VL53l1 devices have a i2c address of 0x52.
charlesmn 0:00a40f7a4114 40 // To initialise then we have to bring up one device at a time This involves raising the shutdown pin for that device,
charlesmn 0:00a40f7a4114 41 // initialising then setting the i2c address to a unique value. Once that is done the shutdown pins don't need to be touched.
charlesmn 0:00a40f7a4114 42
charlesmn 0:00a40f7a4114 43 // set the shutdown pins to be outputs ( they are inputs on power up)
charlesmn 0:00a40f7a4114 44 stmpe1600_exp1->set_gpio_dir(GPIO_15,OUTPUT);
charlesmn 0:00a40f7a4114 45 stmpe1600_exp0->set_gpio_dir(GPIO_14,OUTPUT);
charlesmn 0:00a40f7a4114 46 stmpe1600_exp0->set_gpio_dir(GPIO_15,OUTPUT);
charlesmn 0:00a40f7a4114 47
charlesmn 0:00a40f7a4114 48 // set the shutdown pins to low, this will reset the VL53l1s
charlesmn 0:00a40f7a4114 49 stmpe1600_exp1->clear_gpio(GPIO_15);
charlesmn 0:00a40f7a4114 50 stmpe1600_exp0->clear_gpio(GPIO_14);
charlesmn 0:00a40f7a4114 51 stmpe1600_exp0->clear_gpio(GPIO_15);
charlesmn 0:00a40f7a4114 52
charlesmn 0:00a40f7a4114 53 // select the first VL53l1. It will have i2c address of 0x52. Set the i2c address to
charlesmn 0:00a40f7a4114 54 //NEW_SENSOR_CENTRE_ADDRESS
charlesmn 0:00a40f7a4114 55 stmpe1600_exp1->set_gpio(GPIO_15);
charlesmn 0:00a40f7a4114 56 status = sensor_centre->InitSensor(NEW_SENSOR_CENTRE_ADDRESS);
charlesmn 0:00a40f7a4114 57 if (status) {
charlesmn 0:00a40f7a4114 58 delete sensor_centre;
charlesmn 0:00a40f7a4114 59 delete xshutdown_centre;
charlesmn 0:00a40f7a4114 60 sensor_centre = NULL;
charlesmn 0:00a40f7a4114 61 xshutdown_centre = NULL;
charlesmn 0:00a40f7a4114 62 printf("Sensor centre not present\n\r");
charlesmn 0:00a40f7a4114 63 } else {
charlesmn 0:00a40f7a4114 64 printf("Sensor centre present\n\r");
charlesmn 0:00a40f7a4114 65 n_dev++;
charlesmn 0:00a40f7a4114 66 }
charlesmn 0:00a40f7a4114 67 wait_ms(50); // NEEDS A DELAY BETWEEN SENSORS
charlesmn 0:00a40f7a4114 68 // select the second VL53l1. It will have i2c address of 0x52. Set the i2c address to
charlesmn 0:00a40f7a4114 69 //NEW_SENSOR_LEFT_ADDRESS
charlesmn 0:00a40f7a4114 70
charlesmn 0:00a40f7a4114 71 stmpe1600_exp0->set_gpio(GPIO_14);
charlesmn 0:00a40f7a4114 72
charlesmn 0:00a40f7a4114 73 status = sensor_left->InitSensor(NEW_SENSOR_LEFT_ADDRESS);
charlesmn 0:00a40f7a4114 74 if (status) {
charlesmn 0:00a40f7a4114 75 delete sensor_left;
charlesmn 0:00a40f7a4114 76 delete xshutdown_left;
charlesmn 0:00a40f7a4114 77 sensor_left = NULL;
charlesmn 0:00a40f7a4114 78 xshutdown_left = NULL;
charlesmn 0:00a40f7a4114 79 printf("Sensor left not present\n\r");
charlesmn 0:00a40f7a4114 80 } else {
charlesmn 0:00a40f7a4114 81 printf("Sensor left present\n\r");
charlesmn 0:00a40f7a4114 82 n_dev++;
charlesmn 0:00a40f7a4114 83 }
charlesmn 0:00a40f7a4114 84 wait_ms(50);
charlesmn 0:00a40f7a4114 85 // select the 3rd VL53l1. It will have i2c address of 0x52. Set the i2c address to
charlesmn 0:00a40f7a4114 86 //NEW_SENSOR_RIGHT_ADDRESS
charlesmn 0:00a40f7a4114 87 stmpe1600_exp0->set_gpio(GPIO_15);
charlesmn 0:00a40f7a4114 88 status = sensor_right->InitSensor(NEW_SENSOR_RIGHT_ADDRESS);
charlesmn 0:00a40f7a4114 89 if (status) {
charlesmn 0:00a40f7a4114 90 delete sensor_right;
charlesmn 0:00a40f7a4114 91 delete xshutdown_right;
charlesmn 0:00a40f7a4114 92 sensor_right = NULL;
charlesmn 0:00a40f7a4114 93 xshutdown_right = NULL;
charlesmn 0:00a40f7a4114 94 printf("Sensor right not present\n\r");
charlesmn 0:00a40f7a4114 95 } else {
charlesmn 0:00a40f7a4114 96 printf("Sensor right present\n\r");
charlesmn 0:00a40f7a4114 97 n_dev++;
charlesmn 0:00a40f7a4114 98 }
charlesmn 0:00a40f7a4114 99 wait_ms(50);
charlesmn 0:00a40f7a4114 100 if (n_dev == 0) {
charlesmn 0:00a40f7a4114 101 return 1;
charlesmn 0:00a40f7a4114 102 } else {
charlesmn 0:00a40f7a4114 103 return 0;
charlesmn 0:00a40f7a4114 104 }
charlesmn 0:00a40f7a4114 105 }
charlesmn 0:00a40f7a4114 106
charlesmn 0:00a40f7a4114 107 /*
charlesmn 0:00a40f7a4114 108 int XNucleo53L1A1::init_board()
charlesmn 0:00a40f7a4114 109 {
charlesmn 0:00a40f7a4114 110 int status, n_dev = 0;
charlesmn 0:00a40f7a4114 111
charlesmn 0:00a40f7a4114 112 sensor_centre->VL53L1_Off();
charlesmn 0:00a40f7a4114 113 sensor_left->VL53L1_Off();
charlesmn 0:00a40f7a4114 114 sensor_right->VL53L1_Off();
charlesmn 0:00a40f7a4114 115 int i = 0;
charlesmn 0:00a40f7a4114 116
charlesmn 0:00a40f7a4114 117 // On startup or on the shutdown pin going high the VL53l1 devices have a i2c address of 0x52.
charlesmn 0:00a40f7a4114 118 // To initialise then we have to bring up one device at a time This involves raising the shutdown pin for that device,
charlesmn 0:00a40f7a4114 119 // initialising then setting the i2c address to a unique value. Once that is done the shutdown pins don't need to be touched.
charlesmn 0:00a40f7a4114 120
charlesmn 0:00a40f7a4114 121 // set the shutdown pins to be outputs ( they are inputs on power up)
charlesmn 0:00a40f7a4114 122 stmpe1600_exp1->set_gpio_dir(GPIO_15,OUTPUT);
charlesmn 0:00a40f7a4114 123 stmpe1600_exp0->set_gpio_dir(GPIO_14,OUTPUT);
charlesmn 0:00a40f7a4114 124 stmpe1600_exp0->set_gpio_dir(GPIO_15,OUTPUT);
charlesmn 0:00a40f7a4114 125
charlesmn 0:00a40f7a4114 126 // set the shutdown pins to low, this will reset the VL53l1s
charlesmn 0:00a40f7a4114 127 stmpe1600_exp1->clear_gpio(GPIO_15);
charlesmn 0:00a40f7a4114 128 stmpe1600_exp0->clear_gpio(GPIO_14);
charlesmn 0:00a40f7a4114 129 stmpe1600_exp0->clear_gpio(GPIO_15);
charlesmn 0:00a40f7a4114 130
charlesmn 0:00a40f7a4114 131 // select the first VL53l1. It will have i2c address of 0x52. Set the i2c address to
charlesmn 0:00a40f7a4114 132 //NEW_SENSOR_CENTRE_ADDRESS
charlesmn 0:00a40f7a4114 133 stmpe1600_exp1->set_gpio(GPIO_15);
charlesmn 0:00a40f7a4114 134 status = sensor_centre->InitSensor(NEW_SENSOR_CENTRE_ADDRESS);
charlesmn 0:00a40f7a4114 135 if (status) {
charlesmn 0:00a40f7a4114 136 delete sensor_centre;
charlesmn 0:00a40f7a4114 137 delete xshutdown_centre;
charlesmn 0:00a40f7a4114 138 sensor_centre = NULL;
charlesmn 0:00a40f7a4114 139 xshutdown_centre = NULL;
charlesmn 0:00a40f7a4114 140 printf("Sensor centre not present\n\r");
charlesmn 0:00a40f7a4114 141 } else {
charlesmn 0:00a40f7a4114 142 printf("Sensor centre present\n\r");
charlesmn 0:00a40f7a4114 143 n_dev++;
charlesmn 0:00a40f7a4114 144 }
charlesmn 0:00a40f7a4114 145 wait_ms(50); // NEEDS A DELAY BETWEEN SENSORS
charlesmn 0:00a40f7a4114 146 // select the second VL53l1. It will have i2c address of 0x52. Set the i2c address to
charlesmn 0:00a40f7a4114 147 //NEW_SENSOR_LEFT_ADDRESS
charlesmn 0:00a40f7a4114 148
charlesmn 0:00a40f7a4114 149 stmpe1600_exp0->set_gpio(GPIO_14);
charlesmn 0:00a40f7a4114 150
charlesmn 0:00a40f7a4114 151 status = sensor_left->InitSensor(NEW_SENSOR_LEFT_ADDRESS);
charlesmn 0:00a40f7a4114 152 if (status) {
charlesmn 0:00a40f7a4114 153 delete sensor_left;
charlesmn 0:00a40f7a4114 154 delete xshutdown_left;
charlesmn 0:00a40f7a4114 155 sensor_left = NULL;
charlesmn 0:00a40f7a4114 156 xshutdown_left = NULL;
charlesmn 0:00a40f7a4114 157 printf("Sensor left not present\n\r");
charlesmn 0:00a40f7a4114 158 } else {
charlesmn 0:00a40f7a4114 159 printf("Sensor left present\n\r");
charlesmn 0:00a40f7a4114 160 n_dev++;
charlesmn 0:00a40f7a4114 161 }
charlesmn 0:00a40f7a4114 162 wait_ms(50);
charlesmn 0:00a40f7a4114 163 // select the 3rd VL53l1. It will have i2c address of 0x52. Set the i2c address to
charlesmn 0:00a40f7a4114 164 //NEW_SENSOR_RIGHT_ADDRESS
charlesmn 0:00a40f7a4114 165 stmpe1600_exp0->set_gpio(GPIO_15);
charlesmn 0:00a40f7a4114 166 status = sensor_right->InitSensor(NEW_SENSOR_RIGHT_ADDRESS);
charlesmn 0:00a40f7a4114 167 if (status) {
charlesmn 0:00a40f7a4114 168 delete sensor_right;
charlesmn 0:00a40f7a4114 169 delete xshutdown_right;
charlesmn 0:00a40f7a4114 170 sensor_right = NULL;
charlesmn 0:00a40f7a4114 171 xshutdown_right = NULL;
charlesmn 0:00a40f7a4114 172 printf("Sensor right not present\n\r");
charlesmn 0:00a40f7a4114 173 } else {
charlesmn 0:00a40f7a4114 174 printf("Sensor right present\n\r");
charlesmn 0:00a40f7a4114 175 n_dev++;
charlesmn 0:00a40f7a4114 176 }
charlesmn 0:00a40f7a4114 177 wait_ms(50);
charlesmn 0:00a40f7a4114 178 if (n_dev == 0) {
charlesmn 0:00a40f7a4114 179 return 1;
charlesmn 0:00a40f7a4114 180 } else {
charlesmn 0:00a40f7a4114 181 return 0;
charlesmn 0:00a40f7a4114 182 }
charlesmn 0:00a40f7a4114 183 }
charlesmn 0:00a40f7a4114 184 */