Files
2024-07-20 22:09:06 +08:00

52 lines
1.8 KiB
C++

#ifndef DFRobot_SHT20_h
#define DFRobot_SHT20_h
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include <Wire.h>
#define ERROR_I2C_TIMEOUT 998
#define ERROR_BAD_CRC 999
#define SLAVE_ADDRESS 0x40
#define TRIGGER_TEMP_MEASURE_HOLD 0xE3
#define TRIGGER_HUMD_MEASURE_HOLD 0xE5
#define TRIGGER_TEMP_MEASURE_NOHOLD 0xF3
#define TRIGGER_HUMD_MEASURE_NOHOLD 0xF5
#define WRITE_USER_REG 0xE6
#define READ_USER_REG 0xE7
#define SOFT_RESET 0xFE
#define USER_REGISTER_RESOLUTION_MASK 0x81
#define USER_REGISTER_RESOLUTION_RH12_TEMP14 0x00
#define USER_REGISTER_RESOLUTION_RH8_TEMP12 0x01
#define USER_REGISTER_RESOLUTION_RH10_TEMP13 0x80
#define USER_REGISTER_RESOLUTION_RH11_TEMP11 0x81
#define USER_REGISTER_END_OF_BATTERY 0x40
#define USER_REGISTER_HEATER_ENABLED 0x04
#define USER_REGISTER_DISABLE_OTP_RELOAD 0x02
#define MAX_WAIT 100
#define DELAY_INTERVAL 10
#define SHIFTED_DIVISOR 0x988000
#define MAX_COUNTER (MAX_WAIT/DELAY_INTERVAL)
class DFRobot_SHT20
{
public:
void checkSHT20(void);
void setResolution(byte resBits);
void writeUserRegister(byte val);
void initSHT20(TwoWire &wirePort = Wire);
void showReslut(const char *prefix, int val);
float readHumidity(void);
float readTemperature(void);
byte readUserRegister(void);
private:
TwoWire *i2cPort;
byte checkCRC(uint16_t message_from_sensor, uint8_t check_value_from_sensor);
uint16_t readValue(byte cmd);
};
#endif