AmbiMate Sensor Module

Committer:
mcm
Date:
Thu Jun 03 17:02:20 2021 +0000
Revision:
0:8d9328d3ff35
Child:
1:f0711d344f71
The driver for AMBIMATE MS4 has been started, both header file and function file were created, this driver is still in progress.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 0:8d9328d3ff35 1 /**
mcm 0:8d9328d3ff35 2 * @brief AMBIMATE_MS4.h
mcm 0:8d9328d3ff35 3 * @details AmbiMate Sensor Module.
mcm 0:8d9328d3ff35 4 * Header file.
mcm 0:8d9328d3ff35 5 *
mcm 0:8d9328d3ff35 6 *
mcm 0:8d9328d3ff35 7 * @return NA
mcm 0:8d9328d3ff35 8 *
mcm 0:8d9328d3ff35 9 * @author Manuel Caballero
mcm 0:8d9328d3ff35 10 * @date 03/June/2021
mcm 0:8d9328d3ff35 11 * @version 03/June/2021 The ORIGIN
mcm 0:8d9328d3ff35 12 * @pre N/A.
mcm 0:8d9328d3ff35 13 * @warning N/A
mcm 0:8d9328d3ff35 14 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
mcm 0:8d9328d3ff35 15 */
mcm 0:8d9328d3ff35 16 #ifndef AMBIMATE_MS4_H
mcm 0:8d9328d3ff35 17 #define AMBIMATE_MS4_H
mcm 0:8d9328d3ff35 18
mcm 0:8d9328d3ff35 19 #include "mbed.h"
mcm 0:8d9328d3ff35 20
mcm 0:8d9328d3ff35 21
mcm 0:8d9328d3ff35 22 /**
mcm 0:8d9328d3ff35 23 Example:
mcm 0:8d9328d3ff35 24 @code
mcm 0:8d9328d3ff35 25
mcm 0:8d9328d3ff35 26 @endcode
mcm 0:8d9328d3ff35 27 */
mcm 0:8d9328d3ff35 28
mcm 0:8d9328d3ff35 29
mcm 0:8d9328d3ff35 30 /*!
mcm 0:8d9328d3ff35 31 Library for the AMBIMATE_MS4 Digital humidity sensor with temperature output.
mcm 0:8d9328d3ff35 32 */
mcm 0:8d9328d3ff35 33 class AMBIMATE_MS4
mcm 0:8d9328d3ff35 34 {
mcm 0:8d9328d3ff35 35 public:
mcm 0:8d9328d3ff35 36 /**
mcm 0:8d9328d3ff35 37 * @brief DEFAULT ADDRESSES
mcm 0:8d9328d3ff35 38 */
mcm 0:8d9328d3ff35 39 typedef enum {
mcm 0:8d9328d3ff35 40 AMBIMATE_MS4_ADDRESS = ( 0x40 << 1 )
mcm 0:8d9328d3ff35 41 } AMBIMATE_MS4_address_t;
mcm 0:8d9328d3ff35 42
mcm 0:8d9328d3ff35 43
mcm 0:8d9328d3ff35 44 /**
mcm 0:8d9328d3ff35 45 * @brief COMMAND REGISTERS
mcm 0:8d9328d3ff35 46 */
mcm 0:8d9328d3ff35 47 #define AMBIMATE_MS4_TRIGGER_TEMPERATURE_MEASUREMENT_HOLD_MASTER 0xE3
mcm 0:8d9328d3ff35 48 #define AMBIMATE_MS4_TRIGGER_HUMIDITY_MEASUREMENT_HOLD_MASTER 0xE5
mcm 0:8d9328d3ff35 49 #define AMBIMATE_MS4_TRIGGER_TEMPERATURE_MEASUREMENT_NO_HOLD_MASTER 0xF3
mcm 0:8d9328d3ff35 50 #define AMBIMATE_MS4_TRIGGER_HUMIDITY_MEASUREMENT_NO_HOLD_MASTER 0xF5
mcm 0:8d9328d3ff35 51 #define AMBIMATE_MS4_WRITE_REGISTER 0xE6
mcm 0:8d9328d3ff35 52 #define AMBIMATE_MS4_READ_REGISTER 0xE7
mcm 0:8d9328d3ff35 53 #define AMBIMATE_MS4_SOFT_RESET 0xFE
mcm 0:8d9328d3ff35 54
mcm 0:8d9328d3ff35 55
mcm 0:8d9328d3ff35 56 /* User Register */
mcm 0:8d9328d3ff35 57 /**
mcm 0:8d9328d3ff35 58 * @brief RESOLUTION
mcm 0:8d9328d3ff35 59 */
mcm 0:8d9328d3ff35 60 typedef enum {
mcm 0:8d9328d3ff35 61 RESOLUTION_12RH_14TEMP = 0, /*!< Resolution: RH 12-bits, T 14-bits */
mcm 0:8d9328d3ff35 62 RESOLUTION_8RH_12TEMP = 1, /*!< Resolution: RH 8-bits, T 12-bits */
mcm 0:8d9328d3ff35 63 RESOLUTION_10RH_13TEMP = 2, /*!< Resolution: RH 10-bits, T 13-bits */
mcm 0:8d9328d3ff35 64 RESOLUTION_11RH_11TEMP = 3 /*!< Resolution: RH 11-bits, T 11-bits */
mcm 0:8d9328d3ff35 65 } AMBIMATE_MS4_user_register_resolution_t;
mcm 0:8d9328d3ff35 66
mcm 0:8d9328d3ff35 67 /**
mcm 0:8d9328d3ff35 68 * @brief STATUS: END OF BATTERY
mcm 0:8d9328d3ff35 69 */
mcm 0:8d9328d3ff35 70 typedef enum {
mcm 0:8d9328d3ff35 71 STATUS_END_BATTERY_HIGH_2V25 = 0, /*!< Status: RH 12-bits, T 14-bits */
mcm 0:8d9328d3ff35 72 STATUS_END_BATTERY_LOW_2V25 = 1 /*!< Status: RH 8-bits, T 12-bits */
mcm 0:8d9328d3ff35 73 } AMBIMATE_MS4_user_register_status_t;
mcm 0:8d9328d3ff35 74
mcm 0:8d9328d3ff35 75 /**
mcm 0:8d9328d3ff35 76 * @brief ON-CHIP HEATER
mcm 0:8d9328d3ff35 77 */
mcm 0:8d9328d3ff35 78 typedef enum {
mcm 0:8d9328d3ff35 79 HEATER_ENABLED = 0, /*!< Heater enabled */
mcm 0:8d9328d3ff35 80 HEATER_DISABLED = 1 /*!< Heater disabled */
mcm 0:8d9328d3ff35 81 } AMBIMATE_MS4_user_register_heater_t;
mcm 0:8d9328d3ff35 82
mcm 0:8d9328d3ff35 83 /**
mcm 0:8d9328d3ff35 84 * @brief OTP RELOAD
mcm 0:8d9328d3ff35 85 */
mcm 0:8d9328d3ff35 86 typedef enum {
mcm 0:8d9328d3ff35 87 OTP_ENABLED = 0, /*!< OTP enabled */
mcm 0:8d9328d3ff35 88 OTP_DISABLED = 1 /*!< OTP disabled */
mcm 0:8d9328d3ff35 89 } AMBIMATE_MS4_user_register_otp_t;
mcm 0:8d9328d3ff35 90
mcm 0:8d9328d3ff35 91
mcm 0:8d9328d3ff35 92
mcm 0:8d9328d3ff35 93 /* Mode of working */
mcm 0:8d9328d3ff35 94 /**
mcm 0:8d9328d3ff35 95 * @brief MODE
mcm 0:8d9328d3ff35 96 */
mcm 0:8d9328d3ff35 97 typedef enum {
mcm 0:8d9328d3ff35 98 MODE_HOLD_MASTER = 0, /*!< Mode Hold master */
mcm 0:8d9328d3ff35 99 MODE_NO_HOLD_MASTER = 1 /*!< Mode No hold master */
mcm 0:8d9328d3ff35 100 } AMBIMATE_MS4_master_mode_t;
mcm 0:8d9328d3ff35 101
mcm 0:8d9328d3ff35 102
mcm 0:8d9328d3ff35 103
mcm 0:8d9328d3ff35 104
mcm 0:8d9328d3ff35 105
mcm 0:8d9328d3ff35 106 #ifndef VECTOR_STRUCT_H
mcm 0:8d9328d3ff35 107 #define VECTOR_STRUCT_H
mcm 0:8d9328d3ff35 108 typedef struct {
mcm 0:8d9328d3ff35 109 char RawTemperature[3];
mcm 0:8d9328d3ff35 110 } Vector_raw_temperature_t;
mcm 0:8d9328d3ff35 111
mcm 0:8d9328d3ff35 112 typedef struct {
mcm 0:8d9328d3ff35 113 char RawHumidity[3];
mcm 0:8d9328d3ff35 114 } Vector_raw_humidity_t;
mcm 0:8d9328d3ff35 115
mcm 0:8d9328d3ff35 116 typedef struct {
mcm 0:8d9328d3ff35 117 float Temperature;
mcm 0:8d9328d3ff35 118 } Vector_temperature_f;
mcm 0:8d9328d3ff35 119
mcm 0:8d9328d3ff35 120 typedef struct {
mcm 0:8d9328d3ff35 121 float Humidity;
mcm 0:8d9328d3ff35 122 } Vector_humidity_f;
mcm 0:8d9328d3ff35 123 #endif
mcm 0:8d9328d3ff35 124
mcm 0:8d9328d3ff35 125
mcm 0:8d9328d3ff35 126 /**
mcm 0:8d9328d3ff35 127 * @brief INTERNAL CONSTANTS
mcm 0:8d9328d3ff35 128 */
mcm 0:8d9328d3ff35 129 typedef enum {
mcm 0:8d9328d3ff35 130 AMBIMATE_MS4_SUCCESS = 0,
mcm 0:8d9328d3ff35 131 AMBIMATE_MS4_FAILURE = 1,
mcm 0:8d9328d3ff35 132 I2C_SUCCESS = 0 /*!< I2C communication was fine */
mcm 0:8d9328d3ff35 133 } AMBIMATE_MS4_status_t;
mcm 0:8d9328d3ff35 134
mcm 0:8d9328d3ff35 135
mcm 0:8d9328d3ff35 136
mcm 0:8d9328d3ff35 137
mcm 0:8d9328d3ff35 138 /** Create an AMBIMATE_MS4 object connected to the specified I2C pins.
mcm 0:8d9328d3ff35 139 *
mcm 0:8d9328d3ff35 140 * @param sda I2C data pin
mcm 0:8d9328d3ff35 141 * @param scl I2C clock pin
mcm 0:8d9328d3ff35 142 * @param addr I2C slave address
mcm 0:8d9328d3ff35 143 * @param freq I2C frequency in Hz.
mcm 0:8d9328d3ff35 144 */
mcm 0:8d9328d3ff35 145 AMBIMATE_MS4 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq );
mcm 0:8d9328d3ff35 146
mcm 0:8d9328d3ff35 147 /** Delete AMBIMATE_MS4 object.
mcm 0:8d9328d3ff35 148 */
mcm 0:8d9328d3ff35 149 ~AMBIMATE_MS4();
mcm 0:8d9328d3ff35 150
mcm 0:8d9328d3ff35 151 /** It configures the device.
mcm 0:8d9328d3ff35 152 */
mcm 0:8d9328d3ff35 153 AMBIMATE_MS4_status_t AMBIMATE_MS4_Init ( AMBIMATE_MS4_master_mode_t myMode, AMBIMATE_MS4_user_register_resolution_t myResolution, AMBIMATE_MS4_user_register_heater_t myHeater );
mcm 0:8d9328d3ff35 154
mcm 0:8d9328d3ff35 155 /** It resets the device by software.
mcm 0:8d9328d3ff35 156 */
mcm 0:8d9328d3ff35 157 AMBIMATE_MS4_status_t AMBIMATE_MS4_SoftReset ( void );
mcm 0:8d9328d3ff35 158
mcm 0:8d9328d3ff35 159 /** It triggers a new temperature measurement.
mcm 0:8d9328d3ff35 160 */
mcm 0:8d9328d3ff35 161 AMBIMATE_MS4_status_t AMBIMATE_MS4_TriggerTemperature ( void );
mcm 0:8d9328d3ff35 162
mcm 0:8d9328d3ff35 163 /** It reads the raw temperature.
mcm 0:8d9328d3ff35 164 */
mcm 0:8d9328d3ff35 165 AMBIMATE_MS4_status_t AMBIMATE_MS4_ReadRawTemperature ( Vector_raw_temperature_t* myRawTemperature );
mcm 0:8d9328d3ff35 166
mcm 0:8d9328d3ff35 167 /** It reads the temperature.
mcm 0:8d9328d3ff35 168 */
mcm 0:8d9328d3ff35 169 AMBIMATE_MS4_status_t AMBIMATE_MS4_ReadTemperature ( Vector_temperature_f* myTemperature );
mcm 0:8d9328d3ff35 170
mcm 0:8d9328d3ff35 171 /** It triggers a new humidity measurement.
mcm 0:8d9328d3ff35 172 */
mcm 0:8d9328d3ff35 173 AMBIMATE_MS4_status_t AMBIMATE_MS4_TriggerHumidity ( void );
mcm 0:8d9328d3ff35 174
mcm 0:8d9328d3ff35 175 /** It reads the raw humidity.
mcm 0:8d9328d3ff35 176 */
mcm 0:8d9328d3ff35 177 AMBIMATE_MS4_status_t AMBIMATE_MS4_ReadRawHumidity ( Vector_raw_humidity_t* myRawHumidity );
mcm 0:8d9328d3ff35 178
mcm 0:8d9328d3ff35 179 /** It reads the humidity.
mcm 0:8d9328d3ff35 180 */
mcm 0:8d9328d3ff35 181 AMBIMATE_MS4_status_t AMBIMATE_MS4_ReadHumidity ( Vector_humidity_f* myHumidity );
mcm 0:8d9328d3ff35 182
mcm 0:8d9328d3ff35 183 /** It gets the battery status.
mcm 0:8d9328d3ff35 184 */
mcm 0:8d9328d3ff35 185 AMBIMATE_MS4_status_t AMBIMATE_MS4_BatteryStatus ( AMBIMATE_MS4_user_register_status_t* myBattStatus );
mcm 0:8d9328d3ff35 186
mcm 0:8d9328d3ff35 187 private:
mcm 0:8d9328d3ff35 188 I2C _i2c;
mcm 0:8d9328d3ff35 189 uint32_t _AMBIMATE_MS4_Addr;
mcm 0:8d9328d3ff35 190 };
mcm 0:8d9328d3ff35 191
mcm 0:8d9328d3ff35 192 #endif