TI HDC1000 Temperature and Humidity Sensor

Dependents:   test_HDC1000

Revision:
1:f2c04c5b28ab
Parent:
0:1db0d0071723
Child:
2:f574cd898cba
--- a/HDC1000.cpp	Mon Apr 17 02:49:07 2017 +0000
+++ b/HDC1000.cpp	Mon Apr 17 07:37:19 2017 +0000
@@ -43,6 +43,28 @@
     setConfig(conf) ;
 }
 
+float    HDC1000::u2f_temp(uint16_t utemp) 
+{
+    float ftemp ;
+    
+    utemp = (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)(utemp)/ (float)0x3FFF)*165.0 - 40.0 ;
+    return( ftemp ) ;
+}
+
+float    HDC1000::u2f_hume(uint16_t uhume) 
+{
+    float fhume ;
+    uhume = (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
+    fhume = ((float)(uhume) / (float)0x3FFF) * 100.0 ;
+    return( fhume ) ;
+}
+
 float    HDC1000::readTemperature(void) 
 {
     uint16_t utemp, uhum ;
@@ -62,12 +84,16 @@
         printf("Error: unexpected mode %d\n",mode) ;
         break ;
     }
+
+    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
-    printf("utemp = 0x%04X ", utemp) ;
-    ltemp = (utemp >> 2) & 0x3FFF ;
-    
     ftemp = ((float)(ltemp)/ (float)0x3FFF)*165.0 - 40.0 ;
+    */
     return( ftemp ) ;
 }
 
@@ -76,7 +102,7 @@
     uint16_t utemp, uhume ;
     int mode ;
     int32_t lhume ;
-    float fhum ;
+    float fhume ;
 
     mode = getMode() ;
     switch(mode) {
@@ -90,13 +116,17 @@
         printf("Error: unexpected mode %d\n",mode) ;
         break ;
     }
+
+    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
-    printf("uhume = 0x%04X\n", uhume) ;
-    lhume = (uhume>>2) & 0x3FFF ;
- 
     fhum = ((float)(lhume) / (float)0x3FFF) * 100.0 ;
-    return( fhum ) ;
+    */
+    return( fhume ) ;
 }
 
 void HDC1000::readData(float *ftemp, float *fhume)
@@ -104,10 +134,14 @@
     uint16_t utemp, uhume ;
     getData(&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)