136 lines
3.8 KiB
C++
136 lines
3.8 KiB
C++
/***************************************************
|
|
This is a library for the SHT31 Digital Humidity & Temp Sensor
|
|
|
|
Designed specifically to work with the SHT31 Digital sensor from Adafruit
|
|
----> https://www.adafruit.com/products/2857
|
|
|
|
These sensors use I2C to communicate, 2 pins are required to interface
|
|
Adafruit invests time and resources providing this open source code,
|
|
please support Adafruit and open-source hardware by purchasing
|
|
products from Adafruit!
|
|
|
|
Written by Limor Fried/Ladyada for Adafruit Industries.
|
|
BSD license, all text above must be included in any redistribution
|
|
****************************************************/
|
|
|
|
#ifndef ADAFRUIT_SHT31_H
|
|
#define ADAFRUIT_SHT31_H
|
|
|
|
#include "Arduino.h"
|
|
#include "Wire.h"
|
|
|
|
#define SHT31_DEFAULT_ADDR 0x44
|
|
#define SHT31_MEAS_HIGHREP_STRETCH 0x2C06
|
|
#define SHT31_MEAS_MEDREP_STRETCH 0x2C0D
|
|
#define SHT31_MEAS_LOWREP_STRETCH 0x2C10
|
|
#define SHT31_MEAS_HIGHREP 0x2400
|
|
#define SHT31_MEAS_MEDREP 0x240B
|
|
#define SHT31_MEAS_LOWREP 0x2416
|
|
#define SHT31_READSTATUS 0xF32D
|
|
#define SHT31_CLEARSTATUS 0x3041
|
|
#define SHT31_SOFTRESET 0x30A2
|
|
#define SHT31_HEATEREN 0x306D
|
|
#define SHT31_HEATERDIS 0x3066
|
|
|
|
/**
|
|
* Driver for the Adafruit SHT31-D Temperature and Humidity breakout board.
|
|
*/
|
|
class Adafruit_SHT31 {
|
|
public:
|
|
/**
|
|
* Constructor.
|
|
*/
|
|
Adafruit_SHT31();
|
|
|
|
/**
|
|
* Initialises the I2C bus, and assigns the I2C address to us.
|
|
*
|
|
* @param i2caddr The I2C address to use for the sensor.
|
|
*
|
|
* @return True if initialisation was successful, otherwise False.
|
|
*/
|
|
boolean begin(uint8_t i2caddr = SHT31_DEFAULT_ADDR);
|
|
|
|
/**
|
|
* Gets a single temperature reading from the sensor.
|
|
*
|
|
* @return A float value indicating the temperature.
|
|
*/
|
|
float readTemperature(void);
|
|
|
|
/**
|
|
* Gets a single relative humidity reading from the sensor.
|
|
*
|
|
* @return A float value representing relative humidity.
|
|
*/
|
|
float readHumidity(void);
|
|
|
|
/**
|
|
* Gets the current status register contents.
|
|
*
|
|
* @return The 16-bit status register.
|
|
*/
|
|
uint16_t readStatus(void);
|
|
|
|
/**
|
|
* Performs a reset of the sensor to put it into a known state.
|
|
*/
|
|
void reset(void);
|
|
|
|
/**
|
|
* Enables or disabled the heating element.
|
|
*
|
|
* @param h True to enable the heater, False to disable it.
|
|
*/
|
|
void heater(boolean h);
|
|
|
|
/**
|
|
* Performs a CRC8 calculation on the supplied values.
|
|
*
|
|
* @param data Pointer to the data to use when calculating the CRC8.
|
|
* @param len The number of bytes in 'data'.
|
|
*
|
|
* @return The computed CRC8 value.
|
|
*/
|
|
uint8_t crc8(const uint8_t *data, int len);
|
|
|
|
private:
|
|
/**
|
|
* Placeholder to track the I2C address.
|
|
*/
|
|
uint8_t _i2caddr;
|
|
|
|
/**
|
|
* Placeholder to track humidity internally.
|
|
*/
|
|
float humidity;
|
|
|
|
/**
|
|
* Placeholder to track temperature internally.
|
|
*/
|
|
float temp;
|
|
|
|
/**
|
|
* Internal function to perform a temp + humidity read.
|
|
*
|
|
* @return True if successful, otherwise false.
|
|
*/
|
|
boolean readTempHum(void);
|
|
|
|
/**
|
|
* Internal function to perform and I2C write.
|
|
*
|
|
* @param cmd The 16-bit command ID to send.
|
|
*/
|
|
void writeCommand(uint16_t cmd);
|
|
|
|
/**
|
|
* Internal function to read data over the I2C bus.
|
|
*
|
|
* @return True if successful, otherwise False.
|
|
*/
|
|
boolean readData(void);
|
|
};
|
|
|
|
#endif
|