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: Vl6180
Dependents: VL6180_MB2_1sensor_singleshot_poll VL6180_MB5_1sensor_singleshot_wait VL6180_MB2_4sensors_interrupts VL6180_MB515_4sensors_interrupts ... more
XNucleo6810.cpp@3:862286610dfd, 2020-11-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |