
Sample ranging example. Suporting up to 3 sensors. Sending result from X-NUCLEO-53L0A1 both on com port and on digit display. User button IRQ used for switching displayed sensor
Dependencies: mbed X_NUCLEO_53L0A1
Fork of Display_53L0A1_WithSatelites by
Revision 3:ff6e42401073, committed 2017-08-08
- Comitter:
- johnAlexander
- Date:
- Tue Aug 08 07:59:12 2017 +0000
- Parent:
- 2:a3bc0a0af780
- Child:
- 4:3c5cc844a7e5
- Commit message:
- Align application with ARM mbed coding style.
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Aug 07 15:38:43 2017 +0000 +++ b/main.cpp Tue Aug 08 07:59:12 2017 +0000 @@ -7,63 +7,59 @@ /* This VL53L0X Expansion board test application performs a range measurement in polling mode on the sensors. The demo supports the centre sensor and up to 2 satellites boards. - - The User Blue button controls the selected sensor. Measurements from this sensor are displayed + + The User Blue button controls the selected sensor. Measurements from this sensor are displayed on the 4-digit display. Data collected from all sensors is also sent on the com port. - - The Reset button is used to restart the program. + + The Reset button is used to restart the program. */ -#define VL53L0_I2C_SDA D14 -#define VL53L0_I2C_SCL D15 +#define VL53L0_I2C_SDA D14 +#define VL53L0_I2C_SCL D15 -static X_NUCLEO_53L0A1 *board=NULL; +static X_NUCLEO_53L0A1 *board = NULL; VL53L0X_RangingMeasurementData_t data_sensor; OperatingMode operating_mode; - + /* Current sensor number*/ int currentSensor = 0; -/* Installed sensors count */ -int sensorCnt = 0; +/* Installed sensors count */ +int sensorCnt = 0; /* array storing pointers to the sensors and their prefixes for the display purpouse*/ -struct Sensors -{ +struct Sensors { char prefix; VL53L0X *sensorPtr; } installedSensors[3]; int init_sensors_array() { - int status = 1; - /* start the measure on sensor top */ - if (NULL != board->sensor_centre) - { - installedSensors[sensorCnt].prefix = 'C'; - installedSensors[sensorCnt].sensorPtr = board->sensor_centre; - ++sensorCnt; - status=board->sensor_centre->start_measurement(operating_mode, NULL); - } - /* start the measure on sensor left if present */ - if (NULL != board->sensor_left) - { - installedSensors[sensorCnt].prefix='L'; + int status = 1; + /* start the measure on sensor top */ + if (NULL != board->sensor_centre) { + installedSensors[sensorCnt].prefix = 'C'; + installedSensors[sensorCnt].sensorPtr = board->sensor_centre; + ++sensorCnt; + status = board->sensor_centre->start_measurement(operating_mode, NULL); + } + /* start the measure on sensor left if present */ + if (NULL != board->sensor_left) { + installedSensors[sensorCnt].prefix = 'L'; installedSensors[sensorCnt].sensorPtr = board->sensor_left; - ++sensorCnt; - status=board->sensor_left->start_measurement(operating_mode, NULL); - } - /* start the measure on sensor right if present */ - if (NULL != board->sensor_right) - { + ++sensorCnt; + status = board->sensor_left->start_measurement(operating_mode, NULL); + } + /* start the measure on sensor right if present */ + if (NULL != board->sensor_right) { installedSensors[sensorCnt].prefix = 'R'; installedSensors[sensorCnt].sensorPtr = board->sensor_right; ++sensorCnt; - status=board->sensor_right->start_measurement(operating_mode, NULL); - } - /* set first displayed sensor to embedded top */ - currentSensor = 0; - return status; + status = board->sensor_right->start_measurement(operating_mode, NULL); + } + /* set first displayed sensor to embedded top */ + currentSensor = 0; + return status; } /* ISR callback function of the user blue button to switch measuring sensor. */ @@ -72,74 +68,67 @@ ++currentSensor; if (currentSensor == sensorCnt) currentSensor = 0; - printf("Sensor changed to %c\r\n",installedSensors[currentSensor].prefix); + printf("Sensor changed to %c\r\n", installedSensors[currentSensor].prefix); } /* On board 4 digit local display refresh*/ void display_refresh(OperatingMode op_mode) -{ - char str[4]; - - for (int t=0; t < sensorCnt; t++) - { - installedSensors[t].sensorPtr->get_measurement(op_mode, &data_sensor); - if (data_sensor.RangeStatus == 0) // we have a valid range. - { - printf("%c %4d; ", installedSensors[t].prefix,data_sensor.RangeMilliMeter); - if (currentSensor == t) - { - sprintf(str,"%c%3d", installedSensors[t].prefix ,data_sensor.RangeMilliMeter); - } - } - else - { - printf("%c ----; ", installedSensors[t].prefix); - if (currentSensor == t) - { - sprintf(str,"%c%s", installedSensors[t].prefix, "---"); - } - } - } - printf("\r\n"); - board->display->display_string(str); +{ + char str[4]; + + for (int t = 0; t < sensorCnt; t++) { + installedSensors[t].sensorPtr->get_measurement(op_mode, &data_sensor); + if (data_sensor.RangeStatus == 0) { // we have a valid range. + printf("%c %4d; ", installedSensors[t].prefix, data_sensor.RangeMilliMeter); + if (currentSensor == t) { + sprintf(str, "%c%3d", installedSensors[t].prefix, data_sensor.RangeMilliMeter); + } + } else { + printf("%c ----; ", installedSensors[t].prefix); + if (currentSensor == t) { + sprintf(str, "%c%s", installedSensors[t].prefix, "---"); + } + } + } + printf("\r\n"); + board->display->display_string(str); } -void range_measure(DevI2C *device_i2c) { - int status; +void range_measure(DevI2C *device_i2c) +{ + int status; - /* creates the 53L0A1 expansion board singleton obj */ - board=X_NUCLEO_53L0A1::instance(device_i2c, A2, D8, D2); - - board->display->display_string("53L0"); - /* init the 53L0A1 expansion board with default values */ - status=board->init_board(); - if(status) - printf("Failed to init board!\n\r"); - operating_mode=range_single_shot_polling; + /* creates the 53L0A1 expansion board singleton obj */ + board = X_NUCLEO_53L0A1::instance(device_i2c, A2, D8, D2); - status = init_sensors_array(); - - if(!status) - { - while(1) - { - display_refresh(operating_mode); - } - } - board->display->display_string("BYE"); - delete board; -} + board->display->display_string("53L0"); + /* init the 53L0A1 expansion board with default values */ + status = board->init_board(); + if (status) + printf("Failed to init board!\n\r"); + operating_mode = range_single_shot_polling; + + status = init_sensors_array(); + + if (!status) { + while (1) { + display_refresh(operating_mode); + } + } + board->display->display_string("BYE"); + delete board; +} /*=================================== Main ================================== - Press the blue user button to switch the sensor. + Press the blue user button to switch the sensor. =============================================================================*/ int main() -{ +{ #if USER_BUTTON==PC_13 // we are cross compiling for Nucleo-f401 - InterruptIn stop_button (USER_BUTTON); - stop_button.rise (&switch_measuring_sensor_irq); -#endif - DevI2C *device_i2c =new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL); - range_measure(device_i2c); // start continuous measures + InterruptIn stop_button(USER_BUTTON); + stop_button.rise(&switch_measuring_sensor_irq); +#endif + DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL); + range_measure(device_i2c); // start continuous measures }