標題:
SHT30-31-35手冊CAD模型,Arduino源代碼等資料
[打印本頁]
作者:
xiaoxiao365
時間:
2019-11-19 19:37
標題:
SHT30-31-35手冊CAD模型,Arduino源代碼等資料
SHT30-31-35資料
51hei.png
(7.52 KB, 下載次數(shù): 89)
下載附件
2019-11-20 11:19 上傳
51hei.png
(4.87 KB, 下載次數(shù): 77)
下載附件
2019-11-20 11:19 上傳
單片機源程序如下:
#include <Wire.h>
#include "ClosedCube_SHT3XD.h"
ClosedCube_SHT3XD::ClosedCube_SHT3XD()
{
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::begin(uint8_t address) {
SHT3XD_ErrorCode error = NO_ERROR;
_address = address;
Wire.begin();
return error;
}
SHT3XD ClosedCube_SHT3XD::periodicFetchData()
{
SHT3XD_ErrorCode error = writeCommand(CMD_FETCH_DATA);
if (error == NO_ERROR)
return readTemperatureAndHumidity();
else
returnError(error);
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::periodicStop() {
return writeCommand(CMD_STOP_PERIODIC);
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::periodicStart(SHT3XD_Repeatability repeatability, SHT3XD_Frequency frequency)
{
SHT3XD_ErrorCode error;
switch (repeatability)
{
case REPEATABILITY_LOW:
switch (frequency)
{
case FREQUENCY_HZ5:
error = writeCommand(CMD_PERIODIC_HALF_L);
break;
case FREQUENCY_1HZ:
error = writeCommand(CMD_PERIODIC_1_L);
break;
case FREQUENCY_2HZ:
error = writeCommand(CMD_PERIODIC_2_L);
break;
case FREQUENCY_4HZ:
error = writeCommand(CMD_PERIODIC_4_L);
break;
case FREQUENCY_10HZ:
error = writeCommand(CMD_PERIODIC_10_L);
break;
default:
error = PARAM_WRONG_FREQUENCY;
break;
}
break;
case REPEATABILITY_MEDIUM:
switch (frequency)
{
case FREQUENCY_HZ5:
error = writeCommand(CMD_PERIODIC_HALF_M);
break;
case FREQUENCY_1HZ:
error = writeCommand(CMD_PERIODIC_1_M);
break;
case FREQUENCY_2HZ:
error = writeCommand(CMD_PERIODIC_2_M);
break;
case FREQUENCY_4HZ:
error = writeCommand(CMD_PERIODIC_4_M);
break;
case FREQUENCY_10HZ:
error = writeCommand(CMD_PERIODIC_10_M);
break;
default:
error = PARAM_WRONG_FREQUENCY;
break;
}
break;
case REPEATABILITY_HIGH:
switch (frequency)
{
case FREQUENCY_HZ5:
error = writeCommand(CMD_PERIODIC_HALF_H);
break;
case FREQUENCY_1HZ:
error = writeCommand(CMD_PERIODIC_1_H);
break;
case FREQUENCY_2HZ:
error = writeCommand(CMD_PERIODIC_2_H);
break;
case FREQUENCY_4HZ:
error = writeCommand(CMD_PERIODIC_4_H);
break;
case FREQUENCY_10HZ:
error = writeCommand(CMD_PERIODIC_10_H);
break;
default:
error = PARAM_WRONG_FREQUENCY;
break;
}
break;
default:
error = PARAM_WRONG_REPEATABILITY;
break;
}
return error;
}
SHT3XD ClosedCube_SHT3XD::readTempAndHumidity(SHT3XD_Repeatability repeatability, SHT3XD_Mode mode, uint8_t timeout)
{
SHT3XD result;
switch (mode) {
case MODE_CLOCK_STRETCH:
result = readTempAndHumidityClockStretch(repeatability);
break;
case MODE_POLLING:
result = readTempAndHumidityPolling(repeatability, timeout);
break;
default:
result = returnError(PARAM_WRONG_MODE);
break;
}
return result;
}
SHT3XD ClosedCube_SHT3XD::readTempAndHumidityClockStretch(SHT3XD_Repeatability repeatability)
{
SHT3XD_ErrorCode error = NO_ERROR;
SHT3XD_Commands command;
switch (repeatability)
{
case REPEATABILITY_LOW:
error = writeCommand(CMD_CLOCK_STRETCH_L);
break;
case REPEATABILITY_MEDIUM:
error = writeCommand(CMD_CLOCK_STRETCH_M);
break;
case REPEATABILITY_HIGH:
error = writeCommand(CMD_CLOCK_STRETCH_H);
break;
default:
error = PARAM_WRONG_REPEATABILITY;
break;
}
if (error == NO_ERROR) {
return readTemperatureAndHumidity();
}
else {
return returnError(error);
}
}
SHT3XD ClosedCube_SHT3XD::readTempAndHumidityPolling(SHT3XD_Repeatability repeatability, uint8_t timeout)
{
SHT3XD_ErrorCode error = NO_ERROR;
SHT3XD_Commands command;
switch (repeatability)
{
case REPEATABILITY_LOW:
error = writeCommand(CMD_POLLING_L);
break;
case REPEATABILITY_MEDIUM:
error = writeCommand(CMD_POLLING_M);
break;
case REPEATABILITY_HIGH:
error = writeCommand(CMD_POLLING_H);
break;
default:
error = PARAM_WRONG_REPEATABILITY;
break;
}
if (error == NO_ERROR) {
return readTemperatureAndHumidity();
}
else {
return returnError(error);
}
}
SHT3XD ClosedCube_SHT3XD::readAlertHighSet() {
return readAlertData(CMD_READ_ALR_LIMIT_HS);
}
SHT3XD ClosedCube_SHT3XD::readAlertHighClear() {
return readAlertData(CMD_READ_ALR_LIMIT_HC);
}
SHT3XD ClosedCube_SHT3XD::readAlertLowSet() {
return readAlertData(CMD_READ_ALR_LIMIT_LS);
}
SHT3XD ClosedCube_SHT3XD::readAlertLowClear() {
return readAlertData(CMD_READ_ALR_LIMIT_LC);
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::writeAlertHigh(float temperatureSet, float temperatureClear, float humiditySet, float humidityClear) {
SHT3XD_ErrorCode error = writeAlertData(CMD_WRITE_ALR_LIMIT_HS, temperatureSet, humiditySet);
if (error == NO_ERROR)
error = writeAlertData(CMD_WRITE_ALR_LIMIT_HC, temperatureClear, humidityClear);
return error;
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::writeAlertLow(float temperatureClear, float temperatureSet, float humidityClear, float humiditySet) {
SHT3XD_ErrorCode error = writeAlertData(CMD_WRITE_ALR_LIMIT_LS, temperatureSet, humiditySet);
if (error == NO_ERROR)
writeAlertData(CMD_WRITE_ALR_LIMIT_LC, temperatureClear, humidityClear);
return error;
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::writeAlertData(SHT3XD_Commands command, float temperature, float humidity)
{
SHT3XD_ErrorCode error;
if ((humidity < 0.0) || (humidity > 100.0) || (temperature < -40.0) || (temperature > 125.0))
{
error = PARAM_WRONG_ALERT;
}
else
{
uint16_t rawTemperature = calculateRaWTemperature(temperature);
uint16_t rawHumidity = calculateRawHumidity(humidity);
uint16_t data = (rawHumidity & 0xFE00) | ((rawTemperature >> 7) & 0x001FF);
uint8_t buf[2];
buf[0] = data >> 8;
buf[1] = data & 0xFF;
uint8_t checksum = calculateCrc(buf);
Wire.beginTransmission(_address);
Wire.write(command >> 8);
Wire.write(command & 0xFF);
Wire.write(buf[0]);
Wire.write(buf[1]);
Wire.write(checksum);
return (SHT3XD_ErrorCode)(-10 * Wire.endTransmission());
}
return error;
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::writeCommand(SHT3XD_Commands command)
{
Wire.beginTransmission(_address);
Wire.write(command >> 8);
Wire.write(command & 0xFF);
return (SHT3XD_ErrorCode)(-10 * Wire.endTransmission());
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::softReset() {
return writeCommand(CMD_SOFT_RESET);
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::generalCallReset() {
Wire.beginTransmission(0x0);
Wire.write(0x06);
return (SHT3XD_ErrorCode)(-10 * Wire.endTransmission());
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::heaterEnable() {
return writeCommand(CMD_HEATER_ENABLE);
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::heaterDisable() {
return writeCommand(CMD_HEATER_DISABLE);
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::artEnable() {
return writeCommand(CMD_ART);
}
uint32_t ClosedCube_SHT3XD::readSerialNumber()
{
uint32_t result = NO_ERROR;
uint16_t buf[2];
if (writeCommand(CMD_READ_SERIAL_NUMBER) == NO_ERROR) {
if (read(buf, 2) == NO_ERROR) {
result = (buf[0] << 16) | buf[1];
}
}
return result;
}
SHT3XD_RegisterStatus ClosedCube_SHT3XD::readStatusRegister()
{
SHT3XD_RegisterStatus result;
SHT3XD_ErrorCode error = writeCommand(CMD_READ_STATUS);
if (error == NO_ERROR)
error = read(&result.rawData, 1);
return result;
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::clearAll() {
return writeCommand(CMD_CLEAR_STATUS);
}
SHT3XD ClosedCube_SHT3XD::readTemperatureAndHumidity()
{
SHT3XD result;
result.t = 0;
result.rh = 0;
SHT3XD_ErrorCode error;
uint16_t buf[2];
if (error == NO_ERROR)
error = read(buf, 2);
if (error == NO_ERROR) {
result.t = calculateTemperature(buf[0]);
result.rh = calculateHumidity(buf[1]);
}
result.error = error;
return result;
}
SHT3XD ClosedCube_SHT3XD::readAlertData(SHT3XD_Commands command)
{
SHT3XD result;
result.t = 0;
result.rh = 0;
SHT3XD_ErrorCode error;
uint16_t buf[1];
error = writeCommand(command);
if (error == NO_ERROR)
error = read(buf, 1);
if (error == NO_ERROR) {
result.rh = calculateHumidity(buf[0] << 7);
result.t = calculateTemperature(buf[0] & 0xFE00);
}
result.error = error;
return result;
}
SHT3XD_ErrorCode ClosedCube_SHT3XD::read(uint16_t* data, uint8_t numOfPair)
{
uint8_t buf[2];
uint8_t checksum;
const uint8_t numOfBytes = numOfPair * 3;
Wire.beginTransmission(_address);
Wire.requestFrom(_address, numOfBytes);
int counter = 0;
while (Wire.available() < numOfBytes)
{
counter++;
delay(50);
if (counter > 100)
return TIMEOUT_ERROR;
}
for (counter = 0; counter < numOfPair; counter++) {
Wire.readBytes(buf, 2);
checksum = Wire.read();
if (checkCrc(buf, checksum) != 0)
return CRC_ERROR;
data[counter] = (buf[0] << 8) | buf[1];
}
Wire.endTransmission();
return NO_ERROR;
}
uint8_t ClosedCube_SHT3XD::checkCrc(uint8_t data[], uint8_t checksum)
{
return calculateCrc(data) != checksum;
}
float ClosedCube_SHT3XD::calculateTemperature(uint16_t rawValue)
{
return 175.0f * (float)rawValue / 65535.0f - 45.0f;
}
float ClosedCube_SHT3XD::calculateHumidity(uint16_t rawValue)
{
return 100.0f * rawValue / 65535.0f;
}
uint16_t ClosedCube_SHT3XD::calculateRaWTemperature(float value)
{
return (value + 45.0f) / 175.0f * 65535.0f;
}
uint16_t ClosedCube_SHT3XD::calculateRawHumidity(float value)
{
return value / 100.0f * 65535.0f;
}
uint8_t ClosedCube_SHT3XD::calculateCrc(uint8_t data[])
{
uint8_t bit;
uint8_t crc = 0xFF;
uint8_t dataCounter = 0;
for (; dataCounter < 2; dataCounter++)
{
crc ^= (data[dataCounter]);
for (bit = 8; bit > 0; --bit)
{
if (crc & 0x80)
crc = (crc << 1) ^ 0x131;
else
crc = (crc << 1);
}
}
return crc;
}
SHT3XD ClosedCube_SHT3XD::returnError(SHT3XD_ErrorCode error) {
SHT3XD result;
result.t = 0;
result.rh = 0;
result.error = error;
return result;
}
復制代碼
所有資料51hei提供下載:
SHT30-31-35全套資料.zip
(3 MB, 下載次數(shù): 35)
2019-11-19 19:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
jzhok
時間:
2019-12-23 19:56
謝謝分享。。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1