Internet of Greens. Mini automated greenhouse, with an internet of sensors.
Dependencies: HC_SR04_Ultrasonic_Library PixelArrayBuffer Servo TSL2561 mbed-rtos mbed
Fork of Final_project by
th02.h@1:8e50dcd9884f, 2018-05-02 (annotated)
- Committer:
- tamechi3
- Date:
- Wed May 02 16:50:40 2018 +0000
- Revision:
- 1:8e50dcd9884f
- Parent:
- 0:7ebf4813882d
mini automated greenhouse
Who changed what in which revision?
User | Revision | Line number | New 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 |