A Library for the AMS ENS210 temperature and humidity sensor.

Dependents:   AMS_CCS811_gas_sensor AMS_CCS811_gas_sensor

Committer:
UHSLMarcus
Date:
Tue Jan 17 14:26:34 2017 +0000
Revision:
1:94a79c88c105
Parent:
0:7088b1bdc2e5
Child:
3:3b427231e5a7
initalised the data stores to 0

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 0:7088b1bdc2e5 17 #define CONFIG_TEMP_OP_MODE 1
UHSLMarcus 0:7088b1bdc2e5 18 #define CONFIG_HUMID_OP_MODE 1
UHSLMarcus 0:7088b1bdc2e5 19 #define CONFIG_POWER_MODE 1
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 0:7088b1bdc2e5 51 * @param temp_single_shot Set tempurature operation mode, true for single shot and false for continuious
UHSLMarcus 0:7088b1bdc2e5 52 * @param humid_single_shot Set humidity operation mode, true for single shot and false for continuious
UHSLMarcus 0:7088b1bdc2e5 53 */
UHSLMarcus 0:7088b1bdc2e5 54 AMS_ENS210(I2C * i2c, bool temp_single_shot, bool humid_single_shot);
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 0:7088b1bdc2e5 59 * @param temp_single_shot Set tempurature operation mode, true for single shot and false for continuious
UHSLMarcus 0:7088b1bdc2e5 60 * @param humid_single_shot Set humidity operation mode, true for single shot and false for continuious
UHSLMarcus 0:7088b1bdc2e5 61 * @param low_power Set power mode, true for low power/standby and false for active
UHSLMarcus 0:7088b1bdc2e5 62 */
UHSLMarcus 0:7088b1bdc2e5 63 AMS_ENS210(I2C * i2c, bool temp_single_shot, bool humid_single_shot, 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 0:7088b1bdc2e5 87 bool 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 0:7088b1bdc2e5 93 bool power_mode();
UHSLMarcus 0:7088b1bdc2e5 94
UHSLMarcus 0:7088b1bdc2e5 95 /** Set the tempurature operation mode
UHSLMarcus 0:7088b1bdc2e5 96 *
UHSLMarcus 0:7088b1bdc2e5 97 * @param single_shot True for single shot and false for continuious
UHSLMarcus 0:7088b1bdc2e5 98 *
UHSLMarcus 0:7088b1bdc2e5 99 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 100 */
UHSLMarcus 0:7088b1bdc2e5 101 bool temp_mode(bool single_shot);
UHSLMarcus 0:7088b1bdc2e5 102
UHSLMarcus 0:7088b1bdc2e5 103 /** Get the current tempurature operation mode
UHSLMarcus 0:7088b1bdc2e5 104 *
UHSLMarcus 0:7088b1bdc2e5 105 * @return The tempurature operation mode, true for single shot, false for continuious
UHSLMarcus 0:7088b1bdc2e5 106 */
UHSLMarcus 0:7088b1bdc2e5 107 bool temp_mode();
UHSLMarcus 0:7088b1bdc2e5 108
UHSLMarcus 0:7088b1bdc2e5 109 /** Set the humidity operation mode
UHSLMarcus 0:7088b1bdc2e5 110 *
UHSLMarcus 0:7088b1bdc2e5 111 * @param single_shot True for single shot and false for continuious
UHSLMarcus 0:7088b1bdc2e5 112 *
UHSLMarcus 0:7088b1bdc2e5 113 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 114 */
UHSLMarcus 0:7088b1bdc2e5 115 bool humid_mode(bool single_shot);
UHSLMarcus 0:7088b1bdc2e5 116
UHSLMarcus 0:7088b1bdc2e5 117 /** Get the current humidity operation mode
UHSLMarcus 0:7088b1bdc2e5 118 *
UHSLMarcus 0:7088b1bdc2e5 119 * @return The humidity operation mode, true for single shot, false for continuious
UHSLMarcus 0:7088b1bdc2e5 120 */
UHSLMarcus 0:7088b1bdc2e5 121 bool humid_mode();
UHSLMarcus 0:7088b1bdc2e5 122
UHSLMarcus 0:7088b1bdc2e5 123 /** Set the I2C interface
UHSLMarcus 0:7088b1bdc2e5 124 *
UHSLMarcus 0:7088b1bdc2e5 125 * @param i2c The I2C interface
UHSLMarcus 0:7088b1bdc2e5 126 */
UHSLMarcus 0:7088b1bdc2e5 127 void i2c_interface(I2C * i2c);
UHSLMarcus 0:7088b1bdc2e5 128
UHSLMarcus 0:7088b1bdc2e5 129 /** Start measurement collection
UHSLMarcus 0:7088b1bdc2e5 130 *
UHSLMarcus 0:7088b1bdc2e5 131 * @param temp Start the tempurature sensor
UHSLMarcus 0:7088b1bdc2e5 132 * @param humid Start the humidity sensor
UHSLMarcus 0:7088b1bdc2e5 133 *
UHSLMarcus 0:7088b1bdc2e5 134 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 135 */
UHSLMarcus 0:7088b1bdc2e5 136 bool start(bool temp = true, bool humid = true);
UHSLMarcus 0:7088b1bdc2e5 137
UHSLMarcus 0:7088b1bdc2e5 138 /** Stop measurement collection
UHSLMarcus 0:7088b1bdc2e5 139 *
UHSLMarcus 0:7088b1bdc2e5 140 * @param temp Stop the tempurature sensor
UHSLMarcus 0:7088b1bdc2e5 141 * @param humid Stop the humidity sensor
UHSLMarcus 0:7088b1bdc2e5 142 *
UHSLMarcus 0:7088b1bdc2e5 143 * @return Write success
UHSLMarcus 0:7088b1bdc2e5 144 */
UHSLMarcus 0:7088b1bdc2e5 145 bool stop(bool temp = true, bool humid = true);
UHSLMarcus 0:7088b1bdc2e5 146
UHSLMarcus 0:7088b1bdc2e5 147 /** Get whether the sensor is measuring tempurature data
UHSLMarcus 0:7088b1bdc2e5 148 *
UHSLMarcus 0:7088b1bdc2e5 149 * @return Sensor activity, true for measureing, false for idle
UHSLMarcus 0:7088b1bdc2e5 150 */
UHSLMarcus 0:7088b1bdc2e5 151 bool temp_is_measuring();
UHSLMarcus 0:7088b1bdc2e5 152
UHSLMarcus 0:7088b1bdc2e5 153 /** Get whether the sensor is measuring humidity 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 humid_is_measuring();
UHSLMarcus 0:7088b1bdc2e5 158
UHSLMarcus 0:7088b1bdc2e5 159 /** Get whether the sensor has collected tempurature data
UHSLMarcus 0:7088b1bdc2e5 160 *
UHSLMarcus 0:7088b1bdc2e5 161 * @return Has data
UHSLMarcus 0:7088b1bdc2e5 162 */
UHSLMarcus 0:7088b1bdc2e5 163 bool temp_has_data();
UHSLMarcus 0:7088b1bdc2e5 164
UHSLMarcus 0:7088b1bdc2e5 165 /** Get whether the sensor has collected humidity data
UHSLMarcus 0:7088b1bdc2e5 166 *
UHSLMarcus 0:7088b1bdc2e5 167 * @return Has data
UHSLMarcus 0:7088b1bdc2e5 168 */
UHSLMarcus 0:7088b1bdc2e5 169 bool humid_has_data();
UHSLMarcus 0:7088b1bdc2e5 170
UHSLMarcus 0:7088b1bdc2e5 171 /** 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 172 *
UHSLMarcus 0:7088b1bdc2e5 173 * @return Most recent tempurature measurement as a 16 bits unsigned value in 1/64 Kelvin
UHSLMarcus 0:7088b1bdc2e5 174 */
UHSLMarcus 0:7088b1bdc2e5 175 uint16_t temp_read();
UHSLMarcus 0:7088b1bdc2e5 176
UHSLMarcus 0:7088b1bdc2e5 177 /** 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 178 *
UHSLMarcus 0:7088b1bdc2e5 179 * @return Most recent humidity measurement as a 16 bits unsigned value in 1/64 Kelvin
UHSLMarcus 0:7088b1bdc2e5 180 */
UHSLMarcus 0:7088b1bdc2e5 181 uint16_t humid_read();
UHSLMarcus 0:7088b1bdc2e5 182
UHSLMarcus 0:7088b1bdc2e5 183 private:
UHSLMarcus 0:7088b1bdc2e5 184 I2C * _i2c;
UHSLMarcus 0:7088b1bdc2e5 185 bool _temp_mode;
UHSLMarcus 0:7088b1bdc2e5 186 bool _humid_mode;
UHSLMarcus 0:7088b1bdc2e5 187 bool _power_mode;
UHSLMarcus 1:94a79c88c105 188 bool _reset = 0;
UHSLMarcus 1:94a79c88c105 189 uint16_t temp_reading = 0;
UHSLMarcus 1:94a79c88c105 190 uint16_t humid_reading = 0;
UHSLMarcus 0:7088b1bdc2e5 191
UHSLMarcus 0:7088b1bdc2e5 192 bool write_config(bool system = true, bool sensor = true);
UHSLMarcus 0:7088b1bdc2e5 193 const char * read_config(bool system = true, bool sensor = true);
UHSLMarcus 0:7088b1bdc2e5 194 int i2c_read(char reg_addr, char* output, int len);
UHSLMarcus 0:7088b1bdc2e5 195
UHSLMarcus 0:7088b1bdc2e5 196
UHSLMarcus 0:7088b1bdc2e5 197
UHSLMarcus 0:7088b1bdc2e5 198 };
UHSLMarcus 0:7088b1bdc2e5 199
UHSLMarcus 0:7088b1bdc2e5 200 #endif /* AMS_ENS210_H */