IOT Greenhouse

Dependencies:   HC_SR04_Ultrasonic_Library PixelArrayBuffer Servo TSL2561 mbed-rtos mbed

Committer:
jsheu3
Date:
Tue May 01 13:59:00 2018 +0000
Revision:
0:7ebf4813882d
IOT Greenhouse

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jsheu3 0:7ebf4813882d 1 // **********************************************************************************
jsheu3 0:7ebf4813882d 2 // Driver definition for HopeRF TH02 temperature and humidity sensor
jsheu3 0:7ebf4813882d 3 // **********************************************************************************
jsheu3 0:7ebf4813882d 4 // Creative Commons Attrib Share-Alike License
jsheu3 0:7ebf4813882d 5 // You are free to use/extend this library but please abide with the CC-BY-SA license:
jsheu3 0:7ebf4813882d 6 // http://creativecommons.org/licenses/by-sa/4.0/
jsheu3 0:7ebf4813882d 7 //
jsheu3 0:7ebf4813882d 8 // For any explanation see TH02 sensor information at
jsheu3 0:7ebf4813882d 9 // http://www.hoperf.com/sensor/app/TH02.htm
jsheu3 0:7ebf4813882d 10 //
jsheu3 0:7ebf4813882d 11 // Code based on following datasheet
jsheu3 0:7ebf4813882d 12 // http://www.hoperf.com/upload/sensor/TH02_V1.1.pdf
jsheu3 0:7ebf4813882d 13 //
jsheu3 0:7ebf4813882d 14 // Written by Charles-Henri Hallard (http://hallard.me)
jsheu3 0:7ebf4813882d 15 //ported to mbed env by Philippe LAURENT (IUT de NICE France)
jsheu3 0:7ebf4813882d 16 //
jsheu3 0:7ebf4813882d 17 // History : V1.00 2014-07-14 - First release
jsheu3 0:7ebf4813882d 18 // V1.10 2015-04-13 - changed to Wire library instead of I2C
jsheu3 0:7ebf4813882d 19 //
jsheu3 0:7ebf4813882d 20 // All text above must be included in any redistribution.
jsheu3 0:7ebf4813882d 21 //
jsheu3 0:7ebf4813882d 22 // **********************************************************************************
jsheu3 0:7ebf4813882d 23 #ifndef TH02_H
jsheu3 0:7ebf4813882d 24 #define TH02_H
jsheu3 0:7ebf4813882d 25
jsheu3 0:7ebf4813882d 26 #include <mbed.h> //
jsheu3 0:7ebf4813882d 27
jsheu3 0:7ebf4813882d 28 // TH02 I2C Device address
jsheu3 0:7ebf4813882d 29 #define TH02_I2C_ADDR 0x40
jsheu3 0:7ebf4813882d 30
jsheu3 0:7ebf4813882d 31 // TH02 Registers addresses
jsheu3 0:7ebf4813882d 32 #define TH02_STATUS 0
jsheu3 0:7ebf4813882d 33 #define TH02_DATAh 1
jsheu3 0:7ebf4813882d 34 #define TH02_DATAl 2
jsheu3 0:7ebf4813882d 35 #define TH02_CONFIG 3
jsheu3 0:7ebf4813882d 36 #define TH02_ID 17
jsheu3 0:7ebf4813882d 37
jsheu3 0:7ebf4813882d 38 // TH02 custom error code return function
jsheu3 0:7ebf4813882d 39 #define TH02_I2C_ERR 0xFF
jsheu3 0:7ebf4813882d 40
jsheu3 0:7ebf4813882d 41 // Unititialized values (arbitrary)
jsheu3 0:7ebf4813882d 42 #define TH02_UNINITIALIZED_TEMP 55555 // int32_t internal value
jsheu3 0:7ebf4813882d 43 #define TH02_UNINITIALIZED_RH 1111 // int32_t internal value
jsheu3 0:7ebf4813882d 44 #define TH02_UNDEFINED_VALUE 12345 // int16_t returned value
jsheu3 0:7ebf4813882d 45
jsheu3 0:7ebf4813882d 46 // we decide error if conversion is >= 50ms
jsheu3 0:7ebf4813882d 47 #define TH02_CONVERSION_TIME_OUT 50
jsheu3 0:7ebf4813882d 48
jsheu3 0:7ebf4813882d 49 // Bit definition of TH02 registers values
jsheu3 0:7ebf4813882d 50 #define TH02_STATUS_RDY 0x01
jsheu3 0:7ebf4813882d 51
jsheu3 0:7ebf4813882d 52 #define TH02_CONFIG_START 0x01
jsheu3 0:7ebf4813882d 53 #define TH02_CONFIG_HEAT 0x02
jsheu3 0:7ebf4813882d 54 #define TH02_CONFIG_TEMP 0x10
jsheu3 0:7ebf4813882d 55 #define TH02_CONFIG_HUMI 0x00
jsheu3 0:7ebf4813882d 56 #define TH02_CONFIG_FAST 0x20
jsheu3 0:7ebf4813882d 57
jsheu3 0:7ebf4813882d 58 // THO2 Linearization Coefficients
jsheu3 0:7ebf4813882d 59 #define TH02_A0 -4.7844
jsheu3 0:7ebf4813882d 60 #define TH02_A1 0.4008
jsheu3 0:7ebf4813882d 61 #define TH02_A2 -0.00393
jsheu3 0:7ebf4813882d 62
jsheu3 0:7ebf4813882d 63 // TH02 Temperature compensation Linearization Coefficients
jsheu3 0:7ebf4813882d 64 #define TH02_Q0 0.1973
jsheu3 0:7ebf4813882d 65 #define TH02_Q1 0.00237
jsheu3 0:7ebf4813882d 66
jsheu3 0:7ebf4813882d 67
jsheu3 0:7ebf4813882d 68
jsheu3 0:7ebf4813882d 69
jsheu3 0:7ebf4813882d 70
jsheu3 0:7ebf4813882d 71 class TH02 {
jsheu3 0:7ebf4813882d 72 public:
jsheu3 0:7ebf4813882d 73 TH02(uint8_t address);
jsheu3 0:7ebf4813882d 74 uint8_t getId(uint8_t * pvalue);
jsheu3 0:7ebf4813882d 75 uint8_t getId(void);
jsheu3 0:7ebf4813882d 76 uint8_t getStatus(uint8_t * pvalue);
jsheu3 0:7ebf4813882d 77 bool isConverting(void);
jsheu3 0:7ebf4813882d 78 uint8_t waitEndConversion(void);
jsheu3 0:7ebf4813882d 79 uint8_t getConfig(uint8_t * pvalue);
jsheu3 0:7ebf4813882d 80 uint8_t setConfig(uint8_t config);
jsheu3 0:7ebf4813882d 81 uint8_t startTempConv(bool fastmode = false, bool heater = false);
jsheu3 0:7ebf4813882d 82 uint8_t startRHConv(bool fastmode = false, bool heater = false);
jsheu3 0:7ebf4813882d 83 int16_t roundInt(float value);
jsheu3 0:7ebf4813882d 84 int16_t getConversionValue(void);
jsheu3 0:7ebf4813882d 85 int16_t getConpensatedRH(bool round);
jsheu3 0:7ebf4813882d 86 int32_t getLastRawRH(void);
jsheu3 0:7ebf4813882d 87 int32_t getLastRawTemp(void);
jsheu3 0:7ebf4813882d 88
jsheu3 0:7ebf4813882d 89 /**
jsheu3 0:7ebf4813882d 90 * TH02 constructor
jsheu3 0:7ebf4813882d 91 *
jsheu3 0:7ebf4813882d 92 * @param sda I2C data pin
jsheu3 0:7ebf4813882d 93 * @param scl I2C clock pin
jsheu3 0:7ebf4813882d 94 * @param address I2C slave sensor address
jsheu3 0:7ebf4813882d 95
jsheu3 0:7ebf4813882d 96 */
jsheu3 0:7ebf4813882d 97 TH02(PinName sda, PinName scl, uint8_t address);
jsheu3 0:7ebf4813882d 98
jsheu3 0:7ebf4813882d 99 /**
jsheu3 0:7ebf4813882d 100 * MFRC522 destructor
jsheu3 0:7ebf4813882d 101 */
jsheu3 0:7ebf4813882d 102 ~TH02();
jsheu3 0:7ebf4813882d 103
jsheu3 0:7ebf4813882d 104
jsheu3 0:7ebf4813882d 105
jsheu3 0:7ebf4813882d 106 private:
jsheu3 0:7ebf4813882d 107 I2C m_I2C;
jsheu3 0:7ebf4813882d 108 uint8_t writeCommand(uint8_t command, bool release=true);
jsheu3 0:7ebf4813882d 109 uint8_t writeRegister(uint8_t reg, uint8_t value);
jsheu3 0:7ebf4813882d 110 uint8_t readRegister(uint8_t reg, uint8_t * value);
jsheu3 0:7ebf4813882d 111
jsheu3 0:7ebf4813882d 112 int32_t _last_temp; // Last measured temperature (for linearization)
jsheu3 0:7ebf4813882d 113 int32_t _last_rh; // Last measured RH
jsheu3 0:7ebf4813882d 114 uint8_t _address; // I2C Module Address
jsheu3 0:7ebf4813882d 115
jsheu3 0:7ebf4813882d 116
jsheu3 0:7ebf4813882d 117
jsheu3 0:7ebf4813882d 118 };
jsheu3 0:7ebf4813882d 119
jsheu3 0:7ebf4813882d 120
jsheu3 0:7ebf4813882d 121
jsheu3 0:7ebf4813882d 122 #endif