X_Nucleo_53L1A1 Expansion Board Class for VL53L1X Sensor.

Dependencies:   VL53L1X_mbed

Dependents:   HelloWorld_53L1A1_Interrupts 53L1A1_Satellites_MbedOS 53L1A1_Interrupts_MbedOS 53L1A1_Polling_All_MbedOS ... more

X-NUCLEO-53L1A1 Proximity Sensor Expansion Board Firmware Package

Introduction

This firmware package includes Component Device Drivers and the Board Support Package for STMicroelectronics' X-NUCLEO-53L1A1 Proximity sensor expansion board based on VL53L1X.

Firmware Library

Class XNucleo53L1A1 is intended to represent the Proximity sensor expansion board with the same name.

The expansion board provides support for the following components:

  1. on-board VL53L1X proximity sensor,
  2. up to two additional VL53L1X Satellites.

It is intentionally implemented as a singleton because only one X-NUCLEO-VL53L1A1 may be deployed at a time in a HW component stack. In order to get the singleton instance you have to call class method `Instance()`, e.g.:

// Sensors expansion board singleton instance
static XNucleo53L1A1 *board = XNucleo53L1A1::instance(device_i2c, A2, D9, D2);

Example Applications

Committer:
johnAlexander
Date:
Tue May 11 09:35:41 2021 +0000
Revision:
29:ee29a8ce93d5
Parent:
22:27f00d9b777b
Child:
27:afcf740eb7b8
Updated for MbedOS v6.x support.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JerrySzczurak 22:27f00d9b777b 1 #include "XNucleo53L1A1.h"
JerrySzczurak 22:27f00d9b777b 2
JerrySzczurak 22:27f00d9b777b 3 XNucleo53L1A1 *XNucleo53L1A1::_instance = NULL;
JerrySzczurak 22:27f00d9b777b 4
JerrySzczurak 22:27f00d9b777b 5
JerrySzczurak 22:27f00d9b777b 6 XNucleo53L1A1 *XNucleo53L1A1::instance(vl53L1X_DevI2C *ext_i2c)
JerrySzczurak 22:27f00d9b777b 7 {
JerrySzczurak 22:27f00d9b777b 8 if (_instance == NULL) {
JerrySzczurak 22:27f00d9b777b 9 _instance = new XNucleo53L1A1(ext_i2c);
JerrySzczurak 22:27f00d9b777b 10 } else {
JerrySzczurak 22:27f00d9b777b 11 printf("Failed to create XNucleo53L1A1 instance\n\r\r\n");
JerrySzczurak 22:27f00d9b777b 12 }
JerrySzczurak 22:27f00d9b777b 13 return _instance;
JerrySzczurak 22:27f00d9b777b 14 }
JerrySzczurak 22:27f00d9b777b 15
JerrySzczurak 22:27f00d9b777b 16 XNucleo53L1A1 *XNucleo53L1A1::instance(vl53L1X_DevI2C *ext_i2c,
JerrySzczurak 22:27f00d9b777b 17 PinName gpio1_centre,
JerrySzczurak 22:27f00d9b777b 18 PinName gpio1_left, PinName gpio1_right)
JerrySzczurak 22:27f00d9b777b 19 {
JerrySzczurak 22:27f00d9b777b 20 if (_instance == NULL) {
JerrySzczurak 22:27f00d9b777b 21 _instance = new XNucleo53L1A1(ext_i2c, gpio1_centre, gpio1_left, gpio1_right);
JerrySzczurak 22:27f00d9b777b 22 } else {
JerrySzczurak 22:27f00d9b777b 23 printf("Failed to create XNucleo53L0A1 instance\n\r");
JerrySzczurak 22:27f00d9b777b 24 }
JerrySzczurak 22:27f00d9b777b 25 return _instance;
JerrySzczurak 22:27f00d9b777b 26 }
JerrySzczurak 22:27f00d9b777b 27
JerrySzczurak 22:27f00d9b777b 28
JerrySzczurak 22:27f00d9b777b 29 int XNucleo53L1A1::init_board()
JerrySzczurak 22:27f00d9b777b 30 {
JerrySzczurak 22:27f00d9b777b 31 int status, n_dev = 0;
JerrySzczurak 22:27f00d9b777b 32
JerrySzczurak 22:27f00d9b777b 33 sensor_centre->VL53L1_Off();
JerrySzczurak 22:27f00d9b777b 34 sensor_left->VL53L1_Off();
JerrySzczurak 22:27f00d9b777b 35 sensor_right->VL53L1_Off();
JerrySzczurak 22:27f00d9b777b 36 status = sensor_centre->InitSensor(NEW_SENSOR_CENTRE_ADDRESS);
JerrySzczurak 22:27f00d9b777b 37 if (status) {
JerrySzczurak 22:27f00d9b777b 38 delete sensor_centre;
JerrySzczurak 22:27f00d9b777b 39 delete xshutdown_centre;
JerrySzczurak 22:27f00d9b777b 40 sensor_centre = NULL;
JerrySzczurak 22:27f00d9b777b 41 xshutdown_centre = NULL;
JerrySzczurak 22:27f00d9b777b 42 printf("Sensor centre not present\n\r");
JerrySzczurak 22:27f00d9b777b 43 } else {
JerrySzczurak 22:27f00d9b777b 44 printf("Sensor centre present\n\r");
JerrySzczurak 22:27f00d9b777b 45 n_dev++;
JerrySzczurak 22:27f00d9b777b 46 }
JerrySzczurak 22:27f00d9b777b 47
JerrySzczurak 22:27f00d9b777b 48 status = sensor_left->InitSensor(NEW_SENSOR_LEFT_ADDRESS);
JerrySzczurak 22:27f00d9b777b 49 if (status) {
JerrySzczurak 22:27f00d9b777b 50 delete sensor_left;
JerrySzczurak 22:27f00d9b777b 51 delete xshutdown_left;
JerrySzczurak 22:27f00d9b777b 52 sensor_left = NULL;
JerrySzczurak 22:27f00d9b777b 53 xshutdown_left = NULL;
JerrySzczurak 22:27f00d9b777b 54 printf("Sensor left not present\n\r");
JerrySzczurak 22:27f00d9b777b 55 } else {
JerrySzczurak 22:27f00d9b777b 56 printf("Sensor left present\n\r");
JerrySzczurak 22:27f00d9b777b 57 n_dev++;
JerrySzczurak 22:27f00d9b777b 58 }
JerrySzczurak 22:27f00d9b777b 59
JerrySzczurak 22:27f00d9b777b 60 status = sensor_right->InitSensor(NEW_SENSOR_RIGHT_ADDRESS);
JerrySzczurak 22:27f00d9b777b 61 if (status) {
JerrySzczurak 22:27f00d9b777b 62 delete sensor_right;
JerrySzczurak 22:27f00d9b777b 63 delete xshutdown_right;
JerrySzczurak 22:27f00d9b777b 64 sensor_right = NULL;
JerrySzczurak 22:27f00d9b777b 65 xshutdown_right = NULL;
JerrySzczurak 22:27f00d9b777b 66 printf("Sensor right not present\n\r");
JerrySzczurak 22:27f00d9b777b 67 } else {
JerrySzczurak 22:27f00d9b777b 68 printf("Sensor right present\n\r");
JerrySzczurak 22:27f00d9b777b 69 n_dev++;
JerrySzczurak 22:27f00d9b777b 70 }
JerrySzczurak 22:27f00d9b777b 71
JerrySzczurak 22:27f00d9b777b 72 if (n_dev == 0) {
JerrySzczurak 22:27f00d9b777b 73 return 1;
JerrySzczurak 22:27f00d9b777b 74 } else {
JerrySzczurak 22:27f00d9b777b 75 return 0;
JerrySzczurak 22:27f00d9b777b 76 }
JerrySzczurak 22:27f00d9b777b 77 }