TI HDC1000 Temperature and Humidity Sensor

Dependents:   test_HDC1000

Revision:
2:f574cd898cba
Parent:
1:f2c04c5b28ab
--- a/HDC1000.cpp	Mon Apr 17 07:37:19 2017 +0000
+++ b/HDC1000.cpp	Tue Apr 18 02:44:57 2017 +0000
@@ -27,10 +27,12 @@
 #define BIT_HRES11         0x0100
 #define BIT_HRES08         0x0200
 
+#if USE_READY_PIN
 HDC1000::HDC1000(PinName sda, PinName scl, PinName rdy, int addr) : m_i2c(sda, scl), m_rdy(rdy), m_addr(addr<<1) {
-// HDC1000::HDC1000(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) {
+#else
+HDC1000::HDC1000(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) {
+#endif
     // activate the peripheral
-    
 }
 
 HDC1000::~HDC1000(void)
@@ -68,7 +70,6 @@
 float    HDC1000::readTemperature(void) 
 {
     uint16_t utemp, uhum ;
-    int32_t ltemp ;
     int mode ;
     float ftemp ;
 
@@ -85,15 +86,8 @@
         break ;
     }
 
-    printf("utemp = 0x%04X ", utemp) ;
+//    printf("utemp = 0x%04X ", utemp) ;
     ftemp = u2f_temp(utemp) ;
-    /*
-    ltemp = (utemp >> 2) & 0x3FFF ;
-    
-    // note: the data sheet suggests to use 0x10000 for denominator
-    // but to allow 100% I chose 0xFFFF instead, I may be wrong
-    ftemp = ((float)(ltemp)/ (float)0x3FFF)*165.0 - 40.0 ;
-    */
     return( ftemp ) ;
 }
 
@@ -101,7 +95,6 @@
 {
     uint16_t utemp, uhume ;
     int mode ;
-    int32_t lhume ;
     float fhume ;
 
     mode = getMode() ;
@@ -117,15 +110,8 @@
         break ;
     }
 
-    printf("uhume = 0x%04X\n", uhume) ;
+//    printf("uhume = 0x%04X\n", uhume) ;
     fhume = u2f_hume(uhume) ;
-    /*
-    lhume = (uhume>>2) & 0x3FFF ;
-    
-    // note: the data sheet suggests to use 0x10000 for denominator
-    // but to allow 100% I chose 0xFFFF instead, I may be wrong
-    fhum = ((float)(lhume) / (float)0x3FFF) * 100.0 ;
-    */
     return( fhume ) ;
 }
 
@@ -133,29 +119,30 @@
 {
     uint16_t utemp, uhume ;
     getData(&utemp, &uhume) ;
-    printf("utemp: 0x%04X, uhume: 0x%04X\n", utemp, uhume) ;
+//    printf("utemp: 0x%04X, uhume: 0x%04X\n", utemp, uhume) ;
     *ftemp = u2f_temp(utemp) ;
     *fhume = u2f_hume(uhume) ;
-#if 0
-    utemp = (utemp >> 2) & 0x3FFF ;
-    uhume = (uhume >> 2) & 0x3FFF ;
-    *ftemp = ((float)(utemp)/ (float)0x3FFF)*165.0 - 40.0 ;
-    *fhume = ((float)(uhume) / (float)0x3FFF) * 100.0 ;
-#endif
 }
+
 /* for mode 0 */
 uint16_t HDC1000::getTemperature(void) 
 {
     uint16_t temp ;
     uint8_t data[2] ;
+#if USE_READY_PIN
     float delay ;
+#endif
     data[0] = REG_TEMPERATURE ;
     data[1] = (m_addr << 1) | 0x01 ;
     m_i2c.write(m_addr, (const char*)data, 2, true);
+    
+#if USE_READY_PIN
     while(m_rdy == 1) { } /* wait for rdy */
-
-//    delay = getTDelay() ;
-//    wait_us(1000 * delay) ;
+#else
+    delay = getTDelay() ;
+    printf("Temp Delay = %.2f\n", delay) ;
+    wait_us(1000 * delay) ;
+#endif
 
     m_i2c.read(m_addr, (char *)data, 2);
     temp = (data[0] << 8) | data[1] ;
@@ -166,16 +153,21 @@
 {
     uint16_t hume ;
     uint8_t data[2] ;
+ #if USE_READY_PIN
     float delay ;
-//    readRegs(REG_HUMIDITY, data, 2) ;
+#endif
+
     data[0] = REG_HUMIDITY ;
     data[1] = (m_addr << 1) | 0x01 ;
     m_i2c.write(m_addr, (const char*)data, 2, true);
     
+#if USE_READY_PIN
     while(m_rdy == 1) { } /* wait for rdy */
-//    delay = getHDelay() ;
-//    wait_us(1000 * delay) ;
-//    wait(0.1) ;
+#else
+    delay = getHDelay() ;
+printf("Hume Delay = %.2f\n", delay) ;
+    wait_us(1000 * delay) ;
+#endif
 
     m_i2c.read(m_addr, (char *)data, 2);
     hume = (data[0] << 8) | data[1] ;
@@ -185,9 +177,11 @@
 /* for mode 1 */
 void     HDC1000::getData(uint16_t *temp, uint16_t *hume) 
 {
-    float delay ;
     uint8_t data[4] = { 0, 0, 0, 0 } ;
     int mode ;
+#if USE_READY_PIN
+    float delay ;
+#endif
 
     mode = getMode() ;
     if (mode == 0) {
@@ -197,13 +191,13 @@
         data[0] = REG_TEMPERATURE ;
         data[1] = (m_addr << 1) | 0x01 ;
         m_i2c.write(m_addr,(const char *)data, 2, false);
-    
+#if USE_READY_PIN  
         while(m_rdy == 1) { } /* wait for rdy */
-// delay = getTDelay() + getHDelay() ;
-// wait_us(1000 * delay) ;
-
-//        m_i2c.write(m_addr,(const char *)data, 1, true);
-//        while(m_rdy == 1) { } /* wait for rdy */
+#else
+ delay = getTDelay() + getHDelay() ;
+ printf("Delay = %.2f ms\n", delay) ;
+ wait( delay / 1000.0 ) ;
+#endif
         m_i2c.read(m_addr, (char *)data, 4);
         *temp = (data[0] << 8) | data[1] ;
         *hume = (data[2] << 8) | data[3] ;