Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: AmbientExampleLPC1768 HumidifierController_LPC824 TYBLE16_mbedlized_Thermometer
HDC1000.cpp
00001 /* 00002 * mbed library program 00003 * Low Power, High Accuracy Digital Humidity Sensor with Integrated Temperature Sensor 00004 * HDC1000 Texas Instruments 00005 * 00006 * Copyright (c) 2015,'17 Kenji Arai / JH1PJL 00007 * http://www.page.sannet.ne.jp/kenjia/index.html 00008 * http://mbed.org/users/kenjiArai/ 00009 * Created: Feburary 9th, 2015 00010 * Revised: AAugust 21st, 2017 00011 */ 00012 00013 #include "HDC1000.h" 00014 00015 HDC1000::HDC1000 (PinName p_sda, PinName p_scl) : 00016 _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p) 00017 { 00018 HDC1000_addr = HDC1000ADDR; 00019 init(); 00020 } 00021 00022 HDC1000::HDC1000 (PinName p_sda, PinName p_scl, uint8_t addr) : 00023 _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p) 00024 { 00025 HDC1000_addr = addr; 00026 init(); 00027 } 00028 00029 HDC1000::HDC1000 (I2C& p_i2c) : _i2c(p_i2c) 00030 { 00031 HDC1000_addr = HDC1000ADDR; 00032 init(); 00033 } 00034 00035 HDC1000::HDC1000 (I2C& p_i2c, uint8_t addr) : _i2c(p_i2c) 00036 { 00037 HDC1000_addr = addr; 00038 init(); 00039 } 00040 00041 /////////////// Start conv. and gwt all data ////////////// 00042 void HDC1000::get() 00043 { 00044 00045 dt[0] = HDC1000_REG_TEMP; 00046 _i2c.write((int)HDC1000_addr, (char *)dt, 1, true); 00047 wait_ms(15); 00048 _i2c.read((int)HDC1000_addr, (char *)dt, 4, false); 00049 temp = dt[0] << 8 | dt[1]; 00050 humi = dt[2] << 8 | dt[3]; 00051 } 00052 00053 /////////////// Read data from sensor ///////////////////// 00054 float HDC1000::temperature() 00055 { 00056 return (float)temp * 165 / 65536 - 40; 00057 } 00058 00059 /////////////// Read data from sensor ///////////////////// 00060 float HDC1000::humidity() 00061 { 00062 return (float)humi * 100 / 65536; 00063 } 00064 00065 /////////////// Initialize //////////////////////////////// 00066 void HDC1000::init() 00067 { 00068 _i2c.frequency(100000); 00069 get_IDs(); 00070 set_config(BOTH_T_14_H_14); 00071 } 00072 00073 /////////////// ID //////////////////////////////////////// 00074 uint16_t HDC1000::read_M_ID() 00075 { 00076 return manufacturer_id_number; 00077 } 00078 00079 uint16_t HDC1000::read_D_ID() 00080 { 00081 return device_id_number; 00082 } 00083 00084 uint8_t HDC1000::who_am_i() 00085 { 00086 if (device_id_number == I_AM_HDC1000) { 00087 return 1; 00088 } else { 00089 return 0; 00090 } 00091 } 00092 00093 /////////////// Configration ////////////////////////////// 00094 uint16_t HDC1000::set_config(uint16_t cfg) 00095 { 00096 dt[0] = HDC1000_REG_CONFIG; 00097 dt[1] = (uint8_t)(cfg >> 8); 00098 dt[2] = (uint8_t)(cfg & 0xff); 00099 _i2c.write((int)HDC1000_addr, (char *)dt, 3, false); 00100 return read_config(); 00101 } 00102 00103 uint16_t HDC1000::read_config(void) 00104 { 00105 dt[0] = HDC1000_REG_CONFIG; 00106 _i2c.write((int)HDC1000_addr, (char *)dt, 1, true); 00107 _i2c.read(HDC1000_addr, (char *)dt, 2, false); 00108 return (uint16_t)(dt[0] << 8 | dt[1]); 00109 } 00110 00111 /////////////// I2C Freq. ///////////////////////////////// 00112 void HDC1000::frequency(int hz) 00113 { 00114 _i2c.frequency(hz); 00115 } 00116 00117 /////////////// Read ID /////////////////////////////////// 00118 void HDC1000::get_IDs() 00119 { 00120 // Manufacturer ID 00121 dt[0] = HDC1000_REG_M_ID; 00122 _i2c.write((int)HDC1000_addr, (char *)dt, 1, true); 00123 _i2c.read(HDC1000_addr, (char *)dt, 2, false); 00124 manufacturer_id_number = dt[0] << 8 | dt[1]; 00125 // Device ID 00126 dt[0] = HDC1000_REG_D_ID; 00127 _i2c.write((int)HDC1000_addr, (char *)dt, 1, true); 00128 _i2c.read(HDC1000_addr, (char *)dt, 2, false); 00129 device_id_number = dt[0] << 8 | dt[1]; 00130 }
Generated on Mon Jul 18 2022 02:20:43 by
1.7.2