Sensiron SHT 7x Temperature and humidity device library

Dependents:   temp xj-Nucleo-F303K8-SHT75-TEST

Files at this revision

API Documentation at this revision

Comitter:
nimbusgb
Date:
Wed Oct 27 15:51:27 2010 +0000
Parent:
0:f401474a3e96
Child:
2:dd218144f9fe
Commit message:

Changed in this revision

sht75.cpp Show diff for this revision Revisions of this file
sht75.h Show diff for this revision Revisions of this file
sht7X.cpp Show annotated file Show diff for this revision Revisions of this file
sht7X.h Show annotated file Show diff for this revision Revisions of this file
--- a/sht75.cpp	Wed Oct 27 15:27:38 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +0,0 @@
-//
-// Ian Molesworth October 2010
-// SHT 75 class
-//
-// 
-// To do:
-//
-// 
-
-#include "sht75.h"
-
-void SHT75::reset()
-    {
-     _data.output();
-    _data = 1;                                        // data bus high
-    for (int i=0;i<12;i++)
-        {
-        _clock = 1;                                   // clock high
-        wait_us(1);
-        _clock = 0;                                   // clock lo
-        wait_us(1);
-        }
-    _clock = 1;                                   // clock high
-        wait_us(1);
-    _data  = 0;
-        wait_us(1);
-    _clock = 0;                                   // clock lo
-        wait_us(1);
-    _clock = 1;
-        wait_us(1);
-    _data  = 1;
-        wait_us(1);
-    _clock = 0;   
-        wait_us(1);
-    }
-
-void  SHT75::softReset(void)
-    {
-    _data.output();
-    start();
-    write(0x1E);
-    wait_ms(12);
-    }
-
-void  SHT75::start(void)
-    {
-    _data.output();
-    _clock = 1;
-    wait_us(1);
-    _data = 0;
-    wait_us(1);
-    _clock = 0;
-    wait_us(1);
-    _clock = 1;
-    wait_us(1);
-    _data = 1;
-    wait_us(1);
-    _clock = 0;
-    }
-
-int SHT75::readStatus(void)
-    {
-    int status;
-    status = -1;
-    start();
-    if (write(0x06) == 0)
-        status = read(1);               // read with a wait for ack
-    read(0);                            // read without the wait
-    return status;
-    }
-
-bool SHT75::write(char d)
-    {
-    auto int i;
-    _data.output();                         // bus output
-    // Writes char and returns -1 if no ACK was sent from remote
-    for (i=0;i<8;i++)
-        {
-        if (d & 0x80)
-            _data = 1;                      // data high
-        else
-            _data = 0;                      // data lo
-        // shift the data
-        d <<= 1;
-        wait_us(1);
-        _clock = 1;                         // clock high
-        wait_us(1);
-        _clock = 0;                         // clock lo
-        }
-    _data.input();                          // float the bus
-    wait_us(1);
-    _clock = 1;                             // clock high
-    wait_us(1);
-    i = _data;
-    _clock = 0;                             // clock lo
-    return i;                               // leave the bus in input mode and return the status of the ack bit read.
-    }
-
-int SHT75::read(char ack)
-    {
-    auto int i,s;
-    auto char c;
-    s = 0;
-    _data.input();                            // bus to input
-  
-    for (i=0;i<8;i++)
-        {
-        s <<= 1;
-        wait_us(1);
-        _clock = 1;                              // clock high
-        wait_us(1);
-        c = _data;                               // get the data bit
-        _clock = 0;                             // clock lo
-        if ( c )
-            s |= 1;
-        }
-
-    if (ack == 1)
-        _data = 0;                             // data lo
-    else
-        _data = 1;                             // data hi
-    _data.output();
-    _clock = 1;                                // clock lo
-    wait_us(1);
-    _clock = 0;                              // clock lo
-    _data = 1;                               // data hi
-    _data.input();
-    return s;
-    }
-
-
-// Put the current temperature into passed variable
-bool SHT75::readTempTicks(int* temp)
-{
-  int v, value;
-  start();                                  // Start a tx ( leaves data as input )
-  if (write(0x03) == 0)                     // send the read command and get an ack
-        {
-        for (v=0; v<50; v ++)               // wait for ready up to 500 ms
-            {
-            wait_ms(10);                    // 10 ms pause
-            if ( _data == 0 )               //
-                {
-                value = read(1);            // read a byte
-                value <<= 8;                // shift it in
-                value |= read(1);           // read another byte
-                read(0);
-                // transfer the value
-                 *temp = value;
-                reset();
-                return true;
-                }
-            }
-        }
-    return false;    
-    }
-
-bool SHT75::readHumidityTicks(int* humi)
-    {
-    start();
-    if (write(0x05) == 0)
-        {
-        for (int value=0; value<50; value ++)   // wait for ready up to 500 ms
-            {
-            wait_ms(10);                        //
-            if ( _data == 0 )                   //
-                {
-                value = read(1);
-                value <<= 8;
-                value |= read(1);
-                read(0);
-                *humi = value;                  // transfer the value
-                reset();
-                return true;
-                }
-            }
-        }
-   
-    return false;
-    }
--- a/sht75.h	Wed Oct 27 15:27:38 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/* mbed Sensiron SHT7x temperature and humidity sensor library
-*
-* Sensiron data at http://www.sensirion.com/en/01_humidity_sensors/06_humidity_sensor_sht75.htm
-*
-* Copyright (c) Ian Molesworth October 2010
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy
-* of this software and associated documentation files (the "Software"), to use
-* copy or modify the software for private or non-commercial purposes only. 
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-* THE SOFTWARE.
-*/
-
-
-#ifndef SHT75_H
-#define SHT75_H
-
-#include "mbed.h"
-
-const float C1= -4.0;              // for 12 Bit humi
-const float C2= +0.0405;           // for 12 Bit humi
-const float C3= -0.0000028;        // for 12 Bit hum
-const float TL= -39.61;             // 3v 14 bit 
-const float T1= +0.01;             // for 14 Bit @ 5V
-const float T2= +0.00008;          // for 14 Bit @ 5V
-
-class SHT75 
-    {
-    public:
-     /** Create an SHT object connected to the specified Digital pins
-      *
-      * @param pclock digital pin to use as clock
-      * @param pdata digital pin to use as data bus ( bidirectional ) 
-      */
-        SHT75(PinName pclock, PinName pdata): _clock(pclock), _data(pdata) {};
-     /** read the temperature ticks value 14 bit resolution
-      *
-      * @param int *temp pointer to an integer to hold the tick value
-      * @returns boolean true if read acknowledges
-      */
-        bool readTempTicks(int* temp);
-     /** read the humidity ticks value 12 bit resolution
-      *
-      * @param int *temp pointer to an integer to hold the tick value
-      * @returns boolean true if read acknowledges
-      */
-        bool readHumidityTicks(int* temp);
-     /** start up reset
-      *
-      * call to resync or abort current operation.
-      * worth calling every now and then to make sure your system is not hung.
-      */
-        void reset(void);
-        void softReset(void);
-        int  readStatus(void);
-  
-    private:  
-        DigitalInOut _data;
-        DigitalOut _clock;
-        
-        void start(void);
-        int read(char);
-        bool write(char);
-    };
-
-#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sht7X.cpp	Wed Oct 27 15:51:27 2010 +0000
@@ -0,0 +1,180 @@
+//
+// Ian Molesworth October 2010
+// SHT 75 class
+//
+// 
+// To do:
+//
+// 
+
+#include "sht7X.h"
+
+void SHT75::reset()
+    {
+     _data.output();
+    _data = 1;                                        // data bus high
+    for (int i=0;i<12;i++)
+        {
+        _clock = 1;                                   // clock high
+        wait_us(1);
+        _clock = 0;                                   // clock lo
+        wait_us(1);
+        }
+    _clock = 1;                                   // clock high
+        wait_us(1);
+    _data  = 0;
+        wait_us(1);
+    _clock = 0;                                   // clock lo
+        wait_us(1);
+    _clock = 1;
+        wait_us(1);
+    _data  = 1;
+        wait_us(1);
+    _clock = 0;   
+        wait_us(1);
+    }
+
+void  SHT75::softReset(void)
+    {
+    _data.output();
+    start();
+    write(0x1E);
+    wait_ms(12);
+    }
+
+void  SHT75::start(void)
+    {
+    _data.output();
+    _clock = 1;
+    wait_us(1);
+    _data = 0;
+    wait_us(1);
+    _clock = 0;
+    wait_us(1);
+    _clock = 1;
+    wait_us(1);
+    _data = 1;
+    wait_us(1);
+    _clock = 0;
+    }
+
+int SHT75::readStatus(void)
+    {
+    int status;
+    status = -1;
+    start();
+    if (write(0x06) == 0)
+        status = read(1);               // read with a wait for ack
+    read(0);                            // read without the wait
+    return status;
+    }
+
+bool SHT75::write(char d)
+    {
+    auto int i;
+    _data.output();                         // bus output
+    // Writes char and returns -1 if no ACK was sent from remote
+    for (i=0;i<8;i++)
+        {
+        if (d & 0x80)
+            _data = 1;                      // data high
+        else
+            _data = 0;                      // data lo
+        // shift the data
+        d <<= 1;
+        wait_us(1);
+        _clock = 1;                         // clock high
+        wait_us(1);
+        _clock = 0;                         // clock lo
+        }
+    _data.input();                          // float the bus
+    wait_us(1);
+    _clock = 1;                             // clock high
+    wait_us(1);
+    i = _data;
+    _clock = 0;                             // clock lo
+    return i;                               // leave the bus in input mode and return the status of the ack bit read.
+    }
+
+int SHT75::read(char ack)
+    {
+    auto int i,s;
+    auto char c;
+    s = 0;
+    _data.input();                            // bus to input
+  
+    for (i=0;i<8;i++)
+        {
+        s <<= 1;
+        wait_us(1);
+        _clock = 1;                              // clock high
+        wait_us(1);
+        c = _data;                               // get the data bit
+        _clock = 0;                             // clock lo
+        if ( c )
+            s |= 1;
+        }
+
+    if (ack == 1)
+        _data = 0;                             // data lo
+    else
+        _data = 1;                             // data hi
+    _data.output();
+    _clock = 1;                                // clock lo
+    wait_us(1);
+    _clock = 0;                              // clock lo
+    _data = 1;                               // data hi
+    _data.input();
+    return s;
+    }
+
+
+// Put the current temperature into passed variable
+bool SHT75::readTempTicks(int* temp)
+{
+  int v, value;
+  start();                                  // Start a tx ( leaves data as input )
+  if (write(0x03) == 0)                     // send the read command and get an ack
+        {
+        for (v=0; v<50; v ++)               // wait for ready up to 500 ms
+            {
+            wait_ms(10);                    // 10 ms pause
+            if ( _data == 0 )               //
+                {
+                value = read(1);            // read a byte
+                value <<= 8;                // shift it in
+                value |= read(1);           // read another byte
+                read(0);
+                // transfer the value
+                 *temp = value;
+                reset();
+                return true;
+                }
+            }
+        }
+    return false;    
+    }
+
+bool SHT75::readHumidityTicks(int* humi)
+    {
+    start();
+    if (write(0x05) == 0)
+        {
+        for (int value=0; value<50; value ++)   // wait for ready up to 500 ms
+            {
+            wait_ms(10);                        //
+            if ( _data == 0 )                   //
+                {
+                value = read(1);
+                value <<= 8;
+                value |= read(1);
+                read(0);
+                *humi = value;                  // transfer the value
+                reset();
+                return true;
+                }
+            }
+        }
+   
+    return false;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sht7X.h	Wed Oct 27 15:51:27 2010 +0000
@@ -0,0 +1,100 @@
+/* mbed Sensiron SHT7x temperature and humidity sensor library
+*
+* Sensiron data at http://www.sensirion.com/en/01_humidity_sensors/06_humidity_sensor_sht75.htm
+*
+* Copyright (c) Ian Molesworth October 2010
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy
+* of this software and associated documentation files (the "Software"), to use
+* copy or modify the software for private or non-commercial purposes only. 
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+* THE SOFTWARE.
+*/
+
+
+#ifndef SHT75_H
+#define SHT75_H
+
+#include "mbed.h"
+
+const float C1= -4.0;              // for 12 Bit humi
+const float C2= +0.0405;           // for 12 Bit humi
+const float C3= -0.0000028;        // for 12 Bit hum
+const float TL= -39.61;             // 3v 14 bit 
+const float T1= +0.01;             // for 14 Bit @ 5V
+const float T2= +0.00008;          // for 14 Bit @ 5V
+
+/** SHT7x class
+*
+* Example:
+* @code
+* //initialise the device read temperature ticks, read humidity ticks and then
+* calculate the liniarised humidity value.
+* #include "mbed.h"
+* #include "SHT7X.h"
+00035  * 
+00036  * Servo myservo(p21);
+00037  * 
+00038  * int main() {
+00039  *     while(1) {
+00040  *         for(int i=0; i<100; i++) {
+00041  *             myservo = i/100.0;
+00042  *             wait(0.01);
+00043  *         }
+00044  *         for(int i=100; i>0; i--) {
+00045  *             myservo = i/100.0;
+00046  *             wait(0.01);
+00047  *         }
+00048  *     }
+00049  * }
+00050  * @endcode
+00051  */
+class SHT75 
+    {
+    public:
+     /** Create an SHT object connected to the specified Digital pins
+      *
+      * @param pclock digital pin to use as clock
+      * @param pdata digital pin to use as data bus ( bidirectional ) 
+      */
+        SHT75(PinName pclock, PinName pdata): _clock(pclock), _data(pdata) {};
+     /** read the temperature ticks value 14 bit resolution
+      *
+      * @param int *temp pointer to an integer to hold the tick value
+      * @returns boolean true if read acknowledges
+      */
+        bool readTempTicks(int* temp);
+     /** read the humidity ticks value 12 bit resolution
+      *
+      * @param int *temp pointer to an integer to hold the tick value
+      * @returns boolean true if read acknowledges
+      */
+        bool readHumidityTicks(int* temp);
+     /** start up reset
+      *
+      * call to resync or abort current operation.
+      * worth calling every now and then to make sure your system is not hung.
+      */
+        void reset(void);
+        void softReset(void);
+        int  readStatus(void);
+  
+    private:  
+        DigitalInOut _data;
+        DigitalOut _clock;
+        
+        void start(void);
+        int read(char);
+        bool write(char);
+    };
+
+#endif