Sample application, using the X_Nucleo_53L0A1 library, to display range results from the X-NUCLEO-53L0A1 central sensor on the 4-digit LED display.

Dependencies:   X_NUCLEO_53L0A1_mbed_sdk

Committer:
JerrySzczurak
Date:
Thu Jun 29 07:52:22 2017 +0000
Revision:
0:de1853b9f5b9
Sample application for OS5, using the X_Nucleo_53L0A1 library, to display range results from the X-NUCLEO-53L0A1 central sensor on the 4-digit LED display.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JerrySzczurak 0:de1853b9f5b9 1 /*
JerrySzczurak 0:de1853b9f5b9 2 * This VL53L0X Expansion board test application performs range measurements
JerrySzczurak 0:de1853b9f5b9 3 * using the onboard embedded centre sensor, in singleshot, polling mode.
JerrySzczurak 0:de1853b9f5b9 4 * Measured ranges are displayed on the on-board 4-digit display.
JerrySzczurak 0:de1853b9f5b9 5 *
JerrySzczurak 0:de1853b9f5b9 6 * The User Blue button stops the current measurement and entire program,
JerrySzczurak 0:de1853b9f5b9 7 * releasing all resources.
JerrySzczurak 0:de1853b9f5b9 8 *
JerrySzczurak 0:de1853b9f5b9 9 * The Reset button can be used to restart the program.
JerrySzczurak 0:de1853b9f5b9 10 */
JerrySzczurak 0:de1853b9f5b9 11
JerrySzczurak 0:de1853b9f5b9 12 #include <string.h>
JerrySzczurak 0:de1853b9f5b9 13 #include <stdio.h>
JerrySzczurak 0:de1853b9f5b9 14
JerrySzczurak 0:de1853b9f5b9 15 #include "mbed.h"
JerrySzczurak 0:de1853b9f5b9 16 #include "x_nucleo_53l0a1.h"
JerrySzczurak 0:de1853b9f5b9 17
JerrySzczurak 0:de1853b9f5b9 18 #define VL53L0_I2C_SDA D14
JerrySzczurak 0:de1853b9f5b9 19 #define VL53L0_I2C_SCL D15
JerrySzczurak 0:de1853b9f5b9 20
JerrySzczurak 0:de1853b9f5b9 21 static X_NUCLEO_53L0A1 *board = NULL;
JerrySzczurak 0:de1853b9f5b9 22 VL53L0X_RangingMeasurementData_t data_sensor_centre;
JerrySzczurak 0:de1853b9f5b9 23 OperatingMode operating_mode;
JerrySzczurak 0:de1853b9f5b9 24
JerrySzczurak 0:de1853b9f5b9 25 /* flags that handle interrupt request */
JerrySzczurak 0:de1853b9f5b9 26 bool int_stop_measure = false;
JerrySzczurak 0:de1853b9f5b9 27
JerrySzczurak 0:de1853b9f5b9 28 /* ISR callback function of the user blue button to stop program */
JerrySzczurak 0:de1853b9f5b9 29 void StopMeasureIRQ(void)
JerrySzczurak 0:de1853b9f5b9 30 {
JerrySzczurak 0:de1853b9f5b9 31 int_stop_measure = true;
JerrySzczurak 0:de1853b9f5b9 32 }
JerrySzczurak 0:de1853b9f5b9 33
JerrySzczurak 0:de1853b9f5b9 34 /* On board 4 digit local display refresh */
JerrySzczurak 0:de1853b9f5b9 35 void DisplayRefresh(VL53L0X_RangingMeasurementData_t sensor_range_data)
JerrySzczurak 0:de1853b9f5b9 36 {
JerrySzczurak 0:de1853b9f5b9 37 char str[5];
JerrySzczurak 0:de1853b9f5b9 38
JerrySzczurak 0:de1853b9f5b9 39 if (sensor_range_data.RangeStatus == 0) // we have a valid range.
JerrySzczurak 0:de1853b9f5b9 40 {
JerrySzczurak 0:de1853b9f5b9 41 sprintf(str,"%d", sensor_range_data.RangeMilliMeter);
JerrySzczurak 0:de1853b9f5b9 42 }
JerrySzczurak 0:de1853b9f5b9 43 else
JerrySzczurak 0:de1853b9f5b9 44 {
JerrySzczurak 0:de1853b9f5b9 45 sprintf(str,"%s","----");
JerrySzczurak 0:de1853b9f5b9 46 }
JerrySzczurak 0:de1853b9f5b9 47
JerrySzczurak 0:de1853b9f5b9 48 board->display->display_string(str);
JerrySzczurak 0:de1853b9f5b9 49 }
JerrySzczurak 0:de1853b9f5b9 50
JerrySzczurak 0:de1853b9f5b9 51 /*=================================== Main ==================================
JerrySzczurak 0:de1853b9f5b9 52 Press the blue user button to stop measurements in progress
JerrySzczurak 0:de1853b9f5b9 53 =============================================================================*/
JerrySzczurak 0:de1853b9f5b9 54 int main()
JerrySzczurak 0:de1853b9f5b9 55 {
JerrySzczurak 0:de1853b9f5b9 56 #if USER_BUTTON == PC_13 // we are cross compiling for Nucleo-f401
JerrySzczurak 0:de1853b9f5b9 57 InterruptIn stop_button(USER_BUTTON);
JerrySzczurak 0:de1853b9f5b9 58 stop_button.rise(&StopMeasureIRQ);
JerrySzczurak 0:de1853b9f5b9 59 #endif
JerrySzczurak 0:de1853b9f5b9 60
JerrySzczurak 0:de1853b9f5b9 61 DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
JerrySzczurak 0:de1853b9f5b9 62 int status;
JerrySzczurak 0:de1853b9f5b9 63
JerrySzczurak 0:de1853b9f5b9 64 /* creates the 53L0A1 expansion board singleton obj */
JerrySzczurak 0:de1853b9f5b9 65 board=X_NUCLEO_53L0A1::instance(device_i2c, A2, D8, D2);
JerrySzczurak 0:de1853b9f5b9 66
JerrySzczurak 0:de1853b9f5b9 67 board->display->display_string("53L0");
JerrySzczurak 0:de1853b9f5b9 68 /* init the 53L0A1 expansion board with default values */
JerrySzczurak 0:de1853b9f5b9 69 status = board->init_board();
JerrySzczurak 0:de1853b9f5b9 70 if (status) printf("Failed to init board!\n\r");
JerrySzczurak 0:de1853b9f5b9 71 operating_mode = range_single_shot_polling;
JerrySzczurak 0:de1853b9f5b9 72 /* start the measure on sensor centre */
JerrySzczurak 0:de1853b9f5b9 73 status = board->sensor_centre->start_measurement(operating_mode, NULL);
JerrySzczurak 0:de1853b9f5b9 74 if (!status)
JerrySzczurak 0:de1853b9f5b9 75 {
JerrySzczurak 0:de1853b9f5b9 76 while (1) // infinite loop. can be broken by pressing Blue (User) button.
JerrySzczurak 0:de1853b9f5b9 77 {
JerrySzczurak 0:de1853b9f5b9 78 status = board->sensor_centre->get_measurement(operating_mode, &data_sensor_centre);
JerrySzczurak 0:de1853b9f5b9 79 DisplayRefresh(data_sensor_centre);
JerrySzczurak 0:de1853b9f5b9 80 if (int_stop_measure) // Blue Button isr was triggered
JerrySzczurak 0:de1853b9f5b9 81 {
JerrySzczurak 0:de1853b9f5b9 82 status = board->sensor_centre->stop_measurement(operating_mode); // stop the measure and exit
JerrySzczurak 0:de1853b9f5b9 83 int_stop_measure = false;
JerrySzczurak 0:de1853b9f5b9 84 printf("\nProgram stopped!\n\n\r");
JerrySzczurak 0:de1853b9f5b9 85 break;
JerrySzczurak 0:de1853b9f5b9 86 }
JerrySzczurak 0:de1853b9f5b9 87 }
JerrySzczurak 0:de1853b9f5b9 88 }
JerrySzczurak 0:de1853b9f5b9 89 board->display->display_string("BYE");
JerrySzczurak 0:de1853b9f5b9 90 delete board;
JerrySzczurak 0:de1853b9f5b9 91 }
JerrySzczurak 0:de1853b9f5b9 92
JerrySzczurak 0:de1853b9f5b9 93