Simple temperature and humidity program example for Hexiwear featuring UART

Fork of HTU21D by Alex Lipford

This project demonstrates the use of the HTU21D temperature and humidity sensor embedded in Hexiwear

Open a Hyperterminal tool on your computer and connect it to the "mbed Serial port (COMxx)" with Baud rate "9600bps"

Compile the project and copy the binary "Hexi_Humid_Temp_Example_HEXIWEAR.bin" in the DAP-LINK drive from your computer file explorer Press the K64F-RESET button on the docking station to start the program on your board

Every 500ms the value of the Temperature and Humidity will be displayed in the Hyperterminal window and the LED will blink Green

Committer:
alipford3
Date:
Sun Oct 19 19:27:19 2014 +0000
Revision:
2:4fd07be6bad8
Parent:
1:d7568a103ef5
Child:
3:caccf1879f14
An updated, basic library to interface with the HTU21D temperature and humidity sensor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hwing91 0:db86ad1b4459 1 /**
alipford3 2:4fd07be6bad8 2 * @author Alex Lipford
alipford3 2:4fd07be6bad8 3 * Georgia Institute of Technology
alipford3 2:4fd07be6bad8 4 * ECE 4180 Embeded Systems Design
hwing91 0:db86ad1b4459 5 * Professor Hamblen
alipford3 2:4fd07be6bad8 6 * 10/19/2014
hwing91 0:db86ad1b4459 7 *
hwing91 0:db86ad1b4459 8 * @section LICENSE
hwing91 0:db86ad1b4459 9 * ----------------------------------------------------------------------------
hwing91 0:db86ad1b4459 10 * "THE BEER-WARE LICENSE" (Revision 42):
alipford3 2:4fd07be6bad8 11 * <alexlipford@gmail.com> wrote this file. As long as you retain this notice you
hwing91 0:db86ad1b4459 12 * can do whatever you want with this stuff. If we meet some day, and you think
hwing91 0:db86ad1b4459 13 * this stuff is worth it, you can buy me a beer in return.
hwing91 0:db86ad1b4459 14 * ----------------------------------------------------------------------------
hwing91 0:db86ad1b4459 15 *
hwing91 0:db86ad1b4459 16 *
hwing91 0:db86ad1b4459 17 * @section DESCRIPTION
hwing91 0:db86ad1b4459 18 *
hwing91 0:db86ad1b4459 19 * HTU21D Humidity and Temperature sensor.
hwing91 0:db86ad1b4459 20 *
hwing91 0:db86ad1b4459 21 * Datasheet, specs, and information:
hwing91 0:db86ad1b4459 22 *
hwing91 0:db86ad1b4459 23 * https://www.sparkfun.com/products/12064
hwing91 0:db86ad1b4459 24 */
hwing91 0:db86ad1b4459 25
hwing91 0:db86ad1b4459 26 /**
hwing91 0:db86ad1b4459 27 * Includes
hwing91 0:db86ad1b4459 28 */
hwing91 0:db86ad1b4459 29 #include "HTU21D.h"
hwing91 0:db86ad1b4459 30
hwing91 0:db86ad1b4459 31 HTU21D::HTU21D(PinName sda, PinName scl) {
hwing91 0:db86ad1b4459 32
hwing91 0:db86ad1b4459 33 i2c_ = new I2C(sda, scl);
hwing91 0:db86ad1b4459 34 //400KHz, as specified by the datasheet.
hwing91 0:db86ad1b4459 35 i2c_->frequency(400000);
hwing91 0:db86ad1b4459 36
hwing91 0:db86ad1b4459 37
hwing91 0:db86ad1b4459 38
hwing91 0:db86ad1b4459 39 }
hwing91 0:db86ad1b4459 40
hwing91 0:db86ad1b4459 41 int HTU21D::sample_ctemp(void) {
hwing91 0:db86ad1b4459 42
hwing91 0:db86ad1b4459 43 char tx[1];
hwing91 0:db86ad1b4459 44 char rx[2];
hwing91 0:db86ad1b4459 45
hwing91 0:db86ad1b4459 46 tx[0] = TRIGGER_TEMP_MEASURE; // Triggers a temperature measure by feeding correct opcode.
hwing91 0:db86ad1b4459 47 i2c_->write((HTU21D_I2C_ADDRESS << 1) & 0xFE, tx, 1);
alipford3 2:4fd07be6bad8 48 wait_ms(50); // Per datasheet, wait long enough for device to sample temperature
hwing91 0:db86ad1b4459 49
hwing91 0:db86ad1b4459 50 // Reads triggered measure
hwing91 0:db86ad1b4459 51 i2c_->read((HTU21D_I2C_ADDRESS << 1) | 0x01, rx, 2);
alipford3 2:4fd07be6bad8 52 wait_ms(1);
hwing91 0:db86ad1b4459 53
hwing91 0:db86ad1b4459 54 // Algorithm from datasheet to compute temperature.
hwing91 0:db86ad1b4459 55 unsigned int rawTemperature = ((unsigned int) rx[0] << 8) | (unsigned int) rx[1];
hwing91 0:db86ad1b4459 56 rawTemperature &= 0xFFFC;
hwing91 0:db86ad1b4459 57
hwing91 0:db86ad1b4459 58 float tempTemperature = rawTemperature / (float)65536; //2^16 = 65536
hwing91 0:db86ad1b4459 59 float realTemperature = -46.85 + (175.72 * tempTemperature); //From page 14
hwing91 0:db86ad1b4459 60
hwing91 0:db86ad1b4459 61 return (int)realTemperature;
hwing91 0:db86ad1b4459 62
hwing91 0:db86ad1b4459 63 }
hwing91 0:db86ad1b4459 64
hwing91 0:db86ad1b4459 65 int HTU21D::sample_ftemp(void){
hwing91 0:db86ad1b4459 66 int temptemp = sample_ctemp();
hwing91 0:db86ad1b4459 67 int ftemp = temptemp * 1.8 + 32;
hwing91 0:db86ad1b4459 68
hwing91 0:db86ad1b4459 69 return ftemp;
hwing91 0:db86ad1b4459 70 }
hwing91 0:db86ad1b4459 71
hwing91 0:db86ad1b4459 72 int HTU21D::sample_ktemp(void){
hwing91 0:db86ad1b4459 73 int temptemp = sample_ctemp();
hwing91 0:db86ad1b4459 74 int ktemp = temptemp + 274;
hwing91 0:db86ad1b4459 75
hwing91 0:db86ad1b4459 76 return ktemp;
hwing91 0:db86ad1b4459 77
hwing91 0:db86ad1b4459 78
hwing91 0:db86ad1b4459 79 }
hwing91 0:db86ad1b4459 80
hwing91 0:db86ad1b4459 81 int HTU21D::sample_humid(void) {
hwing91 0:db86ad1b4459 82
hwing91 0:db86ad1b4459 83 char tx[1];
hwing91 0:db86ad1b4459 84 char rx[2];
hwing91 0:db86ad1b4459 85
hwing91 0:db86ad1b4459 86
hwing91 0:db86ad1b4459 87 tx[0] = TRIGGER_HUMD_MEASURE; // Triggers a humidity measure by feeding correct opcode.
hwing91 0:db86ad1b4459 88 i2c_->write((HTU21D_I2C_ADDRESS << 1) & 0xFE, tx, 1);
alipford3 2:4fd07be6bad8 89 wait_ms(16); // Per datasheet, wait long enough for device to sample humidity
hwing91 0:db86ad1b4459 90
hwing91 0:db86ad1b4459 91 // Reads triggered measure
hwing91 0:db86ad1b4459 92 i2c_->read((HTU21D_I2C_ADDRESS << 1) | 0x01, rx, 2);
hwing91 0:db86ad1b4459 93 wait_ms(1);
hwing91 0:db86ad1b4459 94
hwing91 0:db86ad1b4459 95 //Algorithm from datasheet.
hwing91 0:db86ad1b4459 96 unsigned int rawHumidity = ((unsigned int) rx[0] << 8) | (unsigned int) rx[1];
hwing91 0:db86ad1b4459 97
hwing91 0:db86ad1b4459 98 rawHumidity &= 0xFFFC; //Zero out the status bits but keep them in place
hwing91 0:db86ad1b4459 99
hwing91 0:db86ad1b4459 100 //Given the raw humidity data, calculate the actual relative humidity
hwing91 0:db86ad1b4459 101 float tempRH = rawHumidity / (float)65536; //2^16 = 65536
hwing91 0:db86ad1b4459 102 float rh = -6 + (125 * tempRH); //From page 14
hwing91 0:db86ad1b4459 103
hwing91 0:db86ad1b4459 104
hwing91 0:db86ad1b4459 105 return (int)rh;
hwing91 0:db86ad1b4459 106
hwing91 0:db86ad1b4459 107 }
hwing91 0:db86ad1b4459 108