ST Expansion SW Team / X_NUCLEO_6180

Dependencies:   Vl6180

Dependents:   VL6180_MB2_1sensor_singleshot_poll VL6180_MB5_1sensor_singleshot_wait VL6180_MB2_4sensors_interrupts VL6180_MB515_4sensors_interrupts ... more

Committer:
charlesmn
Date:
Tue Nov 10 16:10:34 2020 +0000
Revision:
3:862286610dfd
Parent:
2:04a5cf34e1a9
Used the correct version of RangeSensor.h which allows the program to build. We want the RangeSensor.h that includes get_distance().

Who changed what in which revision?

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