123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #pragma once
- #include "Arduino.h"
- #define ADS115_ADDR 0x49
- #define EEPROM_ADDR 0x53
- #define ADS1115_RA_CONVERSION 0x00
- #define ADS1115_RA_CONFIG 0x01
- #define ADS1115_PGA_6144 0x00
- #define ADS1115_PGA_4096 0x01
- #define ADS1115_PGA_2048 0x02 // default
- #define ADS1115_PGA_1024 0x03
- #define ADS1115_PGA_512 0x04
- #define ADS1115_PGA_256 0x05
- #define ADS1115_MV_6144 0.187500F
- #define ADS1115_MV_4096 0.125000F
- #define ADS1115_MV_2048 0.062500F // default
- #define ADS1115_MV_1024 0.031250F
- #define ADS1115_MV_512 0.015625F
- #define ADS1115_MV_256 0.007813F
- #define ADS1115_RATE_8 0x00
- #define ADS1115_RATE_16 0x01
- #define ADS1115_RATE_32 0x02
- #define ADS1115_RATE_64 0x03
- #define ADS1115_RATE_128 0x04 // default
- #define ADS1115_RATE_250 0x05
- #define ADS1115_RATE_475 0x06
- #define ADS1115_RATE_860 0x07
- #define VOLTMETER_MEASURING_DIR -1
- #define ADS1115_MUX_P0N1 0x00 // voltmeter only support
- #define ADS1115_COMP_MODE_HYSTERESIS 0x00 // default
- #define ADS1115_COMP_MODE_WINDOW 0x01
- #define ADS1115_MODE_CONTINUOUS 0x00
- #define ADS1115_MODE_SINGLESHOT 0x01 // default
- #define VOLTMETER_PRESSURE_COEFFICIENT 0.015918958F
- #define VOLTMETER_PAG_6144_CAL_ADDR 208
- #define VOLTMETER_PAG_4096_CAL_ADDR 216
- #define VOLTMETER_PAG_2048_CAL_ADDR 224
- #define VOLTMETER_PAG_1024_CAL_ADDR 232
- #define VOLTMETER_PAG_512_CAL_ADDR 240
- #define VOLTMETER_PAG_256_CAL_ADDR 248
- #define VOLTMETER_FILTER_NUMBER 10
- typedef enum {
- PAG_6144 = ADS1115_PGA_6144,
- PAG_4096 = ADS1115_PGA_4096,
- PAG_2048 = ADS1115_PGA_2048, // default
- PAG_1024 = ADS1115_PGA_1024,
- PAG_512 = ADS1115_PGA_512,
- PAG_256 = ADS1115_PGA_256,
- } voltmeterGain_t;
- typedef enum {
- RATE_8 = ADS1115_RATE_8,
- RATE_16 = ADS1115_RATE_16,
- RATE_32 = ADS1115_RATE_32,
- RATE_64 = ADS1115_RATE_64,
- RATE_128 = ADS1115_RATE_128, // default
- RATE_250 = ADS1115_RATE_250,
- RATE_475 = ADS1115_RATE_475,
- RATE_860 = ADS1115_RATE_860,
- } voltmeterRate_t;
- typedef enum {
- SINGLESHOT = ADS1115_MODE_SINGLESHOT,
- CONTINUOUS = ADS1115_MODE_CONTINUOUS,
- } voltmeterMode_t;
- class Voltmeter {
- private:
- void i2cBegin();
- bool i2cReadBytes(uint8_t addr, uint8_t reg_addr, uint8_t* buff,
- uint16_t len);
- bool i2cWriteBytes(uint8_t addr, uint8_t reg_addr, uint8_t* buff,
- uint16_t len);
- bool i2cReadU16(uint8_t addr, uint8_t reg_addr, uint16_t* value);
- bool i2cWriteU16(uint8_t addr, uint8_t reg_addr, uint16_t value);
- float getResolution(voltmeterGain_t gain);
- uint16_t getCoverTime(voltmeterRate_t rate);
- uint8_t getPGAEEEPROMAddr(voltmeterGain_t gain);
- uint8_t _ads1115_addr;
- uint8_t _eeprom_addr;
- public:
- voltmeterGain_t _gain;
- voltmeterRate_t _rate;
- voltmeterMode_t _mode;
- float resolution;
- uint16_t cover_time;
- int16_t adc_raw;
- float calibration_factor;
- public:
- Voltmeter(uint8_t ads1115_addr = ADS115_ADDR,
- uint8_t eeprom_addr = EEPROM_ADDR);
- void setGain(voltmeterGain_t gain);
- void setRate(voltmeterRate_t rate);
- void setMode(voltmeterMode_t mode);
- float getVoltage(bool calibration = true);
- int16_t getConversion(uint16_t timeout = 125);
- int16_t getAdcRaw();
- bool isInConversion();
- void startSingleConversion();
- bool EEPORMWrite(uint8_t address, uint8_t* buff, uint8_t len);
- bool EEPORMRead(uint8_t address, uint8_t* buff, uint8_t len);
- void setCalibration(int8_t voltage, uint16_t actual);
- bool saveCalibration2EEPROM(voltmeterGain_t gain, int16_t hope,
- int16_t actual);
- bool readCalibrationFromEEPROM(voltmeterGain_t gain, int16_t* hope,
- int16_t* actual);
- };
|