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

Dependencies:   X_NUCLEO_53L3CX

Committer:
charlesmn
Date:
Thu Jul 22 11:44:40 2021 +0000
Revision:
5:822f20845b32
Parent:
3:ba1ee6cac90d
I had changed the name of X_NUCLEO_53L3CX but not the repository where it is store. This fixes.

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 2:28f78024d00a 75 uint16_t zone = 0;
charlesmn 2:28f78024d00a 76 uint16_t target = 0;
charlesmn 1:8cfb1799974f 77
charlesmn 0:ba9aaa18b828 78 printf("MX_53L3A2_MultiSensorRanging_Process\n");
charlesmn 0:ba9aaa18b828 79 Profile.RangingProfile = RS_MULTI_TARGET_LONG_RANGE;
charlesmn 0:ba9aaa18b828 80 Profile.TimingBudget = 30; /* 16 ms < TimingBudget < 500 ms */
charlesmn 0:ba9aaa18b828 81 Profile.Frequency = 0; /* not necessary in simple ranging */
charlesmn 0:ba9aaa18b828 82 Profile.EnableAmbient = 0; /* Enable: 1, Disable: 0 */
charlesmn 0:ba9aaa18b828 83 Profile.EnableSignal = 0; /* Enable: 1, Disable: 0 */
charlesmn 1:8cfb1799974f 84 Profile.EnableInterrupt = 0; // disables interupts
charlesmn 0:ba9aaa18b828 85 printf("MX_53L3A2_MultiSensorRanging_Process start sensors\n");
charlesmn 0:ba9aaa18b828 86
charlesmn 1:8cfb1799974f 87 wait_ms(100);
charlesmn 0:ba9aaa18b828 88 // sensor->VL53L3A2_RANGING_ConfigProfile(ToF_sensor, &Profile);
charlesmn 1:8cfb1799974f 89 sensor->CUSTOM_RANGING_ConfigProfile(ToF_sensor, &Profile);
charlesmn 1:8cfb1799974f 90 if (status != BSP_ERROR_NONE) {
charlesmn 1:8cfb1799974f 91 printf("CUSTOM_RANGING_ConfigProfile failed sensor %d status %d\n",ToF_sensor,status);
charlesmn 0:ba9aaa18b828 92 }
charlesmn 1:8cfb1799974f 93
charlesmn 0:ba9aaa18b828 94 wait_ms(100);
charlesmn 1:8cfb1799974f 95 status = sensor->CUSTOM_RANGING_Start(ToF_sensor, RS_MODE_BLOCKING_CONTINUOUS);
charlesmn 1:8cfb1799974f 96 if (status != BSP_ERROR_NONE) {
charlesmn 0:ba9aaa18b828 97 printf("CUSTOM_RANGING_Start failed sensor %d status %d\n",ToF_sensor,status);
charlesmn 0:ba9aaa18b828 98 }
charlesmn 0:ba9aaa18b828 99
charlesmn 0:ba9aaa18b828 100 printf("MX_53L3A2_MultiSensorRanging_Process read sensors\n");
charlesmn 0:ba9aaa18b828 101
charlesmn 1:8cfb1799974f 102 // repeatedly read data and start next measurement
charlesmn 1:8cfb1799974f 103 while (1) {
charlesmn 1:8cfb1799974f 104 status = sensor->CUSTOM_RANGING_GetDistance(ToF_sensor, &Result);
charlesmn 2:28f78024d00a 105 // print results
charlesmn 1:8cfb1799974f 106 if ((status == BSP_ERROR_NONE) &&
charlesmn 2:28f78024d00a 107 ( Result.ZoneResult[zone].NumberOfTargets != 0)) // is there data
charlesmn 1:8cfb1799974f 108 {
charlesmn 2:28f78024d00a 109 for ( target = 0 ; target < Result.ZoneResult[zone].NumberOfTargets; target++)
charlesmn 2:28f78024d00a 110 {
charlesmn 2:28f78024d00a 111 if (Result.ZoneResult[zone].Status[target] == VL53LX_RANGESTATUS_RANGE_VALID )
charlesmn 2:28f78024d00a 112 {
charlesmn 2:28f78024d00a 113 printf("\n |---> ");
charlesmn 2:28f78024d00a 114 printf("Status = %d, Target %d, Distance = %5d mm",
charlesmn 2:28f78024d00a 115 Result.ZoneResult[zone].Status[target],
charlesmn 2:28f78024d00a 116 target,
charlesmn 2:28f78024d00a 117 Result.ZoneResult[zone].Distance[target]);
charlesmn 2:28f78024d00a 118 }
charlesmn 2:28f78024d00a 119 }
charlesmn 2:28f78024d00a 120 }
charlesmn 2:28f78024d00a 121
charlesmn 2:28f78024d00a 122 wait_ms(POLLING_PERIOD);
charlesmn 2:28f78024d00a 123 }
charlesmn 2:28f78024d00a 124 }
charlesmn 1:8cfb1799974f 125
charlesmn 0:ba9aaa18b828 126
charlesmn 0:ba9aaa18b828 127 /*=================================== Main ==================================
charlesmn 0:ba9aaa18b828 128 =============================================================================*/
charlesmn 0:ba9aaa18b828 129 int main()
charlesmn 0:ba9aaa18b828 130 {
charlesmn 1:8cfb1799974f 131
charlesmn 1:8cfb1799974f 132 pc.baud(115200); // baud rate is important as printf statements take a lot of time
charlesmn 1:8cfb1799974f 133
charlesmn 1:8cfb1799974f 134 printf("53L3A2 One Sensor Ranging demo application\n");
charlesmn 0:ba9aaa18b828 135
charlesmn 1:8cfb1799974f 136 sensor = new CUSTOM_SENSOR();
charlesmn 1:8cfb1799974f 137
charlesmn 1:8cfb1799974f 138 MX_TOF_Init();
charlesmn 0:ba9aaa18b828 139
charlesmn 1:8cfb1799974f 140 while (1) {
charlesmn 1:8cfb1799974f 141 MX_TOF_Process();
charlesmn 1:8cfb1799974f 142 }
charlesmn 0:ba9aaa18b828 143
charlesmn 0:ba9aaa18b828 144 }
charlesmn 0:ba9aaa18b828 145
charlesmn 0:ba9aaa18b828 146 // needed for later versions of mbed
charlesmn 0:ba9aaa18b828 147 #if (MBED_VERSION > 60300)
charlesmn 0:ba9aaa18b828 148 extern "C" void wait_ms(int ms)
charlesmn 0:ba9aaa18b828 149 {
charlesmn 0:ba9aaa18b828 150 thread_sleep_for(ms);
charlesmn 0:ba9aaa18b828 151 }
charlesmn 0:ba9aaa18b828 152 #endif
charlesmn 1:8cfb1799974f 153