charles macneill
/
VL53L3CX_NoShield_1Sensors_Polling
1 sensory wired directly to the F401. Uses Ayoub's Custom library. Mb6
main.cpp@1:8cfb1799974f, 2021-07-20 (annotated)
- 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?
User | Revision | Line number | New 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 |