1 sensory wired directly to the F401. Uses Ayoub's Custom library. Mb6

Dependencies:   X_NUCLEO_53L3CX

Committer:
charlesmn
Date:
Tue Jul 20 16:04:57 2021 +0000
Revision:
1:8cfb1799974f
Parent:
0:ba9aaa18b828
Child:
2:28f78024d00a
Uses Result.NumberOfZones to flag if there is data in the received packet

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charlesmn 0:ba9aaa18b828 1 /*
charlesmn 0:ba9aaa18b828 2 * This VL53L3 Expansion board test application performs range measurements
charlesmn 0:ba9aaa18b828 3 * using the onboard embedded sensor, and satellite boards, in interrupt mode.
charlesmn 0:ba9aaa18b828 4 * Measured ranges are output on the Serial Port, running at 115200 baud.
charlesmn 0:ba9aaa18b828 5 *
charlesmn 0:ba9aaa18b828 6 * The Reset button can be used to restart the program.
charlesmn 0:ba9aaa18b828 7 *
charlesmn 0:ba9aaa18b828 8 * *** Note :
charlesmn 0:ba9aaa18b828 9 * Default Mbed build system settings disable printf floating-point support.
charlesmn 0:ba9aaa18b828 10 * Online builds seem unable to configure this.
charlesmn 0:ba9aaa18b828 11 * Offline builds can enable printf floating-point support.
charlesmn 0:ba9aaa18b828 12 * https://github.com/ARMmbed/mbed-os/blob/master/platform/source/minimal-printf/README.md
charlesmn 0:ba9aaa18b828 13 * .\mbed-os\platform\mbed_lib.json
charlesmn 0:ba9aaa18b828 14 *
charlesmn 0:ba9aaa18b828 15 */
charlesmn 0:ba9aaa18b828 16
charlesmn 0:ba9aaa18b828 17 #include <stdio.h>
charlesmn 0:ba9aaa18b828 18 #include <time.h>
charlesmn 0:ba9aaa18b828 19
charlesmn 0:ba9aaa18b828 20 #include "mbed.h"
charlesmn 0:ba9aaa18b828 21
charlesmn 0:ba9aaa18b828 22 #include "vl53L3_I2c.h"
charlesmn 0:ba9aaa18b828 23 #include "vl53lx_platform_user_data.h"
charlesmn 0:ba9aaa18b828 24 #include "custom_ranging_sensor.h"
charlesmn 0:ba9aaa18b828 25 #include "Custom_RangingClass.h"
charlesmn 0:ba9aaa18b828 26
charlesmn 0:ba9aaa18b828 27
charlesmn 0:ba9aaa18b828 28 #define BSP_ERROR_NONE 0
charlesmn 0:ba9aaa18b828 29
charlesmn 0:ba9aaa18b828 30
charlesmn 0:ba9aaa18b828 31 #if (MBED_VERSION > 60300)
charlesmn 0:ba9aaa18b828 32 UnbufferedSerial pc(USBTX, USBRX);
charlesmn 0:ba9aaa18b828 33 extern "C" void wait_ms(int ms);
charlesmn 0:ba9aaa18b828 34 #else
charlesmn 0:ba9aaa18b828 35 Serial pc(SERIAL_TX, SERIAL_RX);
charlesmn 0:ba9aaa18b828 36 #endif
charlesmn 0:ba9aaa18b828 37
charlesmn 0:ba9aaa18b828 38
charlesmn 0:ba9aaa18b828 39 CUSTOM_SENSOR *sensor; //class for sensor commands
charlesmn 0:ba9aaa18b828 40
charlesmn 0:ba9aaa18b828 41
charlesmn 0:ba9aaa18b828 42 /* Private define ------------------------------------------------------------*/
charlesmn 0:ba9aaa18b828 43 #define POLLING_PERIOD (250U)
charlesmn 0:ba9aaa18b828 44
charlesmn 0:ba9aaa18b828 45 /* Private variables ---------------------------------------------------------*/
charlesmn 0:ba9aaa18b828 46 static int32_t status = 0;
charlesmn 0:ba9aaa18b828 47 int ToF_sensor = CUSTOM_VL53L3CX; // select the sensor to use. In custom_ranging_sensor.h
charlesmn 0:ba9aaa18b828 48
charlesmn 0:ba9aaa18b828 49
charlesmn 0:ba9aaa18b828 50 /* Private function prototypes -----------------------------------------------*/
charlesmn 0:ba9aaa18b828 51 void MX_TOF_Process(void);
charlesmn 0:ba9aaa18b828 52
charlesmn 0:ba9aaa18b828 53
charlesmn 0:ba9aaa18b828 54
charlesmn 1:8cfb1799974f 55 void MX_TOF_Init(void)
charlesmn 0:ba9aaa18b828 56 {
charlesmn 0:ba9aaa18b828 57
charlesmn 1:8cfb1799974f 58 uint16_t i2c_addr;
charlesmn 1:8cfb1799974f 59 uint32_t id;
charlesmn 1:8cfb1799974f 60
charlesmn 0:ba9aaa18b828 61 status = sensor->CUSTOM_RANGING_Init(ToF_sensor);
charlesmn 1:8cfb1799974f 62 if (status) {
charlesmn 1:8cfb1799974f 63 printf("CUSTOM_RANGING_Init failed for sensor %d status %d\n",ToF_sensor,status);
charlesmn 1:8cfb1799974f 64 }
charlesmn 0:ba9aaa18b828 65
charlesmn 0:ba9aaa18b828 66 }
charlesmn 0:ba9aaa18b828 67
charlesmn 0:ba9aaa18b828 68
charlesmn 0:ba9aaa18b828 69
charlesmn 1:8cfb1799974f 70 void MX_TOF_Process(void)
charlesmn 0:ba9aaa18b828 71 {
charlesmn 0:ba9aaa18b828 72
charlesmn 0:ba9aaa18b828 73 RANGING_SENSOR_Result_t Result;
charlesmn 0:ba9aaa18b828 74 RANGING_SENSOR_ProfileConfig_t Profile;
charlesmn 1:8cfb1799974f 75
charlesmn 0:ba9aaa18b828 76 printf("MX_53L3A2_MultiSensorRanging_Process\n");
charlesmn 0:ba9aaa18b828 77 Profile.RangingProfile = RS_MULTI_TARGET_LONG_RANGE;
charlesmn 0:ba9aaa18b828 78 Profile.TimingBudget = 30; /* 16 ms < TimingBudget < 500 ms */
charlesmn 0:ba9aaa18b828 79 Profile.Frequency = 0; /* not necessary in simple ranging */
charlesmn 0:ba9aaa18b828 80 Profile.EnableAmbient = 0; /* Enable: 1, Disable: 0 */
charlesmn 0:ba9aaa18b828 81 Profile.EnableSignal = 0; /* Enable: 1, Disable: 0 */
charlesmn 1:8cfb1799974f 82 Profile.EnableInterrupt = 0; // disables interupts
charlesmn 0:ba9aaa18b828 83 printf("MX_53L3A2_MultiSensorRanging_Process start sensors\n");
charlesmn 0:ba9aaa18b828 84
charlesmn 1:8cfb1799974f 85 wait_ms(100);
charlesmn 0:ba9aaa18b828 86 // sensor->VL53L3A2_RANGING_ConfigProfile(ToF_sensor, &Profile);
charlesmn 1:8cfb1799974f 87 sensor->CUSTOM_RANGING_ConfigProfile(ToF_sensor, &Profile);
charlesmn 1:8cfb1799974f 88 if (status != BSP_ERROR_NONE) {
charlesmn 1:8cfb1799974f 89 printf("CUSTOM_RANGING_ConfigProfile failed sensor %d status %d\n",ToF_sensor,status);
charlesmn 0:ba9aaa18b828 90 }
charlesmn 1:8cfb1799974f 91
charlesmn 0:ba9aaa18b828 92 wait_ms(100);
charlesmn 1:8cfb1799974f 93 status = sensor->CUSTOM_RANGING_Start(ToF_sensor, RS_MODE_BLOCKING_CONTINUOUS);
charlesmn 1:8cfb1799974f 94 if (status != BSP_ERROR_NONE) {
charlesmn 0:ba9aaa18b828 95 printf("CUSTOM_RANGING_Start failed sensor %d status %d\n",ToF_sensor,status);
charlesmn 0:ba9aaa18b828 96 }
charlesmn 0:ba9aaa18b828 97
charlesmn 0:ba9aaa18b828 98 printf("MX_53L3A2_MultiSensorRanging_Process read sensors\n");
charlesmn 0:ba9aaa18b828 99
charlesmn 1:8cfb1799974f 100 // repeatedly read data and start next measurement
charlesmn 1:8cfb1799974f 101 while (1) {
charlesmn 1:8cfb1799974f 102 status = sensor->CUSTOM_RANGING_GetDistance(ToF_sensor, &Result);
charlesmn 1:8cfb1799974f 103
charlesmn 1:8cfb1799974f 104 if ((status == BSP_ERROR_NONE) && ( Result.NumberOfZones != 0))
charlesmn 1:8cfb1799974f 105
charlesmn 1:8cfb1799974f 106 if ((status == BSP_ERROR_NONE) &&
charlesmn 1:8cfb1799974f 107 (Result.NumberOfZones != 0) &&
charlesmn 1:8cfb1799974f 108 (Result.ZoneResult[0].Status[0] == BSP_ERROR_NONE ))
charlesmn 1:8cfb1799974f 109 {
charlesmn 1:8cfb1799974f 110 printf("\n |---> ");
charlesmn 1:8cfb1799974f 111 printf("Status = %d, Distance = %5d mm",
charlesmn 1:8cfb1799974f 112 Result.ZoneResult[0].Status[0],
charlesmn 1:8cfb1799974f 113 Result.ZoneResult[0].Distance[0]);
charlesmn 1:8cfb1799974f 114 }
charlesmn 1:8cfb1799974f 115
charlesmn 1:8cfb1799974f 116 wait_ms(POLLING_PERIOD);
charlesmn 0:ba9aaa18b828 117 }
charlesmn 0:ba9aaa18b828 118 }
charlesmn 0:ba9aaa18b828 119
charlesmn 0:ba9aaa18b828 120
charlesmn 0:ba9aaa18b828 121
charlesmn 0:ba9aaa18b828 122 /*=================================== Main ==================================
charlesmn 0:ba9aaa18b828 123 =============================================================================*/
charlesmn 0:ba9aaa18b828 124 int main()
charlesmn 0:ba9aaa18b828 125 {
charlesmn 1:8cfb1799974f 126
charlesmn 1:8cfb1799974f 127 pc.baud(115200); // baud rate is important as printf statements take a lot of time
charlesmn 1:8cfb1799974f 128
charlesmn 1:8cfb1799974f 129 printf("53L3A2 One Sensor Ranging demo application\n");
charlesmn 0:ba9aaa18b828 130
charlesmn 1:8cfb1799974f 131 sensor = new CUSTOM_SENSOR();
charlesmn 1:8cfb1799974f 132
charlesmn 1:8cfb1799974f 133 MX_TOF_Init();
charlesmn 0:ba9aaa18b828 134
charlesmn 1:8cfb1799974f 135 while (1) {
charlesmn 1:8cfb1799974f 136 MX_TOF_Process();
charlesmn 1:8cfb1799974f 137 }
charlesmn 0:ba9aaa18b828 138
charlesmn 0:ba9aaa18b828 139 }
charlesmn 0:ba9aaa18b828 140
charlesmn 0:ba9aaa18b828 141 // needed for later versions of mbed
charlesmn 0:ba9aaa18b828 142 #if (MBED_VERSION > 60300)
charlesmn 0:ba9aaa18b828 143 extern "C" void wait_ms(int ms)
charlesmn 0:ba9aaa18b828 144 {
charlesmn 0:ba9aaa18b828 145 thread_sleep_for(ms);
charlesmn 0:ba9aaa18b828 146 }
charlesmn 0:ba9aaa18b828 147 #endif
charlesmn 1:8cfb1799974f 148