mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
- fixed issue #123
This commit is contained in:
parent
3eaf92ee24
commit
9d714913c7
@ -1,13 +1,17 @@
|
|||||||
//
|
//
|
||||||
// FILE: SHT31.cpp
|
// FILE: SHT31.cpp
|
||||||
// AUTHOR: Rob Tillaart
|
// AUTHOR: Rob Tillaart
|
||||||
// VERSION: 0.1.0
|
// VERSION: 0.1.2
|
||||||
// DATE: 2019-02-08
|
// DATE: 2019-02-08
|
||||||
// PURPOSE: Class for SHT31 I2C temperature humidity sensor
|
// PURPOSE: Class for SHT31 I2C temperature humidity sensor
|
||||||
// https://www.adafruit.com/product/2857
|
// https://www.adafruit.com/product/2857
|
||||||
//
|
//
|
||||||
// HISTORY:
|
// HISTORY:
|
||||||
// 0.1.0 - 2019-02-08 initial version
|
// 0.1.0 - 2019-02-08 initial version
|
||||||
|
// 0.1.1 - 2019-02-18 add description readStatus(),
|
||||||
|
// async interface
|
||||||
|
// 0.1.2 - 2019-03-05 fix issue #123 - error in humidity
|
||||||
|
// stable version
|
||||||
//
|
//
|
||||||
// Released to the public domain
|
// Released to the public domain
|
||||||
//
|
//
|
||||||
@ -16,7 +20,8 @@
|
|||||||
|
|
||||||
#define SHT31_READ_STATUS 0xF32D
|
#define SHT31_READ_STATUS 0xF32D
|
||||||
#define SHT31_CLEAR_STATUS 0x3041
|
#define SHT31_CLEAR_STATUS 0x3041
|
||||||
#define SHT31_RESET 0x30A2
|
#define SHT31_SOFT_RESET 0x30A2
|
||||||
|
#define SHT31_HARD_RESET 0x0006
|
||||||
#define SHT31_MEASUREMENT_FAST 0x2416
|
#define SHT31_MEASUREMENT_FAST 0x2416
|
||||||
#define SHT31_MEASUREMENT_SLOW 0x2400
|
#define SHT31_MEASUREMENT_SLOW 0x2400
|
||||||
#define SHT31_HEAT_ON 0x306D
|
#define SHT31_HEAT_ON 0x306D
|
||||||
@ -54,15 +59,16 @@ bool SHT31::read(bool fast)
|
|||||||
writeCmd(SHT31_MEASUREMENT_SLOW);
|
writeCmd(SHT31_MEASUREMENT_SLOW);
|
||||||
delay(15); // table 4 datasheet
|
delay(15); // table 4 datasheet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO 5 read bytes would be sufficient when not fast / no CRC...
|
||||||
readBytes(6, (uint8_t*) &buffer[0]);
|
readBytes(6, (uint8_t*) &buffer[0]);
|
||||||
|
|
||||||
if (!fast)
|
if (!fast)
|
||||||
{
|
{
|
||||||
// TODO 5 read bytes would be sufficient when not fast...
|
|
||||||
// TODO check CRC here
|
// TODO check CRC here
|
||||||
// TODO rv = false;
|
// TODO rv = false;
|
||||||
}
|
}
|
||||||
float raw = (buffer[0] << 8) + buffer[1];
|
uint16_t raw = (buffer[0] << 8) + buffer[1];
|
||||||
temperature = raw * (175.0 / 65535) - 45;
|
temperature = raw * (175.0 / 65535) - 45;
|
||||||
raw = (buffer[3] << 8) + buffer[4];
|
raw = (buffer[3] << 8) + buffer[4];
|
||||||
humidity = raw * (100.0 / 65535);
|
humidity = raw * (100.0 / 65535);
|
||||||
@ -76,16 +82,44 @@ uint16_t SHT31::readStatus()
|
|||||||
{
|
{
|
||||||
uint32_t status = 0;
|
uint32_t status = 0;
|
||||||
|
|
||||||
writeCmd(SHT31_READ_STATUS);
|
writeCmd(SHT31_READ_STATUS); // page 13 datasheet
|
||||||
readBytes(3, (uint8_t*) &status);
|
readBytes(3, (uint8_t*) &status); // 16 bit status + CRC
|
||||||
|
// TODO CRC check
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
|
// bit - description
|
||||||
|
// ==================
|
||||||
|
// 15 Alert pending status
|
||||||
|
// '0': no pending alerts
|
||||||
|
// '1': at least one pending alert - default
|
||||||
|
// 14 Reserved ‘0’
|
||||||
|
// 13 Heater status
|
||||||
|
// '0’ : Heater OFF - default
|
||||||
|
// '1’ : Heater ON
|
||||||
|
// 12 Reserved '0’
|
||||||
|
// 11 Humidity tracking alert
|
||||||
|
// '0’ : no alert - default
|
||||||
|
// '1’ : alert
|
||||||
|
// 10 Temp tracking alert
|
||||||
|
// '0’ : no alert - default
|
||||||
|
// '1’ : alert
|
||||||
|
// 9:5 Reserved '00000’
|
||||||
|
// 4 System reset detected
|
||||||
|
// '0': no reset since last ‘clear status register’ command
|
||||||
|
// '1': reset detected (hard or soft reset command or supply fail)
|
||||||
|
// 3:2 Reserved ‘00’
|
||||||
|
// 1 Command status
|
||||||
|
// '0': last cmd executed successfully
|
||||||
|
// '1': last cmd not processed. Invalid or failed checksum
|
||||||
|
// 0 Write data checksum status
|
||||||
|
// '0': checksum of last write correct
|
||||||
|
// '1': checksum of last write transfer failed
|
||||||
}
|
}
|
||||||
|
|
||||||
// hard reset 0x0006 on addr 0x00 see datasheet
|
|
||||||
void SHT31::reset()
|
void SHT31::reset()
|
||||||
{
|
{
|
||||||
writeCmd(SHT31_RESET);
|
writeCmd(SHT31_SOFT_RESET); // SHT31_HARD_RESET not implemented yet
|
||||||
delay(1); // table 4 datasheet
|
delay(1); // table 4 datasheet // 100ms for hardreset
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHT31::heatOn()
|
void SHT31::heatOn()
|
||||||
@ -98,6 +132,30 @@ void SHT31::heatOff()
|
|||||||
writeCmd(SHT31_HEAT_OFF);
|
writeCmd(SHT31_HEAT_OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SHT31::requestData()
|
||||||
|
{
|
||||||
|
writeCmd(SHT31_MEASUREMENT_SLOW);
|
||||||
|
_lastRequest = millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHT31::dataReady()
|
||||||
|
{
|
||||||
|
return ((millis() - _lastRequest) > 15);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHT31::readData()
|
||||||
|
{
|
||||||
|
uint8_t buffer[6];
|
||||||
|
readBytes(6, (uint8_t*) &buffer[0]);
|
||||||
|
|
||||||
|
float raw = (buffer[0] << 8) + buffer[1];
|
||||||
|
temperature = raw * (175.0 / 65535) - 45;
|
||||||
|
raw = (buffer[3] << 8) + buffer[4];
|
||||||
|
humidity = raw * (100.0 / 65535);
|
||||||
|
|
||||||
|
_lastRead = millis();
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void SHT31::writeCmd(uint16_t cmd)
|
void SHT31::writeCmd(uint16_t cmd)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// FILE: SHT31.h
|
// FILE: SHT31.h
|
||||||
// AUTHOR: Rob Tillaart
|
// AUTHOR: Rob Tillaart
|
||||||
// VERSION: 0.1.0
|
// VERSION: 0.1.2
|
||||||
// DATE: 2019-02-08
|
// DATE: 2019-02-08
|
||||||
// PURPOSE: Class for SHT31 I2C temperature humidity sensor
|
// PURPOSE: Class for SHT31 I2C temperature humidity sensor
|
||||||
// https://www.adafruit.com/product/2857
|
// https://www.adafruit.com/product/2857
|
||||||
@ -16,7 +16,7 @@
|
|||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include "Wire.h"
|
#include "Wire.h"
|
||||||
|
|
||||||
#define SHT31_LIB_VERSION "0.1.0"
|
#define SHT31_LIB_VERSION "0.1.2"
|
||||||
|
|
||||||
class SHT31
|
class SHT31
|
||||||
{
|
{
|
||||||
@ -33,18 +33,28 @@ public:
|
|||||||
uint32_t lastRead() { return _lastRead; };
|
uint32_t lastRead() { return _lastRead; };
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
|
// do not use heater for long periods,
|
||||||
|
// use it for max 3 minutes to heat up
|
||||||
|
// and let it cool down an equal period.
|
||||||
void heatOn();
|
void heatOn();
|
||||||
void heatOff();
|
void heatOff();
|
||||||
|
|
||||||
float humidity;
|
float humidity;
|
||||||
float temperature;
|
float temperature;
|
||||||
|
|
||||||
|
// ASYNC INTERFACE
|
||||||
|
void requestData();
|
||||||
|
bool dataReady();
|
||||||
|
void readData();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void writeCmd(uint16_t cmd);
|
void writeCmd(uint16_t cmd);
|
||||||
void readBytes(uint8_t n, uint8_t *val);
|
void readBytes(uint8_t n, uint8_t *val);
|
||||||
|
|
||||||
uint8_t _addr;
|
uint8_t _addr;
|
||||||
uint32_t _lastRead;
|
uint32_t _lastRead;
|
||||||
|
uint32_t _lastRequest; // for async interface
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
54
libraries/SHT31/examples/SHT31_async/SHT31_async.ino
Normal file
54
libraries/SHT31/examples/SHT31_async/SHT31_async.ino
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
//
|
||||||
|
// FILE: SHT31_I2Cspeed
|
||||||
|
// AUTHOR: Rob Tillaart
|
||||||
|
// VERSION: 0.0.1
|
||||||
|
// PURPOSE: demo
|
||||||
|
//
|
||||||
|
// HISTORY:
|
||||||
|
|
||||||
|
#include "Wire.h"
|
||||||
|
#include "SHT31.h"
|
||||||
|
|
||||||
|
uint32_t start;
|
||||||
|
uint32_t stop;
|
||||||
|
|
||||||
|
SHT31 sht;
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
Serial.begin(115200);
|
||||||
|
Serial.println(__FILE__);
|
||||||
|
Serial.print("SHT31_LIB_VERSION: \t");
|
||||||
|
Serial.println(SHT31_LIB_VERSION);
|
||||||
|
|
||||||
|
Wire.begin();
|
||||||
|
sht.begin(0x44);
|
||||||
|
Wire.setClock(100000);
|
||||||
|
uint16_t stat = sht.readStatus();
|
||||||
|
Serial.print(stat, HEX);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
for (uint32_t I2Cfreq = 100000; I2Cfreq < 900000; I2Cfreq += 50000)
|
||||||
|
{
|
||||||
|
Serial.print(I2Cfreq/1000);
|
||||||
|
Wire.setClock(I2Cfreq);
|
||||||
|
test();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void test()
|
||||||
|
{
|
||||||
|
start = micros();
|
||||||
|
sht.read(true); // default = true/fast slow = false
|
||||||
|
stop = micros();
|
||||||
|
Serial.print("\t");
|
||||||
|
Serial.print(stop - start);
|
||||||
|
Serial.print("\t");
|
||||||
|
Serial.print(sht.temperature, 1);
|
||||||
|
Serial.print("\t");
|
||||||
|
Serial.println(sht.humidity, 1);
|
||||||
|
delay(100);
|
||||||
|
}
|
22
libraries/SHT31/keywords.txt
Normal file
22
libraries/SHT31/keywords.txt
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#######################################
|
||||||
|
# Syntax Coloring Map For AnalogKeypad
|
||||||
|
#######################################
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Datatypes (KEYWORD1)
|
||||||
|
#######################################
|
||||||
|
|
||||||
|
SHT31 KEYWORD1
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Methods and Functions (KEYWORD2)
|
||||||
|
#######################################
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Instances (KEYWORD2)
|
||||||
|
#######################################
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Constants (LITERAL1)
|
||||||
|
#######################################
|
||||||
|
|
@ -15,7 +15,7 @@
|
|||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/RobTillaart/Arduino.git"
|
"url": "https://github.com/RobTillaart/Arduino.git"
|
||||||
},
|
},
|
||||||
"version":"0.1.0",
|
"version":"0.1.2",
|
||||||
"frameworks": "arduino",
|
"frameworks": "arduino",
|
||||||
"platforms": "*",
|
"platforms": "*",
|
||||||
"export": {
|
"export": {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
name=SHT31
|
name=SHT31
|
||||||
version=0.1.0
|
version=0.1.2
|
||||||
author=Rob Tillaart <rob.tillaart@gmail.com>
|
author=Rob Tillaart <rob.tillaart@gmail.com>
|
||||||
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
|
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
|
||||||
sentence=Library for SHT31 Temperature Humidity
|
sentence=Library for SHT31 Temperature Humidity
|
||||||
|
Loading…
Reference in New Issue
Block a user