/** * @file SHT3X_ATY.h * * @param Project DEVICE_GENERAL_ATY_LIB * * @author ATY * * @copyright * - Copyright 2017 - 2026 MZ-ATY * - This code follows: * - MZ-ATY Various Contents Joint Statement - * * https://mengze.top/MZ-ATY_VCJS * - CC 4.0 BY-NC-SA - * * https://creativecommons.org/licenses/by-nc-sa/4.0/ * - Your use will be deemed to have accepted the terms of this statement. * * @brief Dev-style interface for SHT3X temperature & humidity sensor * * @version * - 2_00_251112 > ATY * -# Refactor to Dev-style interface with platform-agnostic callbacks ******************************************************************************** */ #ifndef __SHT3X_ATY_H #define __SHT3X_ATY_H /* * Dev 风格头文件:不直接耦合具体平台头文件。 * 由上层通过回调提供 I2C 读写与延时能力。 */ /* 用户可选的 DEBUG 宏保留为注释,占位: // #define __DEBUG_SHT3X_ATY */ /******************************************************************************/ // Generator polynomial for CRC #define POLYNOMIAL 0x131 // P(x) = x^8 + x^5 + x^4 + 1 = 100110001 // Sensor Commands typedef enum{ CMD_READ_SERIALNBR = 0x3780, // read serial number CMD_READ_STATUS = 0xF32D, // read status register CMD_CLEAR_STATUS = 0x3041, // clear status register CMD_HEATER_ENABLE = 0x306D, // enabled heater CMD_HEATER_DISABLE = 0x3066, // disable heater CMD_SOFT_RESET = 0x30A2, // soft reset CMD_MEAS_CLOCKSTR_H = 0x2C06, // measurement: clock stretching, high repeatability CMD_MEAS_CLOCKSTR_M = 0x2C0D, // measurement: clock stretching, medium repeatability CMD_MEAS_CLOCKSTR_L = 0x2C10, // measurement: clock stretching, low repeatability CMD_MEAS_POLLING_H = 0x2400, // measurement: polling, high repeatability CMD_MEAS_POLLING_M = 0x240B, // measurement: polling, medium repeatability CMD_MEAS_POLLING_L = 0x2416, // measurement: polling, low repeatability CMD_MEAS_PERI_05_H = 0x2032, // measurement: periodic 0.5 mps, high repeatability CMD_MEAS_PERI_05_M = 0x2024, // measurement: periodic 0.5 mps, medium repeatability CMD_MEAS_PERI_05_L = 0x202F, // measurement: periodic 0.5 mps, low repeatability CMD_MEAS_PERI_1_H = 0x2130, // measurement: periodic 1 mps, high repeatability CMD_MEAS_PERI_1_M = 0x2126, // measurement: periodic 1 mps, medium repeatability CMD_MEAS_PERI_1_L = 0x212D, // measurement: periodic 1 mps, low repeatability CMD_MEAS_PERI_2_H = 0x2236, // measurement: periodic 2 mps, high repeatability CMD_MEAS_PERI_2_M = 0x2220, // measurement: periodic 2 mps, medium repeatability CMD_MEAS_PERI_2_L = 0x222B, // measurement: periodic 2 mps, low repeatability CMD_MEAS_PERI_4_H = 0x2334, // measurement: periodic 4 mps, high repeatability CMD_MEAS_PERI_4_M = 0x2322, // measurement: periodic 4 mps, medium repeatability CMD_MEAS_PERI_4_L = 0x2329, // measurement: periodic 4 mps, low repeatability CMD_MEAS_PERI_10_H = 0x2737, // measurement: periodic 10 mps, high repeatability CMD_MEAS_PERI_10_M = 0x2721, // measurement: periodic 10 mps, medium repeatability CMD_MEAS_PERI_10_L = 0x272A, // measurement: periodic 10 mps, low repeatability CMD_FETCH_DATA = 0xE000, // readout measurements for periodic mode CMD_R_AL_LIM_LS = 0xE102, // read alert limits, low set CMD_R_AL_LIM_LC = 0xE109, // read alert limits, low clear CMD_R_AL_LIM_HS = 0xE11F, // read alert limits, high set CMD_R_AL_LIM_HC = 0xE114, // read alert limits, high clear CMD_W_AL_LIM_HS = 0x611D, // write alert limits, high set CMD_W_AL_LIM_HC = 0x6116, // write alert limits, high clear CMD_W_AL_LIM_LC = 0x610B, // write alert limits, low clear CMD_W_AL_LIM_LS = 0x6100, // write alert limits, low set CMD_NO_SLEEP = 0x303E, }sht3xCommands; // Measurement Repeatability typedef enum{ REPEATAB_HIGH, // high repeatability REPEATAB_MEDIUM, // medium repeatability REPEATAB_LOW, // low repeatability }sht3xRepeatability; // Measurement Mode typedef enum{ MODE_CLKSTRETCH, // clock stretching MODE_POLLING, // polling }sht3xMode; typedef enum{ FREQUENCY_HZ5, // 0.5 measurements per seconds FREQUENCY_1HZ, // 1.0 measurements per seconds FREQUENCY_2HZ, // 2.0 measurements per seconds FREQUENCY_4HZ, // 4.0 measurements per seconds FREQUENCY_10HZ, // 10.0 measurements per seconds }sht3xFrequency; /* Dev 风格设备结构体与接口 */ typedef struct { /* 设备地址与可选通道(用于多路 I2C 控制器场景) */ uint8_t addr; uint8_t channel; /* 平台回调:I2C 读写与延时 */ int (*i2c_write)(uint8_t addr, const uint8_t* data, uint16_t len, uint8_t channel); int (*i2c_read)(uint8_t addr, uint8_t* data, uint16_t len, uint8_t channel); void (*delay_ms)(uint32_t ms); /* 统一锁与日志 */ void (*lock)(uint8_t lock); uint8_t debugEnable; void (*LOG)(const char* fmt, ...); /* 最近一次测量结果与状态 */ float lastTemperatureC; float lastHumidityPct; uint8_t warningFlag; /* 0:最佳范围; 1:警告; 2:越界已钳制 */ } SHT3X_ATY_Dev; /* Dev 风格函数原型 */ void SHT3X_InitDev(SHT3X_ATY_Dev* dev, uint8_t addr, uint8_t channel); void SHT3X_StartPeriodicDev(SHT3X_ATY_Dev* dev, sht3xRepeatability repeatability, sht3xFrequency frequency); int SHT3X_ReadMeasurementDev(SHT3X_ATY_Dev* dev); int SHT3X_GetTempAndHumiClkStretchDev(SHT3X_ATY_Dev* dev, sht3xRepeatability repeatability); float SHT3X_GetTemperatureCDev(const SHT3X_ATY_Dev* dev); float SHT3X_GetHumidityPctDev(const SHT3X_ATY_Dev* dev); uint8_t SHT3X_GetWarningFlagDev(const SHT3X_ATY_Dev* dev); #endif /* __SHT3X_ATY_H */ /******************************** End Of File *********************************/