A Library for the AMS ENS210 temperature and humidity sensor.

Dependents:   AMS_CCS811_gas_sensor AMS_CCS811_gas_sensor

Committer:
UHSLMarcus
Date:
Tue Jan 24 10:46:20 2017 +0000
Revision:
6:475b764b720d
Parent:
5:22b8ef3a65e1
Child:
8:1a7d241afbcb
Added get method for i2c interface

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UHSLMarcus 0:7088b1bdc2e5 1 /**
UHSLMarcus 0:7088b1bdc2e5 2 * @author Marcus Lee
UHSLMarcus 0:7088b1bdc2e5 3 *
UHSLMarcus 0:7088b1bdc2e5 4 * @section DESCRIPTION
UHSLMarcus 0:7088b1bdc2e5 5 * A library for the AMS ENS210 tempuratire and relative humidy sensor.
UHSLMarcus 0:7088b1bdc2e5 6 *
UHSLMarcus 0:7088b1bdc2e5 7 */
UHSLMarcus 0:7088b1bdc2e5 8
UHSLMarcus 0:7088b1bdc2e5 9
UHSLMarcus 0:7088b1bdc2e5 10 #ifndef AMS_ENS210_H
UHSLMarcus 0:7088b1bdc2e5 11 #define AMS_ENS210_H
UHSLMarcus 0:7088b1bdc2e5 12
UHSLMarcus 0:7088b1bdc2e5 13 #include "mbed.h"
UHSLMarcus 0:7088b1bdc2e5 14
UHSLMarcus 0:7088b1bdc2e5 15
UHSLMarcus 0:7088b1bdc2e5 16 /* Library defaults */
UHSLMarcus 5:22b8ef3a65e1 17 #define CONFIG_TEMP_OP_MODE 0 // single shot
UHSLMarcus 5:22b8ef3a65e1 18 #define CONFIG_HUMID_OP_MODE 0 // single shot
UHSLMarcus 5:22b8ef3a65e1 19 #define CONFIG_POWER_MODE 1 // low power
UHSLMarcus 0:7088b1bdc2e5 20
UHSLMarcus 0:7088b1bdc2e5 21 /* Library Constants */
UHSLMarcus 5:22b8ef3a65e1 22 #define ENS210_SLAVE_ADDR_RAW 0x43
UHSLMarcus 5:22b8ef3a65e1 23 #define ENS210_SLAVE_ADDR ENS210_SLAVE_ADDR_RAW << 1 // 0x86
UHSLMarcus 5:22b8ef3a65e1 24 #define ENS210_SLAVE_ADDR_W ENS210_SLAVE_ADDR
UHSLMarcus 5:22b8ef3a65e1 25 #define ENS210_SLAVE_ADDR_R ENS210_SLAVE_ADDR | 1 // 0x87
UHSLMarcus 0:7088b1bdc2e5 26
UHSLMarcus 5:22b8ef3a65e1 27 #define SYS_CONFIG 0x10
UHSLMarcus 5:22b8ef3a65e1 28 #define SYS_STATUS 0x11
UHSLMarcus 0:7088b1bdc2e5 29
UHSLMarcus 5:22b8ef3a65e1 30 #define SENS_OP_MODE 0x21
UHSLMarcus 5:22b8ef3a65e1 31 #define SENS_START 0x22
UHSLMarcus 5:22b8ef3a65e1 32 #define SENS_STOP 0x23
UHSLMarcus 5:22b8ef3a65e1 33 #define SENS_STATUS 0x24
UHSLMarcus 5:22b8ef3a65e1 34 #define SENS_TEMP 0x30
UHSLMarcus 5:22b8ef3a65e1 35 #define SENS_HUMID 0x33
UHSLMarcus 0:7088b1bdc2e5 36
UHSLMarcus 0:7088b1bdc2e5 37 /** The AMS ENS210 class
UHSLMarcus 0:7088b1bdc2e5 38 */
UHSLMarcus 0:7088b1bdc2e5 39 class AMS_ENS210 {
UHSLMarcus 0:7088b1bdc2e5 40
UHSLMarcus 0:7088b1bdc2e5 41 public:
UHSLMarcus 0:7088b1bdc2e5 42 /** Create an AMS_ENS210 instance
UHSLMarcus 0:7088b1bdc2e5 43 *
UHSLMarcus 0:7088b1bdc2e5 44 * @param i2c The I2C interface to use for communication
UHSLMarcus 0:7088b1bdc2e5 45 */
UHSLMarcus 0:7088b1bdc2e5 46 AMS_ENS210(I2C * i2c);
UHSLMarcus 0:7088b1bdc2e5 47
UHSLMarcus 0:7088b1bdc2e5 48 /** Create an AMS_ENS210 instance
UHSLMarcus 0:7088b1bdc2e5 49 *
UHSLMarcus 0:7088b1bdc2e5 50 * @param i2c The I2C interface to use for communication
UHSLMarcus 3:3b427231e5a7 51 * @param temp_continuous Set tempurature operation mode, true for continuous and false for single shot
UHSLMarcus 3:3b427231e5a7 52 * @param humid_continuous Set humidity operation mode, true for continuous and false for single shot
UHSLMarcus 0:7088b1bdc2e5 53 */
UHSLMarcus 3:3b427231e5a7 54 AMS_ENS210(I2C * i2c, bool temp_continuous, bool humid_continuous);
UHSLMarcus 0:7088b1bdc2e5 55
UHSLMarcus 0:7088b1bdc2e5 56 /** Create an AMS_ENS210 instance
UHSLMarcus 0:7088b1bdc2e5 57 *
UHSLMarcus 0:7088b1bdc2e5 58 * @param i2c The I2C interface to use for communication
UHSLMarcus 3:3b427231e5a7 59 * @param temp_continuous Set tempurature operation mode, true for continuous and false for single shot
UHSLMarcus 3:3b427231e5a7 60 * @param humid_continuous Set humidity operation mode, true for continuous and false for single shot
UHSLMarcus 0:7088b1bdc2e5 61 * @param low_power Set power mode, true for low power/standby and false for active
UHSLMarcus 0:7088b1bdc2e5 62 */
UHSLMarcus 3:3b427231e5a7 63 AMS_ENS210(I2C * i2c, bool temp_continuous, bool humid_continuous, bool low_power);
UHSLMarcus 0:7088b1bdc2e5 64
UHSLMarcus 0:7088b1bdc2e5 65 /** Destroy the AMS_ENS210 instance
UHSLMarcus 0:7088b1bdc2e5 66 */
UHSLMarcus 0:7088b1bdc2e5 67 ~AMS_ENS210();
UHSLMarcus 0:7088b1bdc2e5 68
UHSLMarcus 0:7088b1bdc2e5 69 /** Initalise the sensor
UHSLMarcus 0:7088b1bdc2e5 70 *
UHSLMarcus 0:7088b1bdc2e5 71 * @return Intalisation success
UHSLMarcus 0:7088b1bdc2e5 72 */
UHSLMarcus 0:7088b1bdc2e5 73 bool init();
UHSLMarcus 0:7088b1bdc2e5 74
UHSLMarcus 0:7088b1bdc2e5 75 /** Software reset the sensor
UHSLMarcus 0:7088b1bdc2e5 76 *
UHSLMarcus 0:7088b1bdc2e5 77 * @return Reset success
UHSLMarcus 0:7088b1bdc2e5 78 */
UHSLMarcus 0:7088b1bdc2e5 79 bool reset();
UHSLMarcus 0:7088b1bdc2e5 80
UHSLMarcus 0:7088b1bdc2e5 81 /** Set the power mode
UHSLMarcus 0:7088b1bdc2e5 82 *
UHSLMarcus 0:7088b1bdc2e5 83 * @param low_power True for low power/standby and false for active
UHSLMarcus 0:7088b1bdc2e5 84 *
UHSLMarcus 0:7088b1bdc2e5 85 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 86 */
UHSLMarcus 3:3b427231e5a7 87 bool low_power_mode(bool low_power);
UHSLMarcus 0:7088b1bdc2e5 88
UHSLMarcus 0:7088b1bdc2e5 89 /** Get the current power mode
UHSLMarcus 0:7088b1bdc2e5 90 *
UHSLMarcus 0:7088b1bdc2e5 91 * @return The power mode, true for low power, false for active
UHSLMarcus 0:7088b1bdc2e5 92 */
UHSLMarcus 3:3b427231e5a7 93 bool low_power_mode();
UHSLMarcus 3:3b427231e5a7 94
UHSLMarcus 3:3b427231e5a7 95 /** Get whether the sensor is in the active state or not
UHSLMarcus 3:3b427231e5a7 96 *
UHSLMarcus 3:3b427231e5a7 97 * @return The active state, true for active, false for inactive
UHSLMarcus 3:3b427231e5a7 98 */
UHSLMarcus 3:3b427231e5a7 99 bool is_active();
UHSLMarcus 0:7088b1bdc2e5 100
UHSLMarcus 0:7088b1bdc2e5 101 /** Set the tempurature operation mode
UHSLMarcus 0:7088b1bdc2e5 102 *
UHSLMarcus 3:3b427231e5a7 103 * @param single_shot True for continuous and false for single shot
UHSLMarcus 0:7088b1bdc2e5 104 *
UHSLMarcus 0:7088b1bdc2e5 105 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 106 */
UHSLMarcus 3:3b427231e5a7 107 bool temp_continuous_mode(bool continuous);
UHSLMarcus 0:7088b1bdc2e5 108
UHSLMarcus 0:7088b1bdc2e5 109 /** Get the current tempurature operation mode
UHSLMarcus 0:7088b1bdc2e5 110 *
UHSLMarcus 3:3b427231e5a7 111 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 112 */
UHSLMarcus 3:3b427231e5a7 113 bool temp_continuous_mode();
UHSLMarcus 0:7088b1bdc2e5 114
UHSLMarcus 0:7088b1bdc2e5 115 /** Set the humidity operation mode
UHSLMarcus 0:7088b1bdc2e5 116 *
UHSLMarcus 3:3b427231e5a7 117 * @param single_shot True for continuous and false for single shot
UHSLMarcus 0:7088b1bdc2e5 118 *
UHSLMarcus 0:7088b1bdc2e5 119 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 120 */
UHSLMarcus 3:3b427231e5a7 121 bool humid_continuous_mode(bool continuous);
UHSLMarcus 0:7088b1bdc2e5 122
UHSLMarcus 0:7088b1bdc2e5 123 /** Get the current humidity operation mode
UHSLMarcus 0:7088b1bdc2e5 124 *
UHSLMarcus 3:3b427231e5a7 125 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 126 */
UHSLMarcus 3:3b427231e5a7 127 bool humid_continuous_mode();
UHSLMarcus 0:7088b1bdc2e5 128
UHSLMarcus 0:7088b1bdc2e5 129 /** Set the I2C interface
UHSLMarcus 0:7088b1bdc2e5 130 *
UHSLMarcus 0:7088b1bdc2e5 131 * @param i2c The I2C interface
UHSLMarcus 0:7088b1bdc2e5 132 */
UHSLMarcus 0:7088b1bdc2e5 133 void i2c_interface(I2C * i2c);
UHSLMarcus 0:7088b1bdc2e5 134
UHSLMarcus 6:475b764b720d 135 /** Get the I2C interface
UHSLMarcus 6:475b764b720d 136 *
UHSLMarcus 6:475b764b720d 137 * @return The I2C interface
UHSLMarcus 6:475b764b720d 138 */
UHSLMarcus 6:475b764b720d 139 I2C* i2c_interface();
UHSLMarcus 6:475b764b720d 140
UHSLMarcus 0:7088b1bdc2e5 141 /** Start measurement collection
UHSLMarcus 0:7088b1bdc2e5 142 *
UHSLMarcus 0:7088b1bdc2e5 143 * @param temp Start the tempurature sensor
UHSLMarcus 0:7088b1bdc2e5 144 * @param humid Start the humidity sensor
UHSLMarcus 0:7088b1bdc2e5 145 *
UHSLMarcus 0:7088b1bdc2e5 146 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 147 */
UHSLMarcus 0:7088b1bdc2e5 148 bool start(bool temp = true, bool humid = true);
UHSLMarcus 0:7088b1bdc2e5 149
UHSLMarcus 0:7088b1bdc2e5 150 /** Stop measurement collection
UHSLMarcus 0:7088b1bdc2e5 151 *
UHSLMarcus 0:7088b1bdc2e5 152 * @param temp Stop the tempurature sensor
UHSLMarcus 0:7088b1bdc2e5 153 * @param humid Stop the humidity sensor
UHSLMarcus 0:7088b1bdc2e5 154 *
UHSLMarcus 0:7088b1bdc2e5 155 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 156 */
UHSLMarcus 0:7088b1bdc2e5 157 bool stop(bool temp = true, bool humid = true);
UHSLMarcus 0:7088b1bdc2e5 158
UHSLMarcus 0:7088b1bdc2e5 159 /** Get whether the sensor is measuring tempurature data
UHSLMarcus 0:7088b1bdc2e5 160 *
UHSLMarcus 0:7088b1bdc2e5 161 * @return Sensor activity, true for measureing, false for idle
UHSLMarcus 0:7088b1bdc2e5 162 */
UHSLMarcus 0:7088b1bdc2e5 163 bool temp_is_measuring();
UHSLMarcus 0:7088b1bdc2e5 164
UHSLMarcus 0:7088b1bdc2e5 165 /** Get whether the sensor is measuring humidity data
UHSLMarcus 0:7088b1bdc2e5 166 *
UHSLMarcus 0:7088b1bdc2e5 167 * @return Sensor activity, true for measureing, false for idle
UHSLMarcus 0:7088b1bdc2e5 168 */
UHSLMarcus 0:7088b1bdc2e5 169 bool humid_is_measuring();
UHSLMarcus 0:7088b1bdc2e5 170
UHSLMarcus 0:7088b1bdc2e5 171 /** Get whether the sensor has collected tempurature data
UHSLMarcus 0:7088b1bdc2e5 172 *
UHSLMarcus 0:7088b1bdc2e5 173 * @return Has data
UHSLMarcus 0:7088b1bdc2e5 174 */
UHSLMarcus 0:7088b1bdc2e5 175 bool temp_has_data();
UHSLMarcus 0:7088b1bdc2e5 176
UHSLMarcus 0:7088b1bdc2e5 177 /** Get whether the sensor has collected humidity data
UHSLMarcus 0:7088b1bdc2e5 178 *
UHSLMarcus 0:7088b1bdc2e5 179 * @return Has data
UHSLMarcus 0:7088b1bdc2e5 180 */
UHSLMarcus 0:7088b1bdc2e5 181 bool humid_has_data();
UHSLMarcus 0:7088b1bdc2e5 182
UHSLMarcus 0:7088b1bdc2e5 183 /** Get the most recent tempurature measurement, must call temp_has_data() first when in single shot mode otherwise the same data will be returned
UHSLMarcus 0:7088b1bdc2e5 184 *
UHSLMarcus 0:7088b1bdc2e5 185 * @return Most recent tempurature measurement as a 16 bits unsigned value in 1/64 Kelvin
UHSLMarcus 0:7088b1bdc2e5 186 */
UHSLMarcus 0:7088b1bdc2e5 187 uint16_t temp_read();
UHSLMarcus 0:7088b1bdc2e5 188
UHSLMarcus 0:7088b1bdc2e5 189 /** Get the most recent humidty measurement, must call humid_has_data() first when in single shot mode otherwise the same data will be returned
UHSLMarcus 0:7088b1bdc2e5 190 *
UHSLMarcus 0:7088b1bdc2e5 191 * @return Most recent humidity measurement as a 16 bits unsigned value in 1/64 Kelvin
UHSLMarcus 0:7088b1bdc2e5 192 */
UHSLMarcus 0:7088b1bdc2e5 193 uint16_t humid_read();
UHSLMarcus 0:7088b1bdc2e5 194
UHSLMarcus 0:7088b1bdc2e5 195 private:
UHSLMarcus 0:7088b1bdc2e5 196 I2C * _i2c;
UHSLMarcus 0:7088b1bdc2e5 197 bool _temp_mode;
UHSLMarcus 0:7088b1bdc2e5 198 bool _humid_mode;
UHSLMarcus 0:7088b1bdc2e5 199 bool _power_mode;
UHSLMarcus 3:3b427231e5a7 200 bool _reset;
UHSLMarcus 3:3b427231e5a7 201 uint16_t temp_reading;
UHSLMarcus 3:3b427231e5a7 202 uint16_t humid_reading;
UHSLMarcus 0:7088b1bdc2e5 203
UHSLMarcus 0:7088b1bdc2e5 204 bool write_config(bool system = true, bool sensor = true);
UHSLMarcus 0:7088b1bdc2e5 205 const char * read_config(bool system = true, bool sensor = true);
UHSLMarcus 0:7088b1bdc2e5 206 int i2c_read(char reg_addr, char* output, int len);
UHSLMarcus 3:3b427231e5a7 207 int i2c_write(char reg_addr, char* input, int len);
UHSLMarcus 0:7088b1bdc2e5 208
UHSLMarcus 0:7088b1bdc2e5 209
UHSLMarcus 0:7088b1bdc2e5 210
UHSLMarcus 0:7088b1bdc2e5 211 };
UHSLMarcus 0:7088b1bdc2e5 212
UHSLMarcus 0:7088b1bdc2e5 213 #endif /* AMS_ENS210_H */