Library for use with VL53L1X, intended to represent the Proximity sensor expansion board with the same name.

Dependencies:   VL53L1X_mbed

Dependents:   HelloWorld_53L1A1 VL53L1A1_Simple_Ranging_With_One_Device VL53L1A1_Simple_Ranging_With_All_Devices VL53L1X_Ranging_With_Multiple_Devices_MbedOS ... more

Files at this revision

API Documentation at this revision

Comitter:
JerrySzczurak
Date:
Mon Jan 28 10:14:22 2019 +0000
Parent:
21:99c367e8a402
Child:
23:805bffa2b7f6
Commit message:
Initial release board class

Changed in this revision

Components/VL53L0X.lib Show diff for this revision Revisions of this file
Components/VL53L1X.lib Show annotated file Show diff for this revision Revisions of this file
XNucleo53L0A1.cpp Show diff for this revision Revisions of this file
XNucleo53L0A1.h Show diff for this revision Revisions of this file
XNucleo53L1A1.cpp Show annotated file Show diff for this revision Revisions of this file
XNucleo53L1A1.h Show annotated file Show diff for this revision Revisions of this file
--- a/Components/VL53L0X.lib	Mon Dec 18 09:52:09 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://os.mbed.com/teams/ST/code/VL53L0X/#d25c4fa216af
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Components/VL53L1X.lib	Mon Jan 28 10:14:22 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/ST/code/VL53L0X/#f16727052990
--- a/XNucleo53L0A1.cpp	Mon Dec 18 09:52:09 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-/**
- ******************************************************************************
- * @file    XNucleo53L0A1.cpp
- * @author  IMG
- * @version V1.0.0
- * @date    28-November-2016
- * @brief   Implementation file for the X_NUCLEO_VL53L0A1 singleton class
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *   2. Redistributions in binary form must reproduce the above copyright notice,
- *      this list of conditions and the following disclaimer in the documentation
- *      and/or other materials provided with the distribution.
- *   3. Neither the name of STMicroelectronics nor the names of its contributors
- *      may be used to endorse or promote products derived from this software
- *      without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-
-/* Includes ------------------------------------------------------------------*/
-#include "XNucleo53L0A1.h"
-#include "VL53L0X_platform_log.h"
-
-/* Static variables ----------------------------------------------------------*/
-XNucleo53L0A1 *XNucleo53L0A1::_instance = NULL;
-
-XNucleo53L0A1 *XNucleo53L0A1::instance(DevI2C *ext_i2c)
-{
-    if (_instance == NULL) {
-        _instance = new XNucleo53L0A1(ext_i2c);
-    } else {
-        VL53L0X_ErrLog("Failed to create XNucleo53L0A1 instance\n\r");
-    }
-    return _instance;
-}
-
-XNucleo53L0A1 *XNucleo53L0A1::instance(DevI2C *ext_i2c,
-                                       PinName gpio1_centre,
-                                       PinName gpio1_left, PinName gpio1_right)
-{
-    if (_instance == NULL) {
-        _instance = new XNucleo53L0A1(ext_i2c, gpio1_centre, gpio1_left, gpio1_right);
-    } else {
-        VL53L0X_ErrLog("Failed to create XNucleo53L0A1 instance\n\r");
-    }
-    return _instance;
-}
-
-
-int XNucleo53L0A1::init_board()
-{
-    int status, n_dev = 0;
-
-
-
-
-
-    sensor_centre->VL53L0X_off();
-    sensor_left->VL53L0X_off();
-    sensor_right->VL53L0X_off();
-    status = sensor_centre->init_sensor(NEW_SENSOR_CENTRE_ADDRESS);
-    if (status) {
-
-        delete sensor_centre;
-        delete xshutdown_centre;
-        sensor_centre = NULL;
-        xshutdown_centre = NULL;
-        printf("Sensor centre not present\n\r");
-
-    } else {
-
-        printf("Sensor centre present\n\r");
-        n_dev++;
-    }
-    status = sensor_left->init_sensor(NEW_SENSOR_LEFT_ADDRESS);
-    if (status) {
-
-        delete sensor_left;
-        delete xshutdown_left;
-        sensor_left = NULL;
-        xshutdown_left = NULL;
-        printf("Sensor left not present\n\r");
-
-    } else {
-
-        printf("Sensor left present\n\r");
-        n_dev++;
-    }
-
-    status = sensor_right->init_sensor(NEW_SENSOR_RIGHT_ADDRESS);
-    if (status) {
-
-        delete sensor_right;
-        delete xshutdown_right;
-        sensor_right = NULL;
-        xshutdown_right = NULL;
-        printf("Sensor right not present\n\r");
-
-    } else {
-
-        printf("Sensor right present\n\r");
-        n_dev++;
-    }
-
-    if (n_dev == 0) {
-        return 1;
-    } else {
-        return 0;
-    }
-}
--- a/XNucleo53L0A1.h	Mon Dec 18 09:52:09 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,188 +0,0 @@
-/**
- ******************************************************************************
- * @file    XNucleo53L0A1.h
- * @author  IMG
- * @version V1.0.0
- * @date    28-November-2016
- * @brief   Header file for class XNucleo53L0A1 representing a X-NUCLEO-53L0A1
- *          expansion board
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *   2. Redistributions in binary form must reproduce the above copyright notice,
- *      this list of conditions and the following disclaimer in the documentation
- *      and/or other materials provided with the distribution.
- *   3. Neither the name of STMicroelectronics nor the names of its contributors
- *      may be used to endorse or promote products derived from this software
- *      without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-/* Define to prevent from recursive inclusion --------------------------------*/
-#ifndef __XNucleo53L0A1_H
-#define __XNucleo53L0A1_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "VL53L0X.h"
-#include "Display.h"
-#include "Stmpe1600.h"
-#include "DevI2C.h"
-
-/** New device addresses */
-#define NEW_SENSOR_CENTRE_ADDRESS		0x54
-#define NEW_SENSOR_LEFT_ADDRESS			0x56
-#define NEW_SENSOR_RIGHT_ADDRESS		0x58
-
-/* Classes--------------------------------------------------------------------*/
-
-/* Classes -------------------------------------------------------------------*/
-/** Class representing the X-NUCLEO-VL53L0A1 expansion board
- */
-class XNucleo53L0A1
-{
-public:
-    /** Constructor 1
-    * @param[in] &i2c device I2C to be used for communication
-    */
-    XNucleo53L0A1(DevI2C *ext_i2c) : dev_i2c(ext_i2c)
-    {
-        stmpe1600_exp0 = new Stmpe1600(ext_i2c, (0x43 * 2));     // U21
-
-        stmpe1600_exp1 = new Stmpe1600(ext_i2c, (0x42 * 2));     // U19
-
-        display = new Display(stmpe1600_exp0, stmpe1600_exp1);
-
-        xshutdown_centre = new Stmpe1600DigiOut(dev_i2c, GPIO_15, (0x42 * 2));     // U19 on schematic
-        sensor_centre = new VL53L0X(dev_i2c, xshutdown_centre, A2);
-
-        xshutdown_left = new Stmpe1600DigiOut(dev_i2c, GPIO_14, (0x43 * 2));     // U21 on schematic
-        sensor_left = new VL53L0X(dev_i2c, xshutdown_left, D8);
-
-        xshutdown_right = new Stmpe1600DigiOut(dev_i2c, GPIO_15, (0x43 * 2));     // U21 on schematic
-        sensor_right = new VL53L0X(dev_i2c, xshutdown_right, D2);
-    }
-
-    /** Constructor 2
-     * @param[in] &i2c device I2C to be used for communication
-     * @param[in] PinName gpio1_top Mbed DigitalOut pin name to be used as a top sensor GPIO_1 INT
-     * @param[in] PinName gpio1_bottom Mbed DigitalOut pin name to be used as a bottom sensor GPIO_1 INT
-     * @param[in] PinName gpio1_left Mbed DigitalOut pin name to be used as a left sensor GPIO_1 INT
-     * @param[in] PinName gpio1_right Mbed DigitalOut pin name to be used as a right sensor GPIO_1 INT
-     */
-    XNucleo53L0A1(DevI2C *ext_i2c, PinName gpio1_centre,
-                  PinName gpio1_left, PinName gpio1_right) : dev_i2c(ext_i2c)
-    {
-        stmpe1600_exp0 = new Stmpe1600(ext_i2c, (0x43 * 2));     // U21
-
-        stmpe1600_exp1 = new Stmpe1600(ext_i2c, (0x42 * 2));     // U19
-
-        display = new Display(stmpe1600_exp0, stmpe1600_exp1);
-
-        xshutdown_centre = new Stmpe1600DigiOut(dev_i2c, GPIO_15, (0x42 * 2));     // U19 on schematic
-        sensor_centre = new VL53L0X(dev_i2c, xshutdown_centre, gpio1_centre);
-
-        xshutdown_left = new Stmpe1600DigiOut(dev_i2c, GPIO_14, (0x43 * 2));     // U21 on schematic
-        sensor_left = new VL53L0X(dev_i2c, xshutdown_left, gpio1_left);
-
-        xshutdown_right = new Stmpe1600DigiOut(dev_i2c, GPIO_15, (0x43 * 2));     // U21 on schematic
-        sensor_right = new VL53L0X(dev_i2c, xshutdown_right, gpio1_right);
-    }
-
-    /** Destructor
-     */
-    ~XNucleo53L0A1()
-    {
-        if (xshutdown_centre != NULL) {
-            delete xshutdown_centre;
-            xshutdown_centre = NULL;
-        }
-        if (sensor_centre != NULL) {
-            delete sensor_centre;
-            sensor_centre = NULL;
-        }
-        if (xshutdown_left != NULL) {
-            delete xshutdown_left;
-            xshutdown_left = NULL;
-        }
-        if (sensor_left != NULL) {
-            delete sensor_left;
-            sensor_left = NULL;
-        }
-        if (xshutdown_right != NULL) {
-            delete xshutdown_right;
-            xshutdown_right = NULL;
-        }
-        if (sensor_right != NULL) {
-            delete sensor_right;
-            sensor_right = NULL;
-        }
-
-        delete stmpe1600_exp0;
-        stmpe1600_exp0 = NULL;
-        delete stmpe1600_exp1;
-        stmpe1600_exp1 = NULL;
-        delete display;
-        display = NULL;
-        _instance = NULL;
-    }
-
-    /**
-     * @brief       Creates a singleton object instance
-     * @param[in]   &i2c device I2C to be used for communication
-     * @return      Pointer to the object instance
-     */
-    static XNucleo53L0A1 *instance(DevI2C *ext_i2c);
-
-    /**
-     * @brief       Creates a singleton object instance
-     * @param[in]   &i2c device I2C to be used for communication
-     * @param[in]   PinName gpio1_centre the pin connected to top sensor INT
-     * @param[in]   PinName gpio1_left the pin connected to left sensor INT
-     * @param[in]   PinName gpio1_right the pin connected to right sensor INT
-     * @return      Pointer to the object instance
-     */
-    static XNucleo53L0A1 *instance(DevI2C *ext_i2c, PinName gpio1_centre,
-                                   PinName gpio1_left, PinName gpio1_right);
-
-    /**
-     * @brief       Initialize the board and sensors with deft values
-     * @return      0 on success
-     */
-    int init_board();
-
-    DevI2C *dev_i2c;
-    VL53L0X *sensor_centre;
-    VL53L0X *sensor_left;
-    VL53L0X *sensor_right;
-    Stmpe1600 *stmpe1600_exp0;
-    Stmpe1600 *stmpe1600_exp1;
-    Stmpe1600DigiOut *xshutdown_centre;
-    Stmpe1600DigiOut *xshutdown_left;
-    Stmpe1600DigiOut *xshutdown_right;
-    Display *display;
-
-private:
-    static XNucleo53L0A1 *_instance;
-};
-
-#endif /* __XNucleo53L0A1_H */
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/XNucleo53L1A1.cpp	Mon Jan 28 10:14:22 2019 +0000
@@ -0,0 +1,77 @@
+#include "XNucleo53L1A1.h"
+
+XNucleo53L1A1 *XNucleo53L1A1::_instance = NULL;
+
+
+XNucleo53L1A1 *XNucleo53L1A1::instance(vl53L1X_DevI2C *ext_i2c)
+{
+    if (_instance == NULL) {
+        _instance = new XNucleo53L1A1(ext_i2c);
+    } else {
+        printf("Failed to create XNucleo53L1A1 instance\n\r\r\n");
+    }
+    return _instance;
+}
+
+XNucleo53L1A1 *XNucleo53L1A1::instance(vl53L1X_DevI2C *ext_i2c,
+                                       PinName gpio1_centre,
+                                       PinName gpio1_left, PinName gpio1_right)
+{
+    if (_instance == NULL) {
+        _instance = new XNucleo53L1A1(ext_i2c, gpio1_centre, gpio1_left, gpio1_right);
+    } else {
+        printf("Failed to create XNucleo53L0A1 instance\n\r");
+    }
+    return _instance;
+}
+
+
+int XNucleo53L1A1::init_board()
+{
+    int status, n_dev = 0;
+
+    sensor_centre->VL53L1_Off();
+    sensor_left->VL53L1_Off();
+    sensor_right->VL53L1_Off();
+    status = sensor_centre->InitSensor(NEW_SENSOR_CENTRE_ADDRESS);
+    if (status) {
+        delete sensor_centre;
+        delete xshutdown_centre;
+        sensor_centre = NULL;
+        xshutdown_centre = NULL;
+        printf("Sensor centre not present\n\r");
+    } else {
+        printf("Sensor centre present\n\r");
+        n_dev++;
+    }
+
+    status = sensor_left->InitSensor(NEW_SENSOR_LEFT_ADDRESS);
+    if (status) {
+        delete sensor_left;
+        delete xshutdown_left;
+        sensor_left = NULL;
+        xshutdown_left = NULL;
+        printf("Sensor left not present\n\r");
+    } else {
+        printf("Sensor left present\n\r");
+        n_dev++;
+    }
+
+    status = sensor_right->InitSensor(NEW_SENSOR_RIGHT_ADDRESS);
+    if (status) {
+        delete sensor_right;
+        delete xshutdown_right;
+        sensor_right = NULL;
+        xshutdown_right = NULL;
+        printf("Sensor right not present\n\r");
+    } else {
+        printf("Sensor right present\n\r");
+        n_dev++;
+    }
+
+    if (n_dev == 0) {
+        return 1;
+    } else {
+        return 0;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/XNucleo53L1A1.h	Mon Jan 28 10:14:22 2019 +0000
@@ -0,0 +1,184 @@
+/**
+ ******************************************************************************
+ * @file    XNucleo53L1A1.h
+ * @author  JS
+ * @version V0.0.1
+ * @date    15-January-2019
+ * @brief   Header file for component XNucleo53L1A1
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; COPYRIGHT(c) 2019 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *   1. Redistributions of source code must retain the above copyright notice,
+ *      this list of conditions and the following disclaimer.
+ *   2. Redistributions in binary form must reproduce the above copyright notice,
+ *      this list of conditions and the following disclaimer in the documentation
+ *      and/or other materials provided with the distribution.
+ *   3. Neither the name of STMicroelectronics nor the names of its contributors
+ *      may be used to endorse or promote products derived from this software
+ *       without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+*/
+
+#ifndef __VL53L1_X_NUCLEO_CLASS_H
+#define __VL53L1_X_NUCLEO_CLASS_H
+
+
+/* Includes ------------------------------------------------------------------*/
+#include "vl53l1x_class.h"
+#include "Stmpe1600.h"
+//#include "DevI2C.h"
+#include "vl53L1x_I2c.h"
+
+
+/** New device addresses */
+#define NEW_SENSOR_CENTRE_ADDRESS   0x52
+//#define NEW_SENSOR_CENTRE_ADDRESS   0x54
+#define NEW_SENSOR_LEFT_ADDRESS         0x56
+#define NEW_SENSOR_RIGHT_ADDRESS        0x58
+
+
+/* Classes--------------------------------------------------------------------*/
+
+/* Classes -------------------------------------------------------------------*/
+/** Class representing the X-NUCLEO-VL53L1A1 expansion board
+ */
+class XNucleo53L1A1
+{
+public:
+    /** Constructor 1
+    * @param[in] &i2c device I2C to be used for communication
+    */
+    XNucleo53L1A1(vl53L1X_DevI2C *ext_i2c) : dev_i2c(ext_i2c)
+    {
+        stmpe1600_exp0 = new Stmpe1600((DevI2C*)ext_i2c, (0x43 * 2));     // U21
+
+        stmpe1600_exp1 = new Stmpe1600((DevI2C*)ext_i2c, (0x42 * 2));     // U19
+
+        xshutdown_centre = new Stmpe1600DigiOut((DevI2C*)dev_i2c, GPIO_15, (0x42 * 2));     // U19 on schematic
+        sensor_centre = new VL53L1X(dev_i2c, xshutdown_centre, A2);
+
+        xshutdown_left = new Stmpe1600DigiOut((DevI2C*)dev_i2c, GPIO_14, (0x43 * 2));     // U21 on schematic
+        sensor_left = new VL53L1X(dev_i2c, xshutdown_left, D8);
+
+        xshutdown_right = new Stmpe1600DigiOut((DevI2C*)dev_i2c, GPIO_15, (0x43 * 2));     // U21 on schematic
+        sensor_right = new VL53L1X(dev_i2c, xshutdown_right, D2);
+    }  
+    
+    /** Constructor 2
+     * @param[in] &i2c device I2C to be used for communication
+     * @param[in] PinName gpio1_top Mbed DigitalOut pin name to be used as a top sensor GPIO_1 INT
+     * @param[in] PinName gpio1_bottom Mbed DigitalOut pin name to be used as a bottom sensor GPIO_1 INT
+     * @param[in] PinName gpio1_left Mbed DigitalOut pin name to be used as a left sensor GPIO_1 INT
+     * @param[in] PinName gpio1_right Mbed DigitalOut pin name to be used as a right sensor GPIO_1 INT
+     */
+    XNucleo53L1A1(vl53L1X_DevI2C *ext_i2c, PinName gpio1_centre,
+                  PinName gpio1_left, PinName gpio1_right) : dev_i2c(ext_i2c)
+    {
+        stmpe1600_exp0 = new Stmpe1600((DevI2C*)ext_i2c, (0x43 * 2));     // U21
+
+        stmpe1600_exp1 = new Stmpe1600((DevI2C*)ext_i2c, (0x42 * 2));     // U19
+
+        xshutdown_centre = new Stmpe1600DigiOut((DevI2C*)dev_i2c, GPIO_15, (0x42 * 2));     // U19 on schematic
+        sensor_centre = new VL53L1X(dev_i2c, xshutdown_centre, gpio1_centre);
+
+        xshutdown_left = new Stmpe1600DigiOut((DevI2C*)dev_i2c, GPIO_14, (0x43 * 2));     // U21 on schematic
+        sensor_left = new VL53L1X(dev_i2c, xshutdown_left, gpio1_left);
+
+        xshutdown_right = new Stmpe1600DigiOut((DevI2C*)dev_i2c, GPIO_15, (0x43 * 2));     // U21 on schematic
+        sensor_right = new VL53L1X(dev_i2c, xshutdown_right, gpio1_right);
+    }    
+    
+    
+    /** Destructor
+     */
+    ~XNucleo53L1A1()
+    {
+        if (xshutdown_centre != NULL) {
+            delete xshutdown_centre;
+            xshutdown_centre = NULL;
+        }
+        if (sensor_centre != NULL) {
+            delete sensor_centre;
+            sensor_centre = NULL;
+        }
+        if (xshutdown_left != NULL) {
+            delete xshutdown_left;
+            xshutdown_left = NULL;
+        }
+        if (sensor_left != NULL) {
+            delete sensor_left;
+            sensor_left = NULL;
+        }
+        if (xshutdown_right != NULL) {
+            delete xshutdown_right;
+            xshutdown_right = NULL;
+        }
+        if (sensor_right != NULL) {
+            delete sensor_right;
+            sensor_right = NULL;
+        }
+
+        delete stmpe1600_exp0;
+        stmpe1600_exp0 = NULL;
+        delete stmpe1600_exp1;
+        stmpe1600_exp1 = NULL;
+        _instance = NULL;
+    }
+
+
+    /**
+     * @brief       Creates a singleton object instance
+     * @param[in]   &i2c device I2C to be used for communication
+     * @return      Pointer to the object instance
+     */
+    static XNucleo53L1A1 *instance(vl53L1X_DevI2C *ext_i2c);
+
+    /**
+     * @brief       Creates a singleton object instance
+     * @param[in]   &i2c device I2C to be used for communication
+     * @param[in]   PinName gpio1_centre the pin connected to top sensor INT
+     * @param[in]   PinName gpio1_left the pin connected to left sensor INT
+     * @param[in]   PinName gpio1_right the pin connected to right sensor INT
+     * @return      Pointer to the object instance
+     */
+    static XNucleo53L1A1 *instance(vl53L1X_DevI2C *ext_i2c, PinName gpio1_centre,
+                                   PinName gpio1_left, PinName gpio1_right);
+
+    /**
+     * @brief       Initialize the board and sensors with deft values
+     * @return      0 on success
+     */
+    int init_board();
+    
+    vl53L1X_DevI2C *dev_i2c;
+    VL53L1X *sensor_centre;
+    VL53L1X *sensor_left;
+    VL53L1X *sensor_right;
+    Stmpe1600 *stmpe1600_exp0;
+    Stmpe1600 *stmpe1600_exp1;
+    Stmpe1600DigiOut *xshutdown_centre;
+    Stmpe1600DigiOut *xshutdown_left;
+    Stmpe1600DigiOut *xshutdown_right;
+    
+private:
+    static XNucleo53L1A1 *_instance;
+};
+
+
+#endif /* __VL53L1_X_NUCLEO_CLASS_H */
\ No newline at end of file