library for AMS ENS210 temperature and humidity sensor

Dependents:   rIoTwear-temp-humid

Revision:
0:7088b1bdc2e5
Child:
1:94a79c88c105
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AMS_ENS210.h	Tue Jan 17 14:23:13 2017 +0000
@@ -0,0 +1,200 @@
+/**
+* @author Marcus Lee
+*
+* @section DESCRIPTION
+*    A library for the AMS ENS210 tempuratire and relative humidy sensor.
+*
+*/ 
+
+
+#ifndef AMS_ENS210_H
+#define AMS_ENS210_H
+
+#include "mbed.h"
+
+
+/* Library defaults */
+#define CONFIG_TEMP_OP_MODE     1
+#define CONFIG_HUMID_OP_MODE    1
+#define CONFIG_POWER_MODE       1
+
+/* Library Constants */
+#define SLAVE_ADDR_RAW  0x43
+#define SLAVE_ADDR      SLAVE_ADDR_RAW << 1     // 0x86
+#define SLAVE_ADDR_W    SLAVE_ADDR
+#define SLAVE_ADDR_R    SLAVE_ADDR | 1          // 0x87
+
+#define SYS_CONFIG      0x10
+#define SYS_STATUS      0x11
+
+#define SENS_OP_MODE    0x21
+#define SENS_START      0x22
+#define SENS_STOP       0x23
+#define SENS_STATUS     0x24
+#define SENS_TEMP       0x30
+#define SENS_HUMID      0x33
+
+/** The AMS ENS210 class
+ */
+class AMS_ENS210 {
+    
+    public:
+        /** Create an AMS_ENS210 instance
+         * 
+         * @param i2c   The I2C interface to use for communication
+         */
+        AMS_ENS210(I2C * i2c);
+        
+        /** Create an AMS_ENS210 instance
+         * 
+         * @param i2c                   The I2C interface to use for communication
+         * @param temp_single_shot      Set tempurature operation mode, true for single shot and false for continuious
+         * @param humid_single_shot     Set humidity operation mode, true for single shot and false for continuious
+         */
+        AMS_ENS210(I2C * i2c, bool temp_single_shot, bool humid_single_shot);
+        
+        /** Create an AMS_ENS210 instance
+         * 
+         * @param i2c                   The I2C interface to use for communication
+         * @param temp_single_shot      Set tempurature operation mode, true for single shot and false for continuious
+         * @param humid_single_shot     Set humidity operation mode, true for single shot and false for continuious
+         * @param low_power             Set power mode, true for low power/standby and false for active
+         */
+        AMS_ENS210(I2C * i2c, bool temp_single_shot, bool humid_single_shot, bool low_power);
+        
+        /** Destroy the AMS_ENS210 instance
+         */
+        ~AMS_ENS210();
+        
+        /** Initalise the sensor
+         *
+         * @return Intalisation success
+         */
+        bool init();
+        
+        /** Software reset the sensor
+         *
+         * @return Reset success
+         */
+        bool reset();
+        
+        /** Set the power mode 
+         * 
+         * @param low_power     True for low power/standby and false for active
+         *
+         * @return Write success
+         */
+        bool power_mode(bool low_power);
+        
+        /** Get the current power mode
+         *
+         * @return The power mode, true for low power, false for active
+         */
+        bool power_mode();
+        
+        /** Set the tempurature operation mode 
+         * 
+         * @param single_shot      True for single shot and false for continuious
+         *
+         * @return Write success
+         */
+        bool temp_mode(bool single_shot);
+        
+        /** Get the current tempurature operation mode
+         *
+         * @return The tempurature operation mode, true for single shot, false for continuious
+         */
+        bool temp_mode();
+        
+        /** Set the humidity operation mode 
+         * 
+         * @param single_shot      True for single shot and false for continuious
+         *
+         * @return Write success
+         */
+        bool humid_mode(bool single_shot);
+        
+        /** Get the current humidity operation mode
+         *
+         * @return The humidity operation mode, true for single shot, false for continuious
+         */
+        bool humid_mode();
+        
+        /** Set the I2C interface
+         * 
+         * @param i2c   The I2C interface
+         */
+        void i2c_interface(I2C * i2c);
+        
+        /** Start measurement collection
+         *
+         * @param temp      Start the tempurature sensor
+         * @param humid     Start the humidity sensor
+         *
+         * @return Write success
+         */
+        bool start(bool temp = true, bool humid = true);
+        
+        /** Stop measurement collection
+         *
+         * @param temp      Stop the tempurature sensor
+         * @param humid     Stop the humidity sensor
+         *
+         * @return Write success
+         */
+        bool stop(bool temp = true, bool humid = true);
+        
+        /** Get whether the sensor is measuring tempurature data
+         *
+         * @return Sensor activity, true for measureing, false for idle
+         */
+        bool temp_is_measuring();
+        
+        /** Get whether the sensor is measuring humidity data
+         *
+         * @return Sensor activity, true for measureing, false for idle
+         */
+        bool humid_is_measuring();
+        
+        /** Get whether the sensor has collected tempurature data
+         *
+         * @return Has data
+         */
+        bool temp_has_data();
+        
+        /** Get whether the sensor has collected humidity data
+         *
+         * @return Has data
+         */
+        bool humid_has_data();
+        
+        /** Get the most recent tempurature measurement, must call temp_has_data() first when in single shot mode otherwise the same data will be returned 
+         *
+         * @return Most recent tempurature measurement as a 16 bits unsigned value in 1/64 Kelvin
+         */
+        uint16_t temp_read();
+        
+        /** Get the most recent humidty measurement, must call humid_has_data() first when in single shot mode otherwise the same data will be returned 
+         *
+         * @return Most recent humidity measurement as a 16 bits unsigned value in 1/64 Kelvin
+         */
+        uint16_t humid_read();
+        
+    private:
+        I2C * _i2c;
+        bool _temp_mode;
+        bool _humid_mode;
+        bool _power_mode;
+        bool _reset;
+        uint16_t temp_reading;
+        uint16_t humid_reading;
+        
+        bool write_config(bool system = true, bool sensor =  true);
+        const char * read_config(bool system = true, bool sensor =  true);
+        int i2c_read(char reg_addr, char* output, int len);
+        
+        
+        
+};
+
+#endif /* AMS_ENS210_H */
\ No newline at end of file