Library to handle the X-NUCLEO-6180XA1 Proximity and ambient light sensor expansion board based on VL6180X.

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   HelloWorld_6180XA1 SunTracker_BLE Servo_6180XA1 BLE_HR_Light ... more

Fork of X_NUCLEO_6180XA1 by ST Expansion SW Team

X-NUCLEO-6180XA1 Proximity and Ambient Light Sensor Expansion Board Firmware Package

Introduction

This firmware package includes Components Device Drivers and Board Support Package for STMicroelectronics' X-NUCLEO-6180XA1 Proximity and ambient light sensor expansion board based on VL6180X.

Firmware Library

Class X_NUCLEO_6180XA1 is intended to represent the Proximity and ambient light sensor expansion board with the same name.

The expansion board is providing the support of the following components:

  1. on-board VL6180X proximity and ambient light sensor,
  2. up to three additional VL6180X Satellites,
  3. on-board 4-digit display

It is intentionally implemented as a singleton because only one X-NUCLEO-VL6180XA1 at a time might be deployed 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 X_NUCLEO_6180XA1 *6180X_expansion_board = X_NUCLEO_6180XA1::Instance();

Arduino Connector Compatibility Warning

Using the X-NUCLEO-6180XA1 expansion board with the NUCLEO-F429ZI requires adopting the following patch:

  • to remove R46 resistor connected to A3 pin;
  • to solder R47 resistor connected to A5 pin.

Alternatively, you can route the Nucleo board’s A5 pin directly to the expansion board’s A3 pin with a wire. In case you patch your expansion board or route the pin, the interrupt signal for the front sensor will be driven on A5 pin rather than on A3 pin.


Example Applications

Committer:
nikapov
Date:
Mon Aug 21 15:44:34 2017 +0000
Revision:
58:1e9a3a46f814
Parent:
57:fa4c622b04a7
Make compatible with non-copyable version of I2C.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gallonm 1:1de1ea2994d9 1 /*******************************************************************************
gallonm 10:4954b09b72d8 2 ################################################################################
gallonm 10:4954b09b72d8 3 #
gallonm 10:4954b09b72d8 4 # This program is free software; you can redistribute it and/or modify it under
gallonm 10:4954b09b72d8 5 # the terms of the GNU General Public License version 2 and only version 2 as
gallonm 10:4954b09b72d8 6 # published by the Free Software Foundation.
gallonm 10:4954b09b72d8 7 #
gallonm 10:4954b09b72d8 8 # This program is distributed in the hope that it will be useful, but WITHOUT
gallonm 10:4954b09b72d8 9 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
gallonm 10:4954b09b72d8 10 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
gallonm 10:4954b09b72d8 11 # details.
gallonm 10:4954b09b72d8 12 #
gallonm 10:4954b09b72d8 13 # You should have received a copy of the GNU General Public License along with
gallonm 10:4954b09b72d8 14 # this program; if not, write to the Free Software Foundation, Inc.,
gallonm 10:4954b09b72d8 15 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
gallonm 10:4954b09b72d8 16 #
gallonm 10:4954b09b72d8 17 #------------------------------------------------------------------------------
gallonm 10:4954b09b72d8 18 # Imaging Division
gallonm 10:4954b09b72d8 19 ################################################################################
gallonm 1:1de1ea2994d9 20 ********************************************************************************/
gallonm 1:1de1ea2994d9 21
gallonm 1:1de1ea2994d9 22
gallonm 10:4954b09b72d8 23 /* vl6180x_platform.h STM32 Nucleo F401 single device sample code project */
gallonm 1:1de1ea2994d9 24
Davidroid 57:fa4c622b04a7 25 #ifndef VL6180X_PLATFORM
Davidroid 57:fa4c622b04a7 26 #define VL6180X_PLATFORM
gallonm 1:1de1ea2994d9 27
gallonm 10:4954b09b72d8 28
gallonm 1:1de1ea2994d9 29 #include "vl6180x_def.h"
gallonm 1:1de1ea2994d9 30
gallonm 1:1de1ea2994d9 31
Davidroid 57:fa4c622b04a7 32 #define VL6180X_SINGLE_DEVICE_DRIVER 0
Davidroid 57:fa4c622b04a7 33 #define VL6180X_RANGE_STATUS_ERRSTRING 1
davide.aliprandi@st.com 56:37d1736bd896 34 #define VL6180X_SAFE_POLLING_ENTER 0
gallonm 16:0d4776564733 35 #define VL6180X_LOG_ENABLE 0
gallonm 20:dd8390d615bf 36 #define MY_LOG 1
gallonm 1:1de1ea2994d9 37
Davidroid 57:fa4c622b04a7 38 #define VL6180X_DEV_DATA_ATTR
gallonm 1:1de1ea2994d9 39 #define ROMABLE_DATA
gallonm 1:1de1ea2994d9 40
gallonm 1:1de1ea2994d9 41
gallonm 1:1de1ea2994d9 42 #if VL6180X_LOG_ENABLE
gallonm 1:1de1ea2994d9 43 /* dot not include non ansi here trace was a case :( */
gallonm 1:1de1ea2994d9 44 #ifdef TRACE
gallonm 1:1de1ea2994d9 45 #include "diag/trace.h"
gallonm 1:1de1ea2994d9 46 extern volatile uint32_t g_TickCnt;
gallonm 1:1de1ea2994d9 47 #define LOG_GET_TIME() g_TickCnt
gallonm 10:4954b09b72d8 48 //#define LOG_GET_TIME() HAL_GetTick()
gallonm 1:1de1ea2994d9 49 #else
gallonm 1:1de1ea2994d9 50 /* these is nto stm32 vl6180x GNuArm eclpse build*/
gallonm 1:1de1ea2994d9 51 #define trace_printf(...) (void)0
gallonm 1:1de1ea2994d9 52 #define LOG_GET_TIME() (int)0 /* add your code here expect to be an integer native (%d) type value */
gallonm 1:1de1ea2994d9 53 #endif
gallonm 1:1de1ea2994d9 54
gallonm 1:1de1ea2994d9 55
gallonm 1:1de1ea2994d9 56
gallonm 1:1de1ea2994d9 57 #define LOG_FUNCTION_START(fmt, ... ) \
gallonm 1:1de1ea2994d9 58 trace_printf("beg %s start @%d\t" fmt "\n", __func__, LOG_GET_TIME(), ##__VA_ARGS__)
gallonm 1:1de1ea2994d9 59
gallonm 1:1de1ea2994d9 60 #define LOG_FUNCTION_END(status)\
davide.aliprandi@st.com 56:37d1736bd896 61 trace_printf("end %s @%d %d\n", __func__, LOG_GET_TIME(), (int)status)
gallonm 1:1de1ea2994d9 62
gallonm 1:1de1ea2994d9 63 #define LOG_FUNCTION_END_FMT(status, fmt, ... )\
davide.aliprandi@st.com 56:37d1736bd896 64 trace_printf("End %s @%d %d\t"fmt"\n" , __func__, LOG_GET_TIME(), (int)status, ##__VA_ARGS__)
gallonm 1:1de1ea2994d9 65
Davidroid 57:fa4c622b04a7 66 #define VL6180X_ErrLog(msg, ... )\
davide.aliprandi@st.com 56:37d1736bd896 67 do {\
gallonm 1:1de1ea2994d9 68 trace_printf("ERR in %s line %d\n" msg, __func__, __LINE__, ##__VA_ARGS__);\
davide.aliprandi@st.com 56:37d1736bd896 69 } while(0)
gallonm 1:1de1ea2994d9 70
gallonm 1:1de1ea2994d9 71 #else /* VL6180X_LOG_ENABLE no logging */
mapellil 19:39ea6bab0e5b 72 //void OnErrLog(void);
gallonm 20:dd8390d615bf 73 #define LOG_FUNCTION_START(...) (void)0
gallonm 20:dd8390d615bf 74 #define LOG_FUNCTION_END(...) (void)0
gallonm 20:dd8390d615bf 75 #define LOG_FUNCTION_END_FMT(...) (void)0
Davidroid 57:fa4c622b04a7 76 #define VL6180X_ErrLog(... ) //OnErrLog() //(void)0
gallonm 16:0d4776564733 77 #endif
gallonm 16:0d4776564733 78
gallonm 20:dd8390d615bf 79 #ifdef MY_LOG /* define printf as pc.printf in order to change the baudrate */
gallonm 16:0d4776564733 80 extern Serial pc;
gallonm 16:0d4776564733 81 #define printf(...) pc.printf(__VA_ARGS__)
gallonm 1:1de1ea2994d9 82 #endif
gallonm 1:1de1ea2994d9 83
Davidroid 57:fa4c622b04a7 84 #if VL6180X_SINGLE_DEVICE_DRIVER
Davidroid 57:fa4c622b04a7 85 #error "VL6180X_SINGLE_DEVICE_DRIVER must be set"
gallonm 10:4954b09b72d8 86 #endif
gallonm 10:4954b09b72d8 87
gallonm 10:4954b09b72d8 88 struct MyVL6180Dev_t {
Davidroid 57:fa4c622b04a7 89 struct VL6180XDevData_t Data;
gallonm 20:dd8390d615bf 90 uint8_t I2cAddr;
gallonm 20:dd8390d615bf 91 //uint8_t DevID;
licio.mapelli@st.com 8:f943a1fca15f 92
gallonm 20:dd8390d615bf 93 //misc flags for application
gallonm 10:4954b09b72d8 94 unsigned Present:1;
gallonm 10:4954b09b72d8 95 unsigned Ready:1;
gallonm 10:4954b09b72d8 96 };
Davidroid 57:fa4c622b04a7 97 typedef struct MyVL6180Dev_t *VL6180XDev_t;
gallonm 1:1de1ea2994d9 98
Davidroid 57:fa4c622b04a7 99 #define VL6180XDevDataGet(dev, field) (dev->Data.field)
Davidroid 57:fa4c622b04a7 100 #define VL6180XDevDataSet(dev, field, data) (dev->Data.field)=(data)
gallonm 1:1de1ea2994d9 101
Davidroid 57:fa4c622b04a7 102 #endif /* VL6180X_PLATFORM */