TI HDC1000 Temperature and Humidity Sensor

Dependents:   test_HDC1000

Files at this revision

API Documentation at this revision

Comitter:
Rhyme
Date:
Mon Apr 17 07:37:19 2017 +0000
Parent:
0:1db0d0071723
Child:
2:f574cd898cba
Commit message:
u2f functions added

Changed in this revision

HDC1000.cpp Show annotated file Show diff for this revision Revisions of this file
HDC1000.h Show annotated file Show diff for this revision Revisions of this file
--- 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) 
--- a/HDC1000.h	Mon Apr 17 02:49:07 2017 +0000
+++ b/HDC1000.h	Mon Apr 17 07:37:19 2017 +0000
@@ -25,6 +25,8 @@
 
 void     reset(void) ;
 
+float    u2f_temp(uint16_t utemp) ;
+float    u2f_hume(uint16_t uhume) ;
 /* for mode 0 */
 uint16_t getTemperature(void) ;
 uint16_t getHumidity(void) ;