Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Natural_Calamities_Monitoring_System Nucleo_HTU21D-F Nucleo_motors lpc1768_blinky ... more
Revision 0:db86ad1b4459, committed 2014-03-28
- Comitter:
- hwing91
- Date:
- Fri Mar 28 14:55:03 2014 +0000
- Commit message:
- INITIAL COMMIT
Changed in this revision
| HTU21D/HTU21D.cpp | Show annotated file Show diff for this revision Revisions of this file |
| HTU21D/HTU21D.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/HTU21D/HTU21D.cpp Fri Mar 28 14:55:03 2014 +0000
@@ -0,0 +1,108 @@
+/**
+ * @author Alan Lai & Nelson Diaz
+ * The Georgia Institute of Technology
+ * ECE 4180 Embeded Systems
+ * Professor Hamblen
+ * 03/28/2014
+ *
+ * @section LICENSE
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <alanhlai91@gmail.com> wrote this file. As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return.
+ * ----------------------------------------------------------------------------
+ *
+ *
+ * @section DESCRIPTION
+ *
+ * HTU21D Humidity and Temperature sensor.
+ *
+ * Datasheet, specs, and information:
+ *
+ * https://www.sparkfun.com/products/12064
+ */
+
+/**
+ * Includes
+ */
+#include "HTU21D.h"
+
+HTU21D::HTU21D(PinName sda, PinName scl) {
+
+ i2c_ = new I2C(sda, scl);
+ //400KHz, as specified by the datasheet.
+ i2c_->frequency(400000);
+
+
+
+}
+
+int HTU21D::sample_ctemp(void) {
+
+ char tx[1];
+ char rx[2];
+
+ tx[0] = TRIGGER_TEMP_MEASURE; // Triggers a temperature measure by feeding correct opcode.
+ i2c_->write((HTU21D_I2C_ADDRESS << 1) & 0xFE, tx, 1);
+ wait_ms(1);
+
+ // Reads triggered measure
+ i2c_->read((HTU21D_I2C_ADDRESS << 1) | 0x01, rx, 2);
+ wait_ms(1);
+
+ // Algorithm from datasheet to compute temperature.
+ unsigned int rawTemperature = ((unsigned int) rx[0] << 8) | (unsigned int) rx[1];
+ rawTemperature &= 0xFFFC;
+
+ float tempTemperature = rawTemperature / (float)65536; //2^16 = 65536
+ float realTemperature = -46.85 + (175.72 * tempTemperature); //From page 14
+
+ return (int)realTemperature;
+
+}
+
+int HTU21D::sample_ftemp(void){
+ int temptemp = sample_ctemp();
+ int ftemp = temptemp * 1.8 + 32;
+
+ return ftemp;
+}
+
+int HTU21D::sample_ktemp(void){
+ int temptemp = sample_ctemp();
+ int ktemp = temptemp + 274;
+
+ return ktemp;
+
+
+}
+
+int HTU21D::sample_humid(void) {
+
+ char tx[1];
+ char rx[2];
+
+
+ tx[0] = TRIGGER_HUMD_MEASURE; // Triggers a humidity measure by feeding correct opcode.
+ i2c_->write((HTU21D_I2C_ADDRESS << 1) & 0xFE, tx, 1);
+ wait_ms(1);
+
+ // Reads triggered measure
+ i2c_->read((HTU21D_I2C_ADDRESS << 1) | 0x01, rx, 2);
+ wait_ms(1);
+
+ //Algorithm from datasheet.
+ unsigned int rawHumidity = ((unsigned int) rx[0] << 8) | (unsigned int) rx[1];
+
+ rawHumidity &= 0xFFFC; //Zero out the status bits but keep them in place
+
+ //Given the raw humidity data, calculate the actual relative humidity
+ float tempRH = rawHumidity / (float)65536; //2^16 = 65536
+ float rh = -6 + (125 * tempRH); //From page 14
+
+
+ return (int)rh;
+
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/HTU21D/HTU21D.h Fri Mar 28 14:55:03 2014 +0000
@@ -0,0 +1,103 @@
+/**
+ * @author Alan Lai & Nelson Diaz
+ * The Georgia Institute of Technology
+ * ECE 4180 Embeded Systems
+ * Professor Hamblen
+ * 03/28/2014
+ *
+ * @section LICENSE
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <alanhlai91@gmail.com> wrote this file. As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return.
+ * ----------------------------------------------------------------------------
+ *
+ *
+ * @section DESCRIPTION
+ *
+ * Honeywell HTU21D Humidity and Temperature sensor.
+ *
+ * Datasheet, specs, and information:
+ *
+ * https://www.sparkfun.com/products/12064
+ */
+
+#ifndef HTU21D_H
+#define HTU21D_H
+
+/**
+ * Includes
+ */
+#include "mbed.h"
+
+/**
+ * Defines
+ */
+// Acquired from Datasheet.
+
+#define HTU21D_I2C_ADDRESS 0x40
+#define TRIGGER_TEMP_MEASURE 0xE3
+#define TRIGGER_HUMD_MEASURE 0xE5
+
+
+//Commands.
+#define HTU21D_EEPROM_WRITE 0x80
+#define HTU21D_EEPROM_READ 0x81
+
+
+/**
+ * Honeywell HTU21D digital humidity and temperature sensor.
+ */
+class HTU21D {
+
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param sda mbed pin to use for SDA line of I2C interface.
+ * @param scl mbed pin to use for SCL line of I2C interface.
+ */
+ HTU21D(PinName sda, PinName scl);
+
+
+ //Samples the temperature, input void, outputs an int in celcius.
+ int sample_ctemp(void);
+
+ //Samples the temperature, input void, outputs an int in fahrenheit.
+ int sample_ftemp(void);
+
+ //Samples the temperature, input void, outputs an int in kelvin.
+ int sample_ktemp(void);
+
+ //Samples the humidity, input void, outputs and int.
+ int sample_humid(void);
+
+
+
+private:
+
+ I2C* i2c_;
+
+ /**
+ * Write to EEPROM or RAM on the device.
+ *
+ * @param EepromOrRam 0x80 -> Writing to EEPROM
+ * @param address Address to write to.
+ * @param data Data to write.
+ */
+ void write(int EepromOrRam, int address, int data);
+
+ /**
+ * Read EEPROM or RAM on the device.
+ *
+ * @param EepromOrRam 0x81 -> Reading from EEPROM
+ * @param address Address to read from.
+ * @return The contents of the memory address.
+ */
+ int read(int EepromOrRam, int address);
+
+};
+
+#endif /* HTU21D_H */
HTU21D Temperature and Humidity Sensor