Garage Door Monitor and Opener

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Introduction

This system implements a simple garage door opener and environmental monitor. The hardware connects to the internet using Wi-Fi then on to the Pelion Device Management Platform which provides device monitoring and secure firmware updates over the air (FOTA). Pelion Device Management provides a flexible set of REST APIs which we will use to communicate to a web application running on an EC-2 instance in AWS. The web application will serve a web page where we can monitor and control our garage..

This project is intended to work on the DISCO-L475VG-IOT01A from ST Microelectronics It implements a simple actuator to drive a relay to simulate pushing the "open" button on older style garage doors which do not use a rolling code interface.

The system is designed to be mounted over the door so that the on board time of flight sensor can be used to detect if the door is open or closed.

The system also monitors temperature, humidity and barometric pressure.

https://os.mbed.com/media/uploads/JimCarver/garageopener.jpg

Hardware Requirements:

DISCO-L475G-IOT01A https://os.mbed.com/platforms/ST-Discovery-L475E-IOT01A/

Seeed Studio Grove Relay module https://www.seeedstudio.com/Grove-Relay.html

Seeed Studio Grove cable, I used this one: https://www.seeedstudio.com/Grove-4-pin-Male-Jumper-to-Grove-4-pin-Conversion-Cable-5-PCs-per-Pack.html

Connect to the PMOD connector like this:

https://os.mbed.com/media/uploads/JimCarver/opener.jpg

This shows how I installed so that the time of flight sensor can detect when the door is open

https://os.mbed.com/media/uploads/JimCarver/opener1.jpg https://os.mbed.com/media/uploads/JimCarver/opener2.jpg

To use the project:

You will also need a Pelion developers account.

I suggest you first use the Pelion quick state to become familiar with Pelion Device Management. https://os.mbed.com/guides/connect-device-to-pelion/1/?board=ST-Discovery-L475E-IOT01A

Web Interface

For my web interface I am running node-red under Ubuntu in an EC2 instance on AWS. This can run for 12 month within the constraints of their free tier. Here is a tutorial: https://nodered.org/docs/getting-started/aws

You will also need to install several node-red add ons:

sudo npm install -g node-red-dashboard

sudo npm install -g node-red-contrib-mbed-cloud

sudo npm istall -g node-red-contrib-moment

After starting node-red import the contents of GarageFlow.txt from the project, pin the flow into the page.

To enable your web app to access your Pelion account you need an API key.

First you will neet to use your Pelion account to create an API key.

https://os.mbed.com/media/uploads/JimCarver/api_portal.jpg

Now we need to apply that API key to your Node-Red flow.

https://os.mbed.com/media/uploads/JimCarver/api_node-red.jpg

Committer:
JimCarver
Date:
Thu Dec 05 19:03:48 2019 +0000
Revision:
37:ec1124e5ec1f
Parent:
18:a15bfe7aaebd
Bug fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 18:a15bfe7aaebd 1 /**
screamer 18:a15bfe7aaebd 2 ******************************************************************************
screamer 18:a15bfe7aaebd 3 * @file lis3mdl.h
screamer 18:a15bfe7aaebd 4 * @author MEMS Application Team
screamer 18:a15bfe7aaebd 5 * @version V1.3.0
screamer 18:a15bfe7aaebd 6 * @date 28-May-2015
screamer 18:a15bfe7aaebd 7 * @brief This file contains definitions for the lis3mdl.c
screamer 18:a15bfe7aaebd 8 * firmware driver.
screamer 18:a15bfe7aaebd 9 ******************************************************************************
screamer 18:a15bfe7aaebd 10 * @attention
screamer 18:a15bfe7aaebd 11 *
screamer 18:a15bfe7aaebd 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
screamer 18:a15bfe7aaebd 13 *
screamer 18:a15bfe7aaebd 14 * Redistribution and use in source and binary forms, with or without modification,
screamer 18:a15bfe7aaebd 15 * are permitted provided that the following conditions are met:
screamer 18:a15bfe7aaebd 16 * 1. Redistributions of source code must retain the above copyright notice,
screamer 18:a15bfe7aaebd 17 * this list of conditions and the following disclaimer.
screamer 18:a15bfe7aaebd 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
screamer 18:a15bfe7aaebd 19 * this list of conditions and the following disclaimer in the documentation
screamer 18:a15bfe7aaebd 20 * and/or other materials provided with the distribution.
screamer 18:a15bfe7aaebd 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
screamer 18:a15bfe7aaebd 22 * may be used to endorse or promote products derived from this software
screamer 18:a15bfe7aaebd 23 * without specific prior written permission.
screamer 18:a15bfe7aaebd 24 *
screamer 18:a15bfe7aaebd 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
screamer 18:a15bfe7aaebd 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
screamer 18:a15bfe7aaebd 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
screamer 18:a15bfe7aaebd 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
screamer 18:a15bfe7aaebd 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
screamer 18:a15bfe7aaebd 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
screamer 18:a15bfe7aaebd 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
screamer 18:a15bfe7aaebd 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
screamer 18:a15bfe7aaebd 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
screamer 18:a15bfe7aaebd 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
screamer 18:a15bfe7aaebd 35 *
screamer 18:a15bfe7aaebd 36 ******************************************************************************
screamer 18:a15bfe7aaebd 37 */
screamer 18:a15bfe7aaebd 38
screamer 18:a15bfe7aaebd 39 /* Define to prevent recursive inclusion -------------------------------------*/
screamer 18:a15bfe7aaebd 40 #ifndef __LIS3MDL_H
screamer 18:a15bfe7aaebd 41 #define __LIS3MDL_H
screamer 18:a15bfe7aaebd 42
screamer 18:a15bfe7aaebd 43 #ifdef __cplusplus
screamer 18:a15bfe7aaebd 44 extern "C" {
screamer 18:a15bfe7aaebd 45 #endif
screamer 18:a15bfe7aaebd 46
screamer 18:a15bfe7aaebd 47 /* Includes ------------------------------------------------------------------*/
screamer 18:a15bfe7aaebd 48 #include "magneto.h"
screamer 18:a15bfe7aaebd 49
screamer 18:a15bfe7aaebd 50 /** @addtogroup BSP
screamer 18:a15bfe7aaebd 51 * @{
screamer 18:a15bfe7aaebd 52 */
screamer 18:a15bfe7aaebd 53
screamer 18:a15bfe7aaebd 54 /** @addtogroup Components
screamer 18:a15bfe7aaebd 55 * @{
screamer 18:a15bfe7aaebd 56 */
screamer 18:a15bfe7aaebd 57
screamer 18:a15bfe7aaebd 58 /** @addtogroup LIS3MDL
screamer 18:a15bfe7aaebd 59 * @{
screamer 18:a15bfe7aaebd 60 */
screamer 18:a15bfe7aaebd 61
screamer 18:a15bfe7aaebd 62 /** @defgroup LIS3MDL_Exported_Defines LIS3MDL_Exported_Defines
screamer 18:a15bfe7aaebd 63 * @{
screamer 18:a15bfe7aaebd 64 */
screamer 18:a15bfe7aaebd 65 #ifndef NULL
screamer 18:a15bfe7aaebd 66 #define NULL (void *) 0
screamer 18:a15bfe7aaebd 67 #endif
screamer 18:a15bfe7aaebd 68
screamer 18:a15bfe7aaebd 69
screamer 18:a15bfe7aaebd 70 /******************************************************************************/
screamer 18:a15bfe7aaebd 71 /***************** START MAGNETIC SENSOR REGISTER MAPPING ********************/
screamer 18:a15bfe7aaebd 72 /******************************************************************************/
screamer 18:a15bfe7aaebd 73
screamer 18:a15bfe7aaebd 74 /**
screamer 18:a15bfe7aaebd 75 * @brief Device identifier register.
screamer 18:a15bfe7aaebd 76 * \code
screamer 18:a15bfe7aaebd 77 * Read
screamer 18:a15bfe7aaebd 78 * Default value:
screamer 18:a15bfe7aaebd 79 * 7:0 This read-only register contains the device identifier
screamer 18:a15bfe7aaebd 80 * \endcode
screamer 18:a15bfe7aaebd 81 */
screamer 18:a15bfe7aaebd 82 #define LIS3MDL_M_WHO_AM_I_ADDR 0x0F
screamer 18:a15bfe7aaebd 83
screamer 18:a15bfe7aaebd 84
screamer 18:a15bfe7aaebd 85 /**
screamer 18:a15bfe7aaebd 86 * @brief Magnetic sensor Control Register 1
screamer 18:a15bfe7aaebd 87 * \code
screamer 18:a15bfe7aaebd 88 * Read/write
screamer 18:a15bfe7aaebd 89 * Default value: 0x10
screamer 18:a15bfe7aaebd 90 * [7] TEMP_COMP: Temperature compensation enable
screamer 18:a15bfe7aaebd 91 * [6:5] OM1-0: X and Y axes operative mode selection
screamer 18:a15bfe7aaebd 92 * [4:2] DO2-0: Output data rate selection
screamer 18:a15bfe7aaebd 93 * [1] This bit must be set to �0� for the correct operation of the device
screamer 18:a15bfe7aaebd 94 * [0] ST: Self-test enable
screamer 18:a15bfe7aaebd 95 * \endcode
screamer 18:a15bfe7aaebd 96 */
screamer 18:a15bfe7aaebd 97 #define LIS3MDL_M_CTRL_REG1_M 0x20
screamer 18:a15bfe7aaebd 98
screamer 18:a15bfe7aaebd 99
screamer 18:a15bfe7aaebd 100 /**
screamer 18:a15bfe7aaebd 101 * @brief Magnetic sensor Control Register 2
screamer 18:a15bfe7aaebd 102 * \code
screamer 18:a15bfe7aaebd 103 * Read/write
screamer 18:a15bfe7aaebd 104 * Default value: 0x00
screamer 18:a15bfe7aaebd 105 * [7] These bits must be set to �0� for the correct operation of the device
screamer 18:a15bfe7aaebd 106 * [6:5] FS1-0: Full-scale configuration
screamer 18:a15bfe7aaebd 107 * [4] These bits must be set to �0� for the correct operation of the device
screamer 18:a15bfe7aaebd 108 * [3] REBOOT: Reboot memory content
screamer 18:a15bfe7aaebd 109 * [2] SOFT_RST: Configuration registers and user register reset function
screamer 18:a15bfe7aaebd 110 * [1:0] These bits must be set to �0� for the correct operation of the device
screamer 18:a15bfe7aaebd 111 * \endcode
screamer 18:a15bfe7aaebd 112 */
screamer 18:a15bfe7aaebd 113 #define LIS3MDL_M_CTRL_REG2_M 0x21
screamer 18:a15bfe7aaebd 114
screamer 18:a15bfe7aaebd 115
screamer 18:a15bfe7aaebd 116 /**
screamer 18:a15bfe7aaebd 117 * @brief Magnetic sensor Control Register 3
screamer 18:a15bfe7aaebd 118 * \code
screamer 18:a15bfe7aaebd 119 * Read/write
screamer 18:a15bfe7aaebd 120 * Default value: 0x03
screamer 18:a15bfe7aaebd 121 * [7] I2C_DISABLE: Disable I2C interface
screamer 18:a15bfe7aaebd 122 * [6] These bits must be set to �0� for the correct operation of the device
screamer 18:a15bfe7aaebd 123 * [5] LP: Low-power mode configuration
screamer 18:a15bfe7aaebd 124 * [4:3] These bits must be set to �0� for the correct operation of the device
screamer 18:a15bfe7aaebd 125 * [2] SIM: SPI Serial Interface mode selection
screamer 18:a15bfe7aaebd 126 * [1:0] MD1-0: Operating mode selection
screamer 18:a15bfe7aaebd 127 * \endcode
screamer 18:a15bfe7aaebd 128 */
screamer 18:a15bfe7aaebd 129 #define LIS3MDL_M_CTRL_REG3_M 0x22
screamer 18:a15bfe7aaebd 130
screamer 18:a15bfe7aaebd 131
screamer 18:a15bfe7aaebd 132 /**
screamer 18:a15bfe7aaebd 133 * @brief Magnetic sensor data (LSB)
screamer 18:a15bfe7aaebd 134 * \code
screamer 18:a15bfe7aaebd 135 * Read
screamer 18:a15bfe7aaebd 136 * \endcode
screamer 18:a15bfe7aaebd 137 */
screamer 18:a15bfe7aaebd 138 #define LIS3MDL_M_OUT_X_L_M 0x28
screamer 18:a15bfe7aaebd 139
screamer 18:a15bfe7aaebd 140
screamer 18:a15bfe7aaebd 141 /**
screamer 18:a15bfe7aaebd 142 * @brief Magnetic sensor data (MSB)
screamer 18:a15bfe7aaebd 143 * \code
screamer 18:a15bfe7aaebd 144 * Read
screamer 18:a15bfe7aaebd 145 * \endcode
screamer 18:a15bfe7aaebd 146 */
screamer 18:a15bfe7aaebd 147 #define LIS3MDL_M_OUT_X_H_M 0x29
screamer 18:a15bfe7aaebd 148
screamer 18:a15bfe7aaebd 149
screamer 18:a15bfe7aaebd 150 /**
screamer 18:a15bfe7aaebd 151 * @brief Magnetic sensor data (LSB)
screamer 18:a15bfe7aaebd 152 * \code
screamer 18:a15bfe7aaebd 153 * Read
screamer 18:a15bfe7aaebd 154 * \endcode
screamer 18:a15bfe7aaebd 155 */
screamer 18:a15bfe7aaebd 156 #define LIS3MDL_M_OUT_Y_L_M 0x2A
screamer 18:a15bfe7aaebd 157
screamer 18:a15bfe7aaebd 158
screamer 18:a15bfe7aaebd 159 /**
screamer 18:a15bfe7aaebd 160 * @brief Magnetic sensor data (MSB)
screamer 18:a15bfe7aaebd 161 * \code
screamer 18:a15bfe7aaebd 162 * Read
screamer 18:a15bfe7aaebd 163 * \endcode
screamer 18:a15bfe7aaebd 164 */
screamer 18:a15bfe7aaebd 165 #define LIS3MDL_M_OUT_Y_H_M 0x2B
screamer 18:a15bfe7aaebd 166
screamer 18:a15bfe7aaebd 167
screamer 18:a15bfe7aaebd 168 /**
screamer 18:a15bfe7aaebd 169 * @brief Magnetic sensor data (LSB)
screamer 18:a15bfe7aaebd 170 * \code
screamer 18:a15bfe7aaebd 171 * Read
screamer 18:a15bfe7aaebd 172 * \endcode
screamer 18:a15bfe7aaebd 173 */
screamer 18:a15bfe7aaebd 174 #define LIS3MDL_M_OUT_Z_L_M 0x2C
screamer 18:a15bfe7aaebd 175
screamer 18:a15bfe7aaebd 176
screamer 18:a15bfe7aaebd 177 /**
screamer 18:a15bfe7aaebd 178 * @brief Magnetic sensor data (MSB)
screamer 18:a15bfe7aaebd 179 * \code
screamer 18:a15bfe7aaebd 180 * Read
screamer 18:a15bfe7aaebd 181 * \endcode
screamer 18:a15bfe7aaebd 182 */
screamer 18:a15bfe7aaebd 183 #define LIS3MDL_M_OUT_Z_H_M 0x2D
screamer 18:a15bfe7aaebd 184
screamer 18:a15bfe7aaebd 185
screamer 18:a15bfe7aaebd 186 /**
screamer 18:a15bfe7aaebd 187 * @brief Magnetic sensor Interrupt config register
screamer 18:a15bfe7aaebd 188 * \code
screamer 18:a15bfe7aaebd 189 * Read/write
screamer 18:a15bfe7aaebd 190 * Default value: 0x00
screamer 18:a15bfe7aaebd 191 * [7] XIEN: Enable interrupt generation on X axis
screamer 18:a15bfe7aaebd 192 * [6] YIEN: Enable interrupt generation on Y axis
screamer 18:a15bfe7aaebd 193 * [5] ZIEN: Enable interrupt generation on Z axis
screamer 18:a15bfe7aaebd 194 * [4:3] Must be 0
screamer 18:a15bfe7aaebd 195 * [2] IEA: Interrupt active configuration on INT
screamer 18:a15bfe7aaebd 196 * [1] LIR: Latch interrupt request
screamer 18:a15bfe7aaebd 197 * [0] IEN: Interrupt enable on INT pin
screamer 18:a15bfe7aaebd 198 * \endcode
screamer 18:a15bfe7aaebd 199 */
screamer 18:a15bfe7aaebd 200 #define LIS3MDL_M_INT_CFG 0x30
screamer 18:a15bfe7aaebd 201
screamer 18:a15bfe7aaebd 202
screamer 18:a15bfe7aaebd 203 /**
screamer 18:a15bfe7aaebd 204 * @brief Magnetic sensor Interrupt source register
screamer 18:a15bfe7aaebd 205 * \code
screamer 18:a15bfe7aaebd 206 * Read/write
screamer 18:a15bfe7aaebd 207 * Default value: 0x00
screamer 18:a15bfe7aaebd 208 * [7] PTH_X: Value on X-axis exceeds the threshold on the positive side
screamer 18:a15bfe7aaebd 209 * [6] PTH_Y: Value on Y-axis exceeds the threshold on the positive side
screamer 18:a15bfe7aaebd 210 * [5] PTH_Z: Value on Z-axis exceeds the threshold on the positive side
screamer 18:a15bfe7aaebd 211 * [4] NTH_X: Value on X-axis exceeds the threshold on the negative side
screamer 18:a15bfe7aaebd 212 * [3] NTH_Y: Value on Y-axis exceeds the threshold on the negative side
screamer 18:a15bfe7aaebd 213 * [2] NTH_Z: Value on Z-axis exceeds the threshold on the negative side
screamer 18:a15bfe7aaebd 214 * [1] MROI: Internal measurement range overflow on magnetic value
screamer 18:a15bfe7aaebd 215 * [0] INT: This bit signals when interrupt event occours
screamer 18:a15bfe7aaebd 216 * \endcode
screamer 18:a15bfe7aaebd 217 */
screamer 18:a15bfe7aaebd 218 #define LIS3MDL_M_INT_SRC 0x31
screamer 18:a15bfe7aaebd 219
screamer 18:a15bfe7aaebd 220
screamer 18:a15bfe7aaebd 221 /**
screamer 18:a15bfe7aaebd 222 * @brief Magnetic sensor Interrupt threshold register low
screamer 18:a15bfe7aaebd 223 * \code
screamer 18:a15bfe7aaebd 224 * Read/write
screamer 18:a15bfe7aaebd 225 * Default value: 0x00
screamer 18:a15bfe7aaebd 226 * [7:0] THS7-0: Least 8 significant bits of interrupt threshold
screamer 18:a15bfe7aaebd 227 * \endcode
screamer 18:a15bfe7aaebd 228 */
screamer 18:a15bfe7aaebd 229 #define LIS3MDL_M_INT_THS_L_M 0x32
screamer 18:a15bfe7aaebd 230
screamer 18:a15bfe7aaebd 231
screamer 18:a15bfe7aaebd 232 /**
screamer 18:a15bfe7aaebd 233 * @brief Magnetic sensor Interrupt threshold register high
screamer 18:a15bfe7aaebd 234 * \code
screamer 18:a15bfe7aaebd 235 * Read/write
screamer 18:a15bfe7aaebd 236 * Default value: 0x00
screamer 18:a15bfe7aaebd 237 * [7] Must be 0
screamer 18:a15bfe7aaebd 238 * [6:0] THS14-8: Most 7 significant bits of interrupt threshold
screamer 18:a15bfe7aaebd 239 * \endcode
screamer 18:a15bfe7aaebd 240 */
screamer 18:a15bfe7aaebd 241 #define LIS3MDL_M_INT_THS_H_M 0x33
screamer 18:a15bfe7aaebd 242
screamer 18:a15bfe7aaebd 243 /******************************************************************************/
screamer 18:a15bfe7aaebd 244 /******************* END MAGNETIC SENSOR REGISTER MAPPING ********************/
screamer 18:a15bfe7aaebd 245 /******************************************************************************/
screamer 18:a15bfe7aaebd 246
screamer 18:a15bfe7aaebd 247 /**
screamer 18:a15bfe7aaebd 248 * @brief Multiple Byte. Mask for enabling multiple byte read/write command.
screamer 18:a15bfe7aaebd 249 */
screamer 18:a15bfe7aaebd 250 #define LIS3MDL_I2C_MULTIPLEBYTE_CMD ((uint8_t)0x80)
screamer 18:a15bfe7aaebd 251
screamer 18:a15bfe7aaebd 252 /**
screamer 18:a15bfe7aaebd 253 * @brief I2C Device Address
screamer 18:a15bfe7aaebd 254 */
screamer 18:a15bfe7aaebd 255 //#define LIS3MDL_M_MEMS_ADDRESS 0x3C // SAD[1] = 1
screamer 18:a15bfe7aaebd 256 #define LIS3MDL_M_MEMS_ADDRESS_LOW 0x38 // SAD[1] = 0
screamer 18:a15bfe7aaebd 257 #define LIS3MDL_M_MEMS_ADDRESS_HIGH 0x3C // SAD[1] = 1
screamer 18:a15bfe7aaebd 258
screamer 18:a15bfe7aaebd 259 /**
screamer 18:a15bfe7aaebd 260 * @brief Device Identifier. Default value of the WHO_AM_I register.
screamer 18:a15bfe7aaebd 261 */
screamer 18:a15bfe7aaebd 262 #define I_AM_LIS3MDL_M ((uint8_t)0x3D)
screamer 18:a15bfe7aaebd 263
screamer 18:a15bfe7aaebd 264
screamer 18:a15bfe7aaebd 265 /*********************************** MAGNETIC SENSOR REGISTERS VALUE ****************************************/
screamer 18:a15bfe7aaebd 266
screamer 18:a15bfe7aaebd 267 /** @defgroup LIS3MDL_M_Temperature_Compensation_Enable_Selection_CTRL_REG1_M LIS3MDL_M_Temperature_Compensation_Enable_Selection_CTRL_REG1_M
screamer 18:a15bfe7aaebd 268 * @{
screamer 18:a15bfe7aaebd 269 */
screamer 18:a15bfe7aaebd 270 #define LIS3MDL_M_TEMP_COMP_DISABLE ((uint8_t)0x00) /*!< Temperature compensation: disable */
screamer 18:a15bfe7aaebd 271 #define LIS3MDL_M_TEMP_COMP_ENABLE ((uint8_t)0x80) /*!< Temperature compensation: enable */
screamer 18:a15bfe7aaebd 272
screamer 18:a15bfe7aaebd 273 #define LIS3MDL_M_TEMP_COMP_MASK ((uint8_t)0x80)
screamer 18:a15bfe7aaebd 274 /**
screamer 18:a15bfe7aaebd 275 * @}
screamer 18:a15bfe7aaebd 276 */
screamer 18:a15bfe7aaebd 277
screamer 18:a15bfe7aaebd 278 /** @defgroup LIS3MDL_M_X_And_Y_Axes_Operative_Mode_Selection_CTRL_REG1_M LIS3MDL_M_X_And_Y_Axes_Operative_Mode_Selection_CTRL_REG1_M
screamer 18:a15bfe7aaebd 279 * @{
screamer 18:a15bfe7aaebd 280 */
screamer 18:a15bfe7aaebd 281 #define LIS3MDL_M_OM_LP ((uint8_t)0x00) /*!< X and Y axes operative mode: Low-power mode */
screamer 18:a15bfe7aaebd 282 #define LIS3MDL_M_OM_MP ((uint8_t)0x20) /*!< X and Y axes operative mode: Medium-performance mode */
screamer 18:a15bfe7aaebd 283 #define LIS3MDL_M_OM_HP ((uint8_t)0x40) /*!< X and Y axes operative mode: High-performance mode */
screamer 18:a15bfe7aaebd 284 #define LIS3MDL_M_OM_UHP ((uint8_t)0x60) /*!< X and Y axes operative mode: Ultra-high performance mode */
screamer 18:a15bfe7aaebd 285
screamer 18:a15bfe7aaebd 286 #define LIS3MDL_M_OM_MASK ((uint8_t)0x60)
screamer 18:a15bfe7aaebd 287 /**
screamer 18:a15bfe7aaebd 288 * @}
screamer 18:a15bfe7aaebd 289 */
screamer 18:a15bfe7aaebd 290
screamer 18:a15bfe7aaebd 291 /** @defgroup LIS3MDL_M_Output_Data_Rate_Selection_CTRL_REG1_M LIS3MDL_M_Output_Data_Rate_Selection_CTRL_REG1_M
screamer 18:a15bfe7aaebd 292 * @{
screamer 18:a15bfe7aaebd 293 */
screamer 18:a15bfe7aaebd 294 #define LIS3MDL_M_DO_0_625 ((uint8_t)0x00) /*!< Output data rate selection: 0.625 */
screamer 18:a15bfe7aaebd 295 #define LIS3MDL_M_DO_1_25 ((uint8_t)0x04) /*!< Output data rate selection: 1.25 */
screamer 18:a15bfe7aaebd 296 #define LIS3MDL_M_DO_2_5 ((uint8_t)0x08) /*!< Output data rate selection: 2.5 */
screamer 18:a15bfe7aaebd 297 #define LIS3MDL_M_DO_5 ((uint8_t)0x0C) /*!< Output data rate selection: 5 */
screamer 18:a15bfe7aaebd 298 #define LIS3MDL_M_DO_10 ((uint8_t)0x10) /*!< Output data rate selection: 10 */
screamer 18:a15bfe7aaebd 299 #define LIS3MDL_M_DO_20 ((uint8_t)0x14) /*!< Output data rate selection: 20 */
screamer 18:a15bfe7aaebd 300 #define LIS3MDL_M_DO_40 ((uint8_t)0x18) /*!< Output data rate selection: 40 */
screamer 18:a15bfe7aaebd 301 #define LIS3MDL_M_DO_80 ((uint8_t)0x1C) /*!< Output data rate selection: 80 */
screamer 18:a15bfe7aaebd 302
screamer 18:a15bfe7aaebd 303 #define LIS3MDL_M_DO_MASK ((uint8_t)0x1C)
screamer 18:a15bfe7aaebd 304 /**
screamer 18:a15bfe7aaebd 305 * @}
screamer 18:a15bfe7aaebd 306 */
screamer 18:a15bfe7aaebd 307
screamer 18:a15bfe7aaebd 308 /** @defgroup LIS3MDL_M_Self_Test_Enable_Selection_CTRL_REG1_M LIS3MDL_M_Self_Test_Enable_Selection_CTRL_REG1_M
screamer 18:a15bfe7aaebd 309 * @{
screamer 18:a15bfe7aaebd 310 */
screamer 18:a15bfe7aaebd 311 #define LIS3MDL_M_ST_DISABLE ((uint8_t)0x00) /*!< Self-test: disable */
screamer 18:a15bfe7aaebd 312 #define LIS3MDL_M_ST_ENABLE ((uint8_t)0x01) /*!< Self-test: enable */
screamer 18:a15bfe7aaebd 313
screamer 18:a15bfe7aaebd 314 #define LIS3MDL_M_ST_MASK ((uint8_t)0x01)
screamer 18:a15bfe7aaebd 315 /**
screamer 18:a15bfe7aaebd 316 * @}
screamer 18:a15bfe7aaebd 317 */
screamer 18:a15bfe7aaebd 318
screamer 18:a15bfe7aaebd 319 /** @defgroup LIS3MDL_M_Full_Scale_Selection_CTRL_REG2_M LIS3MDL_M_Full_Scale_Selection_CTRL_REG2_M
screamer 18:a15bfe7aaebd 320 * @{
screamer 18:a15bfe7aaebd 321 */
screamer 18:a15bfe7aaebd 322 #define LIS3MDL_M_FS_4 ((uint8_t)0x00) /*!< Full scale: +-4 guass */
screamer 18:a15bfe7aaebd 323 #define LIS3MDL_M_FS_8 ((uint8_t)0x20) /*!< Full scale: +-8 gauss */
screamer 18:a15bfe7aaebd 324 #define LIS3MDL_M_FS_12 ((uint8_t)0x40) /*!< Full scale: +-12 gauss */
screamer 18:a15bfe7aaebd 325 #define LIS3MDL_M_FS_16 ((uint8_t)0x60) /*!< Full scale: +-16 gauss */
screamer 18:a15bfe7aaebd 326
screamer 18:a15bfe7aaebd 327 #define LIS3MDL_M_FS_MASK ((uint8_t)0x60)
screamer 18:a15bfe7aaebd 328 /**
screamer 18:a15bfe7aaebd 329 * @}
screamer 18:a15bfe7aaebd 330 */
screamer 18:a15bfe7aaebd 331
screamer 18:a15bfe7aaebd 332 /** @defgroup LIS3MDL_M_Reboot_Memory_Selection_CTRL_REG2_M LIS3MDL_M_Reboot_Memory_Selection_CTRL_REG2_M
screamer 18:a15bfe7aaebd 333 * @{
screamer 18:a15bfe7aaebd 334 */
screamer 18:a15bfe7aaebd 335 #define LIS3MDL_M_REBOOT_NORMAL ((uint8_t)0x00) /*!< Reboot mode: normal mode */
screamer 18:a15bfe7aaebd 336 #define LIS3MDL_M_REBOOT_MEM_CONTENT ((uint8_t)0x08) /*!< Reboot mode: reboot memory content */
screamer 18:a15bfe7aaebd 337
screamer 18:a15bfe7aaebd 338 #define LIS3MDL_M_REBOOT_MASK ((uint8_t)0x08)
screamer 18:a15bfe7aaebd 339 /**
screamer 18:a15bfe7aaebd 340 * @}
screamer 18:a15bfe7aaebd 341 */
screamer 18:a15bfe7aaebd 342
screamer 18:a15bfe7aaebd 343 /** @defgroup LIS3MDL_M_Configuration_Registers_And_User_Register_Reset_CTRL_REG2_M LIS3MDL_M_Configuration_Registers_And_User_Register_Reset_CTRL_REG2_M
screamer 18:a15bfe7aaebd 344 * @{
screamer 18:a15bfe7aaebd 345 */
screamer 18:a15bfe7aaebd 346 #define LIS3MDL_M_SOFT_RST_DEFAULT ((uint8_t)0x00) /*!< Reset function: default value */
screamer 18:a15bfe7aaebd 347 #define LIS3MDL_M_SOFT_RST_RESET ((uint8_t)0x04) /*!< Reset function: reset operation */
screamer 18:a15bfe7aaebd 348
screamer 18:a15bfe7aaebd 349 #define LIS3MDL_M_SOFT_RST_MASK ((uint8_t)0x04)
screamer 18:a15bfe7aaebd 350 /**
screamer 18:a15bfe7aaebd 351 * @}
screamer 18:a15bfe7aaebd 352 */
screamer 18:a15bfe7aaebd 353
screamer 18:a15bfe7aaebd 354 /** @defgroup LIS3MDL_M_Disable_I2C_Interface_Selection_CTRL_REG3_M LIS3MDL_M_Disable_I2C_Interface_Selection_CTRL_REG3_M
screamer 18:a15bfe7aaebd 355 * @{
screamer 18:a15bfe7aaebd 356 */
screamer 18:a15bfe7aaebd 357 #define LIS3MDL_M_I2C_ENABLE ((uint8_t)0x00) /*!< I2C interface: enable */
screamer 18:a15bfe7aaebd 358 #define LIS3MDL_M_I2C_DISABLE ((uint8_t)0x80) /*!< I2C interface: disable */
screamer 18:a15bfe7aaebd 359
screamer 18:a15bfe7aaebd 360 #define LIS3MDL_M_I2C_MASK ((uint8_t)0x80)
screamer 18:a15bfe7aaebd 361 /**
screamer 18:a15bfe7aaebd 362 * @}
screamer 18:a15bfe7aaebd 363 */
screamer 18:a15bfe7aaebd 364
screamer 18:a15bfe7aaebd 365 /** @defgroup LIS3MDL_M_Low_Power_Mode_Selection_CTRL_REG3_M LIS3MDL_M_Low_Power_Mode_Selection_CTRL_REG3_M
screamer 18:a15bfe7aaebd 366 * @{
screamer 18:a15bfe7aaebd 367 */
screamer 18:a15bfe7aaebd 368 #define LIS3MDL_M_LP_ENABLE ((uint8_t)0x00) /*!< Low-power mode: magnetic data rate is configured by
screamer 18:a15bfe7aaebd 369 the DO bits in the CTRL_REG1_M */
screamer 18:a15bfe7aaebd 370 #define LIS3MDL_M_LP_DISABLE ((uint8_t)0x20) /*!< Low-power mode: the DO bits is set to 0.625 Hz and the system performs,
screamer 18:a15bfe7aaebd 371 for each channel, the minimum number of averages */
screamer 18:a15bfe7aaebd 372
screamer 18:a15bfe7aaebd 373 #define LIS3MDL_M_LP_MASK ((uint8_t)0x20)
screamer 18:a15bfe7aaebd 374 /**
screamer 18:a15bfe7aaebd 375 * @}
screamer 18:a15bfe7aaebd 376 */
screamer 18:a15bfe7aaebd 377
screamer 18:a15bfe7aaebd 378 /** @defgroup LIS3MDL_M_SPI_Serial_Interface_Mode_Selection_CTRL_REG3_M LIS3MDL_M_SPI_Serial_Interface_Mode_Selection_CTRL_REG3_M
screamer 18:a15bfe7aaebd 379 * @{
screamer 18:a15bfe7aaebd 380 */
screamer 18:a15bfe7aaebd 381 #define LIS3MDL_M_SPI_R_ENABLE ((uint8_t)0x00) /*!< SPI Serial Interface mode: only write operations enabled */
screamer 18:a15bfe7aaebd 382 #define LIS3MDL_M_SPI_R_DISABLE ((uint8_t)0x40) /*!< SPI Serial Interface mode: read and write operations enable */
screamer 18:a15bfe7aaebd 383
screamer 18:a15bfe7aaebd 384 #define LIS3MDL_M_SPI_R_MASK ((uint8_t)0x40)
screamer 18:a15bfe7aaebd 385 /**
screamer 18:a15bfe7aaebd 386 * @}
screamer 18:a15bfe7aaebd 387 */
screamer 18:a15bfe7aaebd 388
screamer 18:a15bfe7aaebd 389 /** @defgroup LIS3MDL_M_Operating_Mode_Selection_CTRL_REG3_M LIS3MDL_M_Operating_Mode_Selection_CTRL_REG3_M
screamer 18:a15bfe7aaebd 390 * @{
screamer 18:a15bfe7aaebd 391 */
screamer 18:a15bfe7aaebd 392 #define LIS3MDL_M_MD_CONTINUOUS ((uint8_t)0x00) /*!< Operating mode: Continuous-conversion mode */
screamer 18:a15bfe7aaebd 393 #define LIS3MDL_M_MD_SINGLE ((uint8_t)0x01) /*!< Operating mode: Single-conversion mode has to be used with sampling frequency from 0.625 Hz to 80 Hz. */
screamer 18:a15bfe7aaebd 394 #define LIS3MDL_M_MD_PD ((uint8_t)0x02) /*!< Operating mode: Power-down mode */
screamer 18:a15bfe7aaebd 395
screamer 18:a15bfe7aaebd 396 #define LIS3MDL_M_MD_MASK ((uint8_t)0x03)
screamer 18:a15bfe7aaebd 397 /**
screamer 18:a15bfe7aaebd 398 * @}
screamer 18:a15bfe7aaebd 399 */
screamer 18:a15bfe7aaebd 400
screamer 18:a15bfe7aaebd 401 /**
screamer 18:a15bfe7aaebd 402 * @}
screamer 18:a15bfe7aaebd 403 */
screamer 18:a15bfe7aaebd 404
screamer 18:a15bfe7aaebd 405 /** @defgroup LIS3MDL_Imported_Functions LIS3MDL_Imported_Functions
screamer 18:a15bfe7aaebd 406 * @{
screamer 18:a15bfe7aaebd 407 */
screamer 18:a15bfe7aaebd 408
screamer 18:a15bfe7aaebd 409 /* Magneto sensor IO functions */
screamer 18:a15bfe7aaebd 410 extern MAGNETO_StatusTypeDef LIS3MDL_IO_Init(void);
screamer 18:a15bfe7aaebd 411 extern MAGNETO_StatusTypeDef LIS3MDL_IO_Write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
screamer 18:a15bfe7aaebd 412 uint16_t NumByteToWrite);
screamer 18:a15bfe7aaebd 413 extern MAGNETO_StatusTypeDef LIS3MDL_IO_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
screamer 18:a15bfe7aaebd 414 uint16_t NumByteToRead);
screamer 18:a15bfe7aaebd 415 extern void LIS3MDL_IO_ITConfig( void );
screamer 18:a15bfe7aaebd 416
screamer 18:a15bfe7aaebd 417 /**
screamer 18:a15bfe7aaebd 418 * @}
screamer 18:a15bfe7aaebd 419 */
screamer 18:a15bfe7aaebd 420
screamer 18:a15bfe7aaebd 421 /* ------------------------------------------------------- */
screamer 18:a15bfe7aaebd 422 /* Here you should declare the internal struct of */
screamer 18:a15bfe7aaebd 423 /* extended features of LSM6DS0. See the example of */
screamer 18:a15bfe7aaebd 424 /* LSM6DS3 in lsm6ds3.h */
screamer 18:a15bfe7aaebd 425 /* ------------------------------------------------------- */
screamer 18:a15bfe7aaebd 426 typedef enum { LIS3MDL_SPI_4_WIRE = (uint8_t)0x00, LIS3MDL_SPI_3_WIRE = (uint8_t)0x04} LIS3MDL_SPIMode_t;
screamer 18:a15bfe7aaebd 427 /** @addtogroup LIS3MDL_Exported_Variables LIS3MDL_Exported_Variables
screamer 18:a15bfe7aaebd 428 * @{
screamer 18:a15bfe7aaebd 429 */
screamer 18:a15bfe7aaebd 430 /* Magneto sensor driver structure */
screamer 18:a15bfe7aaebd 431 extern MAGNETO_DrvTypeDef LIS3MDLDrv;
screamer 18:a15bfe7aaebd 432 extern MAGNETO_DrvExtTypeDef LIS3MDLDrv_ext;
screamer 18:a15bfe7aaebd 433
screamer 18:a15bfe7aaebd 434 /**
screamer 18:a15bfe7aaebd 435 * @}
screamer 18:a15bfe7aaebd 436 */
screamer 18:a15bfe7aaebd 437
screamer 18:a15bfe7aaebd 438 /**
screamer 18:a15bfe7aaebd 439 * @}
screamer 18:a15bfe7aaebd 440 */
screamer 18:a15bfe7aaebd 441
screamer 18:a15bfe7aaebd 442 /**
screamer 18:a15bfe7aaebd 443 * @}
screamer 18:a15bfe7aaebd 444 */
screamer 18:a15bfe7aaebd 445
screamer 18:a15bfe7aaebd 446 /**
screamer 18:a15bfe7aaebd 447 * @}
screamer 18:a15bfe7aaebd 448 */
screamer 18:a15bfe7aaebd 449
screamer 18:a15bfe7aaebd 450 #ifdef __cplusplus
screamer 18:a15bfe7aaebd 451 }
screamer 18:a15bfe7aaebd 452 #endif
screamer 18:a15bfe7aaebd 453
screamer 18:a15bfe7aaebd 454 #endif /* __LIS3MDL_H */
screamer 18:a15bfe7aaebd 455
screamer 18:a15bfe7aaebd 456 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/