metesp/src/sensor/dev/sgp40.h
2022-04-07 17:28:56 +02:00

67 lines
1.3 KiB
C++

#ifndef TG_SGP40_H
#define TG_SGP40_H
#include <Arduino.h>
#include <Wire.h>
#include "../voc.h"
#define SGP40_ADDRESS (0x59)
#define SENSOR_DATA_LENGTH 3
//////////////////////////////////////////////////////////////////
/// SGP40 - Driver class for SGP40 sensor
///
/// Based on the data sheet provided
///
class SGP40{
public:
enum ChipModel{
ChipModel_UNKNOWN = 0
};
SGP40(TwoWire* i2c): m_initialized(false),i2c(i2c){}
ChipModel chipModel();
bool begin();
bool reset();
int32_t voc(float RH = 50, float T = 20);
void read(int32_t& voc, float RH = 50, float T = 20);
protected:
bool Initialize();
private:
bool m_initialized;
ChipModel m_chip_model;
TwoWire* i2c;
VocAlgorithmParams vocAlgorithmParameters;
static const uint16_t REG_MEASURE_RAW = 0x260F;
static const uint16_t REG_MEASURE_TEST = 0x280E;
static const uint16_t REG_HEATER_OFF = 0x3615;
static const uint16_t RESET_ADDR = 0x0006;
static const uint16_t test_pass = 0xD400;
static const uint16_t test_fail = 0x4B00;
bool ReadChipID();
bool ReadRegister(uint8_t addr,uint8_t data[],uint8_t length);
bool ReadData(uint8_t data[SENSOR_DATA_LENGTH], float RH, float T);
bool WriteSettings();
bool WriteRegister(uint16_t addr,uint8_t data);
uint8_t CRC8(uint16_t twoBytes);
};
#endif