A Library for the AMS ENS210 temperature and humidity sensor.

Dependents:   AMS_CCS811_gas_sensor AMS_CCS811_gas_sensor

Committer:
UHSLMarcus
Date:
Wed Jan 18 12:04:25 2017 +0000
Revision:
3:3b427231e5a7
Parent:
1:94a79c88c105
Child:
5:22b8ef3a65e1
tested and working in both continuous and single shot mode

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 3:3b427231e5a7 17 #define CONFIG_TEMP_OP_MODE 0 // single shot
UHSLMarcus 3:3b427231e5a7 18 #define CONFIG_HUMID_OP_MODE 0 // single shot
UHSLMarcus 3:3b427231e5a7 19 #define CONFIG_POWER_MODE 1 // low power
UHSLMarcus 0:7088b1bdc2e5 20
UHSLMarcus 0:7088b1bdc2e5 21 /* Library Constants */
UHSLMarcus 0:7088b1bdc2e5 22 #define SLAVE_ADDR_RAW 0x43
UHSLMarcus 0:7088b1bdc2e5 23 #define SLAVE_ADDR SLAVE_ADDR_RAW << 1 // 0x86
UHSLMarcus 0:7088b1bdc2e5 24 #define SLAVE_ADDR_W SLAVE_ADDR
UHSLMarcus 0:7088b1bdc2e5 25 #define SLAVE_ADDR_R SLAVE_ADDR | 1 // 0x87
UHSLMarcus 0:7088b1bdc2e5 26
UHSLMarcus 0:7088b1bdc2e5 27 #define SYS_CONFIG 0x10
UHSLMarcus 0:7088b1bdc2e5 28 #define SYS_STATUS 0x11
UHSLMarcus 0:7088b1bdc2e5 29
UHSLMarcus 0:7088b1bdc2e5 30 #define SENS_OP_MODE 0x21
UHSLMarcus 0:7088b1bdc2e5 31 #define SENS_START 0x22
UHSLMarcus 0:7088b1bdc2e5 32 #define SENS_STOP 0x23
UHSLMarcus 0:7088b1bdc2e5 33 #define SENS_STATUS 0x24
UHSLMarcus 0:7088b1bdc2e5 34 #define SENS_TEMP 0x30
UHSLMarcus 0:7088b1bdc2e5 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 0:7088b1bdc2e5 135 /** Start measurement collection
UHSLMarcus 0:7088b1bdc2e5 136 *
UHSLMarcus 0:7088b1bdc2e5 137 * @param temp Start the tempurature sensor
UHSLMarcus 0:7088b1bdc2e5 138 * @param humid Start the humidity sensor
UHSLMarcus 0:7088b1bdc2e5 139 *
UHSLMarcus 0:7088b1bdc2e5 140 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 141 */
UHSLMarcus 0:7088b1bdc2e5 142 bool start(bool temp = true, bool humid = true);
UHSLMarcus 0:7088b1bdc2e5 143
UHSLMarcus 0:7088b1bdc2e5 144 /** Stop measurement collection
UHSLMarcus 0:7088b1bdc2e5 145 *
UHSLMarcus 0:7088b1bdc2e5 146 * @param temp Stop the tempurature sensor
UHSLMarcus 0:7088b1bdc2e5 147 * @param humid Stop the humidity sensor
UHSLMarcus 0:7088b1bdc2e5 148 *
UHSLMarcus 0:7088b1bdc2e5 149 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 150 */
UHSLMarcus 0:7088b1bdc2e5 151 bool stop(bool temp = true, bool humid = true);
UHSLMarcus 0:7088b1bdc2e5 152
UHSLMarcus 0:7088b1bdc2e5 153 /** Get whether the sensor is measuring tempurature data
UHSLMarcus 0:7088b1bdc2e5 154 *
UHSLMarcus 0:7088b1bdc2e5 155 * @return Sensor activity, true for measureing, false for idle
UHSLMarcus 0:7088b1bdc2e5 156 */
UHSLMarcus 0:7088b1bdc2e5 157 bool temp_is_measuring();
UHSLMarcus 0:7088b1bdc2e5 158
UHSLMarcus 0:7088b1bdc2e5 159 /** Get whether the sensor is measuring humidity 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 humid_is_measuring();
UHSLMarcus 0:7088b1bdc2e5 164
UHSLMarcus 0:7088b1bdc2e5 165 /** Get whether the sensor has collected tempurature data
UHSLMarcus 0:7088b1bdc2e5 166 *
UHSLMarcus 0:7088b1bdc2e5 167 * @return Has data
UHSLMarcus 0:7088b1bdc2e5 168 */
UHSLMarcus 0:7088b1bdc2e5 169 bool temp_has_data();
UHSLMarcus 0:7088b1bdc2e5 170
UHSLMarcus 0:7088b1bdc2e5 171 /** Get whether the sensor has collected humidity data
UHSLMarcus 0:7088b1bdc2e5 172 *
UHSLMarcus 0:7088b1bdc2e5 173 * @return Has data
UHSLMarcus 0:7088b1bdc2e5 174 */
UHSLMarcus 0:7088b1bdc2e5 175 bool humid_has_data();
UHSLMarcus 0:7088b1bdc2e5 176
UHSLMarcus 0:7088b1bdc2e5 177 /** 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 178 *
UHSLMarcus 0:7088b1bdc2e5 179 * @return Most recent tempurature measurement as a 16 bits unsigned value in 1/64 Kelvin
UHSLMarcus 0:7088b1bdc2e5 180 */
UHSLMarcus 0:7088b1bdc2e5 181 uint16_t temp_read();
UHSLMarcus 0:7088b1bdc2e5 182
UHSLMarcus 0:7088b1bdc2e5 183 /** 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 184 *
UHSLMarcus 0:7088b1bdc2e5 185 * @return Most recent humidity measurement as a 16 bits unsigned value in 1/64 Kelvin
UHSLMarcus 0:7088b1bdc2e5 186 */
UHSLMarcus 0:7088b1bdc2e5 187 uint16_t humid_read();
UHSLMarcus 0:7088b1bdc2e5 188
UHSLMarcus 0:7088b1bdc2e5 189 private:
UHSLMarcus 0:7088b1bdc2e5 190 I2C * _i2c;
UHSLMarcus 0:7088b1bdc2e5 191 bool _temp_mode;
UHSLMarcus 0:7088b1bdc2e5 192 bool _humid_mode;
UHSLMarcus 0:7088b1bdc2e5 193 bool _power_mode;
UHSLMarcus 3:3b427231e5a7 194 bool _reset;
UHSLMarcus 3:3b427231e5a7 195 uint16_t temp_reading;
UHSLMarcus 3:3b427231e5a7 196 uint16_t humid_reading;
UHSLMarcus 0:7088b1bdc2e5 197
UHSLMarcus 0:7088b1bdc2e5 198 bool write_config(bool system = true, bool sensor = true);
UHSLMarcus 0:7088b1bdc2e5 199 const char * read_config(bool system = true, bool sensor = true);
UHSLMarcus 0:7088b1bdc2e5 200 int i2c_read(char reg_addr, char* output, int len);
UHSLMarcus 3:3b427231e5a7 201 int i2c_write(char reg_addr, char* input, int len);
UHSLMarcus 0:7088b1bdc2e5 202
UHSLMarcus 0:7088b1bdc2e5 203
UHSLMarcus 0:7088b1bdc2e5 204
UHSLMarcus 0:7088b1bdc2e5 205 };
UHSLMarcus 0:7088b1bdc2e5 206
UHSLMarcus 0:7088b1bdc2e5 207 #endif /* AMS_ENS210_H */