MAX32620HSP (MAXREFDES100) RPC Example for Graphical User Interface

Dependencies:   USBDevice

Fork of HSP_Release by Jerry Bradshaw

This is an example program for the MAX32620HSP (MAXREFDES100 Health Sensor Platform). It demonstrates all the features of the platform and works with a companion graphical user interface (GUI) to help evaluate/configure/monitor the board. Go to the MAXREFDES100 product page and click on "design resources" to download the companion software. The GUI connects to the board through an RPC interface on a virtual serial port over the USB interface.

The RPC interface provides access to all the features of the board and is available to interface with other development environments such Matlab. This firmware provides realtime data streaming through the RPC interface over USB, and also provides the ability to log the data to flash for untethered battery operation. The data logging settings are configured through the GUI, and the GUI also provides the interface to download logged data.

Details on the RPC interface can be found here: HSP RPC Interface Documentation

Windows

With this program loaded, the MAX32620HSP will appear on your computer as a serial port. On Mac and Linux, this will happen by default. For Windows, you need to install a driver: HSP serial port windows driver

For more details about this platform and how to use it, see the MAXREFDES100 product page.

Committer:
jbradshaw
Date:
Fri Apr 21 12:12:30 2017 -0500
Revision:
1:9490836294ea
Parent:
0:e4a10ed6eb92
Flash device is now fully utilized for datalog of sensor data

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jbradshaw 0:e4a10ed6eb92 1 /*******************************************************************************
jbradshaw 1:9490836294ea 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
jbradshaw 0:e4a10ed6eb92 3 *
jbradshaw 0:e4a10ed6eb92 4 * Permission is hereby granted, free of charge, to any person obtaining a
jbradshaw 0:e4a10ed6eb92 5 * copy of this software and associated documentation files (the "Software"),
jbradshaw 0:e4a10ed6eb92 6 * to deal in the Software without restriction, including without limitation
jbradshaw 0:e4a10ed6eb92 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
jbradshaw 0:e4a10ed6eb92 8 * and/or sell copies of the Software, and to permit persons to whom the
jbradshaw 0:e4a10ed6eb92 9 * Software is furnished to do so, subject to the following conditions:
jbradshaw 0:e4a10ed6eb92 10 *
jbradshaw 0:e4a10ed6eb92 11 * The above copyright notice and this permission notice shall be included
jbradshaw 0:e4a10ed6eb92 12 * in all copies or substantial portions of the Software.
jbradshaw 0:e4a10ed6eb92 13 *
jbradshaw 0:e4a10ed6eb92 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
jbradshaw 0:e4a10ed6eb92 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
jbradshaw 0:e4a10ed6eb92 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
jbradshaw 0:e4a10ed6eb92 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
jbradshaw 0:e4a10ed6eb92 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
jbradshaw 0:e4a10ed6eb92 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
jbradshaw 0:e4a10ed6eb92 20 * OTHER DEALINGS IN THE SOFTWARE.
jbradshaw 0:e4a10ed6eb92 21 *
jbradshaw 0:e4a10ed6eb92 22 * Except as contained in this notice, the name of Maxim Integrated
jbradshaw 0:e4a10ed6eb92 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
jbradshaw 0:e4a10ed6eb92 24 * Products, Inc. Branding Policy.
jbradshaw 0:e4a10ed6eb92 25 *
jbradshaw 0:e4a10ed6eb92 26 * The mere transfer of this software does not imply any licenses
jbradshaw 0:e4a10ed6eb92 27 * of trade secrets, proprietary technology, copyrights, patents,
jbradshaw 0:e4a10ed6eb92 28 * trademarks, maskwork rights, or any other form of intellectual
jbradshaw 0:e4a10ed6eb92 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
jbradshaw 0:e4a10ed6eb92 30 * ownership rights.
jbradshaw 0:e4a10ed6eb92 31 *******************************************************************************/
jbradshaw 0:e4a10ed6eb92 32 /**
jbradshaw 0:e4a10ed6eb92 33 * Bosch BMP280 Digital Pressure Sensor
jbradshaw 0:e4a10ed6eb92 34 *
jbradshaw 0:e4a10ed6eb92 35 */
jbradshaw 0:e4a10ed6eb92 36
jbradshaw 0:e4a10ed6eb92 37 #ifndef BMP280_H_
jbradshaw 0:e4a10ed6eb92 38 #define BMP280_H_
jbradshaw 0:e4a10ed6eb92 39
jbradshaw 0:e4a10ed6eb92 40 #include "mbed.h"
jbradshaw 0:e4a10ed6eb92 41
jbradshaw 0:e4a10ed6eb92 42 /**
jbradshaw 0:e4a10ed6eb92 43 * @brief Bosch BMP280 Digital Pressure Sensor
jbradshaw 0:e4a10ed6eb92 44 */
jbradshaw 0:e4a10ed6eb92 45 class BMP280 {
jbradshaw 0:e4a10ed6eb92 46
jbradshaw 0:e4a10ed6eb92 47 public:
jbradshaw 1:9490836294ea 48
jbradshaw 1:9490836294ea 49 typedef enum { ///< BMP280 Register addresses
jbradshaw 1:9490836294ea 50
jbradshaw 1:9490836294ea 51 BMP280_READID = 0x58,
jbradshaw 1:9490836294ea 52 BMP280_TEMP_XLSB = 0xFC,
jbradshaw 1:9490836294ea 53 BMP280_TEMP_LSB = 0xFB,
jbradshaw 1:9490836294ea 54 BMP280_TEMP_MSB = 0xFA,
jbradshaw 1:9490836294ea 55 BMP280_PRESS_XLSB = 0xF9,
jbradshaw 1:9490836294ea 56 BMP280_PRESS_LSB = 0xF8,
jbradshaw 1:9490836294ea 57 BMP280_PRESS_MSB = 0xF7,
jbradshaw 1:9490836294ea 58 BMP280_CONFIG = 0xF5,
jbradshaw 1:9490836294ea 59 BMP280_CTRL_MEAS = 0xF4,
jbradshaw 1:9490836294ea 60 BMP280_STATUS = 0xF3,
jbradshaw 1:9490836294ea 61 BMP280_RESET = 0xE0,
jbradshaw 1:9490836294ea 62 BMP280_ID = 0xD0,
jbradshaw 1:9490836294ea 63 ///< calib25-calib00: 0xA1-0x88
jbradshaw 1:9490836294ea 64 BMP280_CALIB25 = 0xA1, ///< Beginning address
jbradshaw 1:9490836294ea 65 BMP280_CALIB00 = 0x88, ///< Ending address
jbradshaw 1:9490836294ea 66
jbradshaw 1:9490836294ea 67 BMP280_REGISTER_CHIPID = 0xD0,
jbradshaw 1:9490836294ea 68 BMP280_REGISTER_VERSION = 0xD1,
jbradshaw 1:9490836294ea 69 BMP280_REGISTER_SOFTRESET = 0xE0,
jbradshaw 1:9490836294ea 70 BMP280_REGISTER_CAL26 = 0xE1, // R calibration stored in 0xE1-0xF0
jbradshaw 1:9490836294ea 71 BMP280_REGISTER_CONTROL = 0xF4,
jbradshaw 1:9490836294ea 72 BMP280_REGISTER_CONFIG = 0xF5,
jbradshaw 1:9490836294ea 73 BMP280_REGISTER_PRESSUREDATA = 0xF7,
jbradshaw 1:9490836294ea 74 BMP280_REGISTER_TEMPDATA = 0xFA,
jbradshaw 1:9490836294ea 75
jbradshaw 1:9490836294ea 76 } BMP280_REG_map_t;
jbradshaw 1:9490836294ea 77
jbradshaw 1:9490836294ea 78
jbradshaw 0:e4a10ed6eb92 79 /**
jbradshaw 1:9490836294ea 80 * @brief BMP280 constructor.
jbradshaw 0:e4a10ed6eb92 81 * @param sda mbed pin to use for SDA line of I2C interface.
jbradshaw 0:e4a10ed6eb92 82 * @param scl mbed pin to use for SCL line of I2C interface.
jbradshaw 0:e4a10ed6eb92 83 * @param slaveAddress Slave Address of the device.
jbradshaw 0:e4a10ed6eb92 84 */
jbradshaw 0:e4a10ed6eb92 85 BMP280(PinName sda, PinName scl, int slaveAddress);
jbradshaw 0:e4a10ed6eb92 86
jbradshaw 0:e4a10ed6eb92 87 /**
jbradshaw 1:9490836294ea 88 * @brief BMP280 constructor.
jbradshaw 0:e4a10ed6eb92 89 * @param i2c I2C object to use.
jbradshaw 0:e4a10ed6eb92 90 * @param slaveAddress Slave Address of the device.
jbradshaw 0:e4a10ed6eb92 91 */
jbradshaw 0:e4a10ed6eb92 92 BMP280(I2C *i2c, int slaveAddress);
jbradshaw 0:e4a10ed6eb92 93
jbradshaw 0:e4a10ed6eb92 94 char loggingEnabled;
jbradshaw 0:e4a10ed6eb92 95 char loggingSampleRate;
jbradshaw 0:e4a10ed6eb92 96
jbradshaw 0:e4a10ed6eb92 97 /**
jbradshaw 1:9490836294ea 98 * @brief Write a device register
jbradshaw 0:e4a10ed6eb92 99 */
jbradshaw 0:e4a10ed6eb92 100 int writeReg(char reg, char value);
jbradshaw 0:e4a10ed6eb92 101 /**
jbradshaw 1:9490836294ea 102 * @brief Read a device register
jbradshaw 0:e4a10ed6eb92 103 */
jbradshaw 0:e4a10ed6eb92 104 int readReg(char reg, char *value);
jbradshaw 1:9490836294ea 105
jbradshaw 1:9490836294ea 106 ///< @brief CONFIG_REG (0xF5)
jbradshaw 1:9490836294ea 107 typedef union bmp280_config_reg {
jbradshaw 0:e4a10ed6eb92 108 char all;
jbradshaw 0:e4a10ed6eb92 109 struct {
jbradshaw 0:e4a10ed6eb92 110 char spi3w_en : 1;
jbradshaw 0:e4a10ed6eb92 111 char reserved : 1;
jbradshaw 1:9490836294ea 112 char filter : 3;
jbradshaw 1:9490836294ea 113 char t_sb : 3;
jbradshaw 0:e4a10ed6eb92 114 } bit;
jbradshaw 1:9490836294ea 115 } bmp280_config_t;
jbradshaw 0:e4a10ed6eb92 116
jbradshaw 1:9490836294ea 117 ///< @brief CTRL_MEAS (0xF4)
jbradshaw 1:9490836294ea 118 typedef union bmp280_ctrl_meas {
jbradshaw 0:e4a10ed6eb92 119 char all;
jbradshaw 0:e4a10ed6eb92 120 struct {
jbradshaw 1:9490836294ea 121 char mode : 2;
jbradshaw 0:e4a10ed6eb92 122 char osrs_p : 3;
jbradshaw 0:e4a10ed6eb92 123 char osrs_t : 3;
jbradshaw 0:e4a10ed6eb92 124 } bit;
jbradshaw 1:9490836294ea 125 } bmp280_ctrl_meas_t;
jbradshaw 0:e4a10ed6eb92 126
jbradshaw 1:9490836294ea 127 ///< @brief STATUS (0xF3)
jbradshaw 1:9490836294ea 128 typedef union bmp280_status {
jbradshaw 0:e4a10ed6eb92 129 char all;
jbradshaw 0:e4a10ed6eb92 130 struct {
jbradshaw 0:e4a10ed6eb92 131 char im_update : 1;
jbradshaw 0:e4a10ed6eb92 132 char reserved1 : 2;
jbradshaw 0:e4a10ed6eb92 133 char measuring : 1;
jbradshaw 0:e4a10ed6eb92 134 char reserved2 : 4;
jbradshaw 0:e4a10ed6eb92 135 } bit;
jbradshaw 1:9490836294ea 136 } bmp280_status_t;
jbradshaw 0:e4a10ed6eb92 137
jbradshaw 1:9490836294ea 138
jbradshaw 1:9490836294ea 139 ///< @brief RESET (0xE0)
jbradshaw 0:e4a10ed6eb92 140 char bmp280_reset;
jbradshaw 0:e4a10ed6eb92 141
jbradshaw 1:9490836294ea 142 ///< @brief ID (0xD0)
jbradshaw 0:e4a10ed6eb92 143 char bmp280_id;
jbradshaw 0:e4a10ed6eb92 144
jbradshaw 0:e4a10ed6eb92 145 typedef enum {
jbradshaw 0:e4a10ed6eb92 146 SKIPPED_P = 0,
jbradshaw 1:9490836294ea 147 OVERSAMPLING_X1_P = 1,
jbradshaw 1:9490836294ea 148 OVERSAMPLING_X2_P = 2,
jbradshaw 1:9490836294ea 149 OVERSAMPLING_X4_P = 3,
jbradshaw 1:9490836294ea 150 OVERSAMPLING_X8_P = 4,
jbradshaw 0:e4a10ed6eb92 151 OVERSAMPLING_X16_P = 5
jbradshaw 0:e4a10ed6eb92 152 } bmp280_osrs_P_t;
jbradshaw 0:e4a10ed6eb92 153
jbradshaw 0:e4a10ed6eb92 154 typedef enum {
jbradshaw 0:e4a10ed6eb92 155 SKIPPED_T = 0,
jbradshaw 1:9490836294ea 156 OVERSAMPLING_X1_T = 1,
jbradshaw 1:9490836294ea 157 OVERSAMPLING_X2_T = 2,
jbradshaw 1:9490836294ea 158 OVERSAMPLING_X4_T = 3,
jbradshaw 1:9490836294ea 159 OVERSAMPLING_X8_T = 4,
jbradshaw 0:e4a10ed6eb92 160 OVERSAMPLING_X16_T = 5
jbradshaw 0:e4a10ed6eb92 161 } bmp280_osrs_T_t;
jbradshaw 0:e4a10ed6eb92 162
jbradshaw 0:e4a10ed6eb92 163 typedef enum {
jbradshaw 0:e4a10ed6eb92 164 FILT_OFF = 1,
jbradshaw 1:9490836294ea 165 FILT_2 = 2,
jbradshaw 1:9490836294ea 166 FILT_3 = 4,
jbradshaw 1:9490836294ea 167 FILT_4 = 8,
jbradshaw 1:9490836294ea 168 FILT_5 = 16
jbradshaw 0:e4a10ed6eb92 169 } bmp280_FILT_t;
jbradshaw 0:e4a10ed6eb92 170
jbradshaw 0:e4a10ed6eb92 171 typedef enum {
jbradshaw 1:9490836294ea 172 SLEEP_MODE = 0,
jbradshaw 0:e4a10ed6eb92 173 FORCED_MODE = 1,
jbradshaw 0:e4a10ed6eb92 174 NORMAL_MODE = 3
jbradshaw 0:e4a10ed6eb92 175 } bmp280_MODE_t;
jbradshaw 0:e4a10ed6eb92 176
jbradshaw 0:e4a10ed6eb92 177 typedef enum {
jbradshaw 1:9490836294ea 178 T_0_5 = 0,
jbradshaw 0:e4a10ed6eb92 179 T_62_5 = 1,
jbradshaw 1:9490836294ea 180 T_125 = 2,
jbradshaw 1:9490836294ea 181 T_250 = 3,
jbradshaw 1:9490836294ea 182 T_500 = 4,
jbradshaw 0:e4a10ed6eb92 183 T_1000 = 5,
jbradshaw 0:e4a10ed6eb92 184 T_2000 = 6,
jbradshaw 0:e4a10ed6eb92 185 T_4000 = 7
jbradshaw 0:e4a10ed6eb92 186 } bmp280_TSB_t;
jbradshaw 0:e4a10ed6eb92 187
jbradshaw 1:9490836294ea 188 ///< @brief calib25... calib00 (0xA1...0x88)
jbradshaw 0:e4a10ed6eb92 189 char bmp280_Calib[26];
jbradshaw 0:e4a10ed6eb92 190
jbradshaw 1:9490836294ea 191 uint16_t dig_T1; ///< Unique temp coeffs. read from the chip
jbradshaw 1:9490836294ea 192 int16_t dig_T2;
jbradshaw 1:9490836294ea 193 int16_t dig_T3;
jbradshaw 0:e4a10ed6eb92 194
jbradshaw 1:9490836294ea 195 uint16_t dig_P1; ///< Unique Press. coeffs. read from the chip
jbradshaw 0:e4a10ed6eb92 196 int16_t dig_P2;
jbradshaw 0:e4a10ed6eb92 197 int16_t dig_P3;
jbradshaw 0:e4a10ed6eb92 198 int16_t dig_P4;
jbradshaw 0:e4a10ed6eb92 199 int16_t dig_P5;
jbradshaw 0:e4a10ed6eb92 200 int16_t dig_P6;
jbradshaw 0:e4a10ed6eb92 201 int16_t dig_P7;
jbradshaw 0:e4a10ed6eb92 202 int16_t dig_P8;
jbradshaw 0:e4a10ed6eb92 203 int16_t dig_P9;
jbradshaw 1:9490836294ea 204
jbradshaw 1:9490836294ea 205 int32_t t_fine; ///< This is calculated int the temperature to be used by the
jbradshaw 1:9490836294ea 206 ///< pressure
jbradshaw 0:e4a10ed6eb92 207
jbradshaw 0:e4a10ed6eb92 208 int32_t bmp280_rawPress;
jbradshaw 0:e4a10ed6eb92 209 int32_t bmp280_rawTemp;
jbradshaw 0:e4a10ed6eb92 210
jbradshaw 1:9490836294ea 211 float Temp_degC;
jbradshaw 1:9490836294ea 212 float Press_Pa;
jbradshaw 0:e4a10ed6eb92 213
jbradshaw 0:e4a10ed6eb92 214 /**
jbradshaw 1:9490836294ea 215 * @brief BMP280 constructor.
jbradshaw 0:e4a10ed6eb92 216 * @param sda mbed pin to use for SDA line of I2C interface.
jbradshaw 0:e4a10ed6eb92 217 * @param scl mbed pin to use for SCL line of I2C interface.
jbradshaw 0:e4a10ed6eb92 218 */
jbradshaw 0:e4a10ed6eb92 219 BMP280(PinName sda, PinName scl);
jbradshaw 0:e4a10ed6eb92 220
jbradshaw 0:e4a10ed6eb92 221 /**
jbradshaw 1:9490836294ea 222 * @brief BMP280 constructor.
jbradshaw 0:e4a10ed6eb92 223 * @param i2c I2C object to use.
jbradshaw 0:e4a10ed6eb92 224 */
jbradshaw 0:e4a10ed6eb92 225 BMP280(I2C *i2c);
jbradshaw 0:e4a10ed6eb92 226
jbradshaw 0:e4a10ed6eb92 227 /**
jbradshaw 1:9490836294ea 228 * @brief BMP280 destructor.
jbradshaw 0:e4a10ed6eb92 229 */
jbradshaw 0:e4a10ed6eb92 230 ~BMP280(void);
jbradshaw 0:e4a10ed6eb92 231
jbradshaw 0:e4a10ed6eb92 232 // Function Prototypes
jbradshaw 0:e4a10ed6eb92 233
jbradshaw 0:e4a10ed6eb92 234 /**
jbradshaw 0:e4a10ed6eb92 235 * @brief This initializes the BMP280
jbradshaw 0:e4a10ed6eb92 236 * @brief The BMP280 has 2 modes. FORCED mode and NORMAL mode. FORCED Mode gives more
jbradshaw 0:e4a10ed6eb92 237 * @brief control to the processor as the processor sends out the Mode to initiate a conversion
jbradshaw 0:e4a10ed6eb92 238 * @brief and a data is sent out then. NORMAL mode is initialized once and it just runs and sends
jbradshaw 0:e4a10ed6eb92 239 * @brief out data at a programmed timed interval. (In this example the main() will set this to Normal
jbradshaw 0:e4a10ed6eb92 240 * @brief function)
jbradshaw 0:e4a10ed6eb92 241 * @param Osrs_p- Pressure oversampling
jbradshaw 0:e4a10ed6eb92 242 * @param Osrs_t- Temperature oversampling
jbradshaw 0:e4a10ed6eb92 243 * @param Filter- Filter Settings
jbradshaw 0:e4a10ed6eb92 244 * @param Mode- Power Modes
jbradshaw 0:e4a10ed6eb92 245 * @param T_sb- Standby time (used with Normal mode)
jbradshaw 0:e4a10ed6eb92 246 * @param dig_T1, dig_T2, dig_T3- Coeffs used for temp conversion - GLOBAL variables (output)
jbradshaw 0:e4a10ed6eb92 247 * @param dig_P1, .... , dig_P9- Coeffs used for press conversion - GLOBAL variables (output)
jbradshaw 0:e4a10ed6eb92 248 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 249 */
jbradshaw 0:e4a10ed6eb92 250 int init(bmp280_osrs_P_t Osrs_p, bmp280_osrs_T_t Osrs_t, bmp280_FILT_t Filter,
jbradshaw 0:e4a10ed6eb92 251 bmp280_MODE_t Mode, bmp280_TSB_t T_sb);
jbradshaw 0:e4a10ed6eb92 252
jbradshaw 0:e4a10ed6eb92 253 /**
jbradshaw 0:e4a10ed6eb92 254 * @brief The BMP280 has 2 modes. FORCED mode and NORMAL mode. FORCED Mode
jbradshaw 0:e4a10ed6eb92 255 * gives more
jbradshaw 0:e4a10ed6eb92 256 * @brief control to the processor as the processor sends out the Mode to
jbradshaw 0:e4a10ed6eb92 257 * initiate a conversion
jbradshaw 0:e4a10ed6eb92 258 * @brief and a data is sent out then. NORMAL mode is initialized once and it
jbradshaw 0:e4a10ed6eb92 259 * just runs and sends
jbradshaw 0:e4a10ed6eb92 260 * @brief out data at a programmed timed interval. (In this example the
jbradshaw 0:e4a10ed6eb92 261 * main() will set this to Normal
jbradshaw 0:e4a10ed6eb92 262 * @brief function)
jbradshaw 0:e4a10ed6eb92 263 * @param *Temp_degC - Pointer to temperature (result in deg C)
jbradshaw 0:e4a10ed6eb92 264 * @param *Press_Pa - Pointer to pressure (resul in Pascal)
jbradshaw 0:e4a10ed6eb92 265 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 266 */
jbradshaw 0:e4a10ed6eb92 267 int ReadCompData(float *Temp_degC, float *Press_Pa);
jbradshaw 0:e4a10ed6eb92 268
jbradshaw 0:e4a10ed6eb92 269 /**
jbradshaw 0:e4a10ed6eb92 270 * @brief This function allows writing to a register.
jbradshaw 0:e4a10ed6eb92 271 * @param reg- Address of the register to write to
jbradshaw 0:e4a10ed6eb92 272 * @param value- Data written to the register
jbradshaw 0:e4a10ed6eb92 273 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 274 */
jbradshaw 1:9490836294ea 275 int reg_write(BMP280_REG_map_t reg, char value);
jbradshaw 0:e4a10ed6eb92 276
jbradshaw 0:e4a10ed6eb92 277 /**
jbradshaw 0:e4a10ed6eb92 278 * @brief This function allows writing to a register.
jbradshaw 0:e4a10ed6eb92 279 * @params reg- Address of the register to read from (input)
jbradshaw 0:e4a10ed6eb92 280 * @params *value- Pointer to the value read from the register (output)
jbradshaw 0:e4a10ed6eb92 281 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 282 */
jbradshaw 1:9490836294ea 283 int reg_read(BMP280_REG_map_t reg, char *value, char number);
jbradshaw 0:e4a10ed6eb92 284
jbradshaw 0:e4a10ed6eb92 285 /**
jbradshaw 0:e4a10ed6eb92 286 * @brief Performs a soft reset on the BMP280
jbradshaw 0:e4a10ed6eb92 287 * @param none
jbradshaw 0:e4a10ed6eb92 288 * @returns none
jbradshaw 0:e4a10ed6eb92 289 */
jbradshaw 0:e4a10ed6eb92 290 void Reset(void);
jbradshaw 0:e4a10ed6eb92 291
jbradshaw 0:e4a10ed6eb92 292 /**
jbradshaw 0:e4a10ed6eb92 293 * @brief Detects if the BMP280 is present
jbradshaw 0:e4a10ed6eb92 294 * @param none
jbradshaw 0:e4a10ed6eb92 295 * @returns 1 for found, 0 for not found, -1 for comm error
jbradshaw 0:e4a10ed6eb92 296 */
jbradshaw 0:e4a10ed6eb92 297 int Detect(void);
jbradshaw 0:e4a10ed6eb92 298
jbradshaw 0:e4a10ed6eb92 299 /**
jbradshaw 0:e4a10ed6eb92 300 * @brief Performs calculations on the raw temperature data to convert to
jbradshaw 0:e4a10ed6eb92 301 * @brief temperature in deg C, based on Bosch's algorithm
jbradshaw 0:e4a10ed6eb92 302 * @param Raw Temp ADC value, Global dig_T1, dig_T2, dig_T3
jbradshaw 0:e4a10ed6eb92 303 * @returns The Temperature in deg C
jbradshaw 0:e4a10ed6eb92 304 */
jbradshaw 0:e4a10ed6eb92 305 float compensate_T_float(int32_t adc_T); // returned value Deg C.
jbradshaw 0:e4a10ed6eb92 306
jbradshaw 0:e4a10ed6eb92 307 /**
jbradshaw 0:e4a10ed6eb92 308 * @brief Performs calculations on the raw pressure data to convert to
jbradshaw 0:e4a10ed6eb92 309 * @brief pressure in Pascal, based on Bosch's algorithm
jbradshaw 0:e4a10ed6eb92 310 * @param adc_P Raw Press ADC value, Global dig_P1, dig_P2,..., dig_P9
jbradshaw 0:e4a10ed6eb92 311 * @returns The Pressure in Pascals
jbradshaw 0:e4a10ed6eb92 312 */
jbradshaw 0:e4a10ed6eb92 313 float compensate_P_float(int32_t adc_P); // returned value Pascal.
jbradshaw 0:e4a10ed6eb92 314
jbradshaw 0:e4a10ed6eb92 315 /**
jbradshaw 0:e4a10ed6eb92 316 * @brief Puts the BMP280 in low power Sleep mode
jbradshaw 0:e4a10ed6eb92 317 * @param none
jbradshaw 0:e4a10ed6eb92 318 * @returns 0 if no errors, -1 if error.
jbradshaw 0:e4a10ed6eb92 319 */
jbradshaw 0:e4a10ed6eb92 320 int Sleep(void);
jbradshaw 0:e4a10ed6eb92 321
jbradshaw 0:e4a10ed6eb92 322 /**
jbradshaw 0:e4a10ed6eb92 323 * @brief This reads the raw BMP280 data
jbradshaw 0:e4a10ed6eb92 324 * @param *bmp280_rawData- array of raw output data
jbradshaw 0:e4a10ed6eb92 325 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 326 *
jbradshaw 0:e4a10ed6eb92 327 */
jbradshaw 0:e4a10ed6eb92 328 int ReadCompDataRaw(char *bmp280_rawData);
jbradshaw 0:e4a10ed6eb92 329 /**
jbradshaw 0:e4a10ed6eb92 330 * @brief This reads the raw BMP280 data uses the Bosch algorithm to get the
jbradshaw 0:e4a10ed6eb92 331 * data
jbradshaw 0:e4a10ed6eb92 332 * @brief in float, then the float gets converted to an String
jbradshaw 0:e4a10ed6eb92 333 * @param *bmp280_rawData- array of raw output data
jbradshaw 0:e4a10ed6eb92 334 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 335 *
jbradshaw 0:e4a10ed6eb92 336 */
jbradshaw 0:e4a10ed6eb92 337 int ReadCompDataRaw2(char *bmp280_rawData);
jbradshaw 0:e4a10ed6eb92 338 /**
jbradshaw 0:e4a10ed6eb92 339 * @brief This converts the raw BMP280 data to couble based on Bosch's
jbradshaw 0:e4a10ed6eb92 340 * algorithm
jbradshaw 0:e4a10ed6eb92 341 * @param *bmp280_rawData- array of raw input data
jbradshaw 0:e4a10ed6eb92 342 * @param *Temp_degC- pointer to output, Temp value in deg C
jbradshaw 0:e4a10ed6eb92 343 * @param *Press_Pa- pointer to output, Press value in Pascals
jbradshaw 0:e4a10ed6eb92 344 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 345 *
jbradshaw 0:e4a10ed6eb92 346 */
jbradshaw 0:e4a10ed6eb92 347 void ToFloat(char *bmp280_rawData, float *Temp_degC, float *Press_Pa);
jbradshaw 0:e4a10ed6eb92 348 /**
jbradshaw 0:e4a10ed6eb92 349 * @brief converts to Farenhite from Centigrade
jbradshaw 0:e4a10ed6eb92 350 * @param temperature in Centigrade
jbradshaw 0:e4a10ed6eb92 351 * @returns temperature value in Farenhite
jbradshaw 0:e4a10ed6eb92 352 */
jbradshaw 0:e4a10ed6eb92 353 float ToFahrenheit(float temperature);
jbradshaw 0:e4a10ed6eb92 354
jbradshaw 0:e4a10ed6eb92 355 /**
jbradshaw 0:e4a10ed6eb92 356 * @brief Reads a unique ID from the register
jbradshaw 0:e4a10ed6eb92 357 * @param none
jbradshaw 0:e4a10ed6eb92 358 * @returns The correct id value which is 0x58
jbradshaw 0:e4a10ed6eb92 359 */
jbradshaw 0:e4a10ed6eb92 360 int ReadId(void);
jbradshaw 0:e4a10ed6eb92 361
jbradshaw 0:e4a10ed6eb92 362 private:
jbradshaw 1:9490836294ea 363 /**
jbradshaw 1:9490836294ea 364 * @brief I2C pointer
jbradshaw 1:9490836294ea 365 */
jbradshaw 0:e4a10ed6eb92 366 I2C *i2c;
jbradshaw 1:9490836294ea 367 /**
jbradshaw 1:9490836294ea 368 * @brief Is this object the owner of the I2C object
jbradshaw 1:9490836294ea 369 */
jbradshaw 0:e4a10ed6eb92 370 bool isOwner;
jbradshaw 1:9490836294ea 371 /**
jbradshaw 1:9490836294ea 372 * @brief Device slave address
jbradshaw 1:9490836294ea 373 */
jbradshaw 0:e4a10ed6eb92 374 int slaveAddress;
jbradshaw 0:e4a10ed6eb92 375 };
jbradshaw 0:e4a10ed6eb92 376
jbradshaw 0:e4a10ed6eb92 377 #endif // BMP280_H_