Humidity and Temperature Sensor - Sensirion SHT1x driver

Dependents:   ProgrammePrincipal Wetterstation project1 4180_Project ... more

Revision:
0:d55659b0c4a0
Child:
1:8465801be23f
diff -r 000000000000 -r d55659b0c4a0 i2c.hpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/i2c.hpp	Thu Nov 18 10:23:43 2010 +0000
@@ -0,0 +1,161 @@
+/**
+ * Copyright (c) 2010 Roy van Dam <roy@negative-black.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _I2C_HPP_
+#define _I2C_HPP_
+
+#include "mbed.h"
+
+namespace SHTx {
+    /**
+     * Class: I2C
+     *  Humidity and Temperature Sensor - SHT15
+     *  I2C Bit-bang master driver.
+     */
+    class I2C {
+    private:
+        DigitalInOut scl_pin;
+        DigitalInOut sda_pin;
+    
+        uint32_t frequency;
+    
+    public:    
+        /**
+         * Constructor: SHTx::I2C
+           *  Create an I2C Master interface, connected to the specified pins.
+         *  Bit-bang I2C driver to get around the lousy I2C implementation in the
+         *  SHTx interface... 
+         *
+         * Variables:
+         *  sda - I2C data line pin
+         *  scl - I2C clock line pin
+         */
+        I2C(PinName sda, PinName scl);
+    
+        /**
+         * Function: setFrequency
+         *  Set the frequency of the SHTx::I2C interface
+         *
+         * Variables:
+         *  hz - The bus frequency in hertz
+         */
+        void setFrequency(uint32_t hz);
+
+        /**
+         * Function: start
+         *  Issue start condition on the SHTx::I2C bus
+         */
+        void start(void);
+    
+        /**
+         * Function: stop
+         *  Issue stop condition on the SHTx::I2C bus
+         */
+        void stop(void);
+    
+        /**
+         * Function: wait
+         *  Wait for SHT15 to complete measurement.
+         *  Max timeout 500ms.
+         *
+         * Variables:
+         *  returns - true if an ACK was received, false otherwise
+         */
+        bool wait(void);
+    
+        /**
+         * Function: write
+         *  Write single byte out on the SHTx::I2C bus
+         *
+         * Variables:
+         *  data     - data to write out on bus
+         *  returns - true if an ACK was received, false otherwise
+         */
+        bool write(uint8_t data);
+    
+        /**
+         * Function: write
+         *  Read single byte form the I2C bus
+         *
+         * Variables:
+         *  ack     - indicates if the byte is to be acknowledged
+         *  returns - the read byte
+         */
+        uint8_t read(bool ack);
+
+    private:
+        /**
+         * Function: output
+         *  Configures sda pin as output
+         */
+        void output(void);
+    
+        /**
+         * Function: input
+         *  Configures sda pin as input
+         */
+        void input(void);
+    
+        /**
+         * Function: sda
+         *  Drive sda pin.
+         *
+         * Variables:
+         *  value - drive pin high or low
+         */
+        void sda(bool value);
+    
+        /**
+         * Function: scl
+         *  Drive scl pin.
+         *
+         * Variables:
+         *  value - drive pin high or low
+         */
+        void scl(bool value);
+    
+        /**
+         * Function: shift_out
+         *  Write single bit out on the SHTx::I2C bus
+         *
+         * Variables:
+         *  bit - value of the bit to be written.
+         */
+        void shift_out(bool bit);
+    
+        /**
+         * Function: shift_in
+         *  Read single bit from the SHTx::I2C bus
+         *
+         * Variables:
+         *  return - value of the bit read.
+         */
+        bool shift_in(void);
+    };
+}
+
+/* !_I2C_HPP_ */
+#endif
\ No newline at end of file