SHT30-31-35資料
51hei.png (7.52 KB, 下載次數: 89)
下載附件
2019-11-20 11:19 上傳
51hei.png (4.87 KB, 下載次數: 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, 下載次數: 35)
2019-11-19 19:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|