GY-63_MS5611/libraries/ADS1x15/ADS1X15.h

235 lines
6.5 KiB
C
Raw Normal View History

2021-01-29 06:31:58 -05:00
#pragma once
//
// FILE: ADS1X15.H
// AUTHOR: Rob Tillaart
2022-06-21 04:53:30 -04:00
// VERSION: 0.3.7
2021-01-29 06:31:58 -05:00
// DATE: 2013-03-24
// PUPROSE: Arduino library for ADS1015 and ADS1115
// URL: https://github.com/RobTillaart/ADS1X15
//
2021-10-08 03:28:06 -04:00
2021-01-29 06:31:58 -05:00
#include "Arduino.h"
#include "Wire.h"
2022-06-21 04:53:30 -04:00
#define ADS1X15_LIB_VERSION (F("0.3.7"))
2021-01-29 06:31:58 -05:00
// allow compile time default address
// address in { 0x48, 0x49, 0x4A, 0x4B }, no test...
#ifndef ADS1015_ADDRESS
2022-01-21 13:23:09 -05:00
#define ADS1015_ADDRESS 0x48
2021-01-29 06:31:58 -05:00
#endif
#ifndef ADS1115_ADDRESS
2022-01-21 13:23:09 -05:00
#define ADS1115_ADDRESS 0x48
2021-01-29 06:31:58 -05:00
#endif
2022-01-21 13:23:09 -05:00
#define ADS1X15_OK 0
#define ADS1X15_INVALID_VOLTAGE -100
#define ADS1X15_INVALID_GAIN 0xFF
#define ADS1X15_INVALID_MODE 0xFE
2021-01-29 06:31:58 -05:00
class ADS1X15
{
public:
2021-04-25 13:56:44 -04:00
void reset();
2021-01-29 06:31:58 -05:00
#if defined (ESP8266) || defined(ESP32)
2022-06-21 04:53:30 -04:00
bool begin(int sda, int scl);
2021-01-29 06:31:58 -05:00
#endif
bool begin();
bool isConnected();
// GAIN
// 0 = <20>6.144V default
// 1 = <20>4.096V
// 2 = <20>2.048V
// 4 = <20>1.024V
// 8 = <20>0.512V
// 16 = <20>0.256V
void setGain(uint8_t gain = 0); // invalid values are mapped to 0 (default).
uint8_t getGain(); // 0xFF == invalid gain error.
// both may return ADS1X15_INVALID_VOLTAGE if the gain is invalid.
2021-12-11 10:46:06 -05:00
float toVoltage(int16_t value = 1); // converts raw to voltage
2021-01-29 06:31:58 -05:00
float getMaxVoltage(); // -100 == invalid voltage error
// 0 = CONTINUOUS
// 1 = SINGLE default
void setMode(uint8_t mode = 1); // invalid values are mapped to 1 (default)
uint8_t getMode(); // 0xFE == invalid mode error.
// 0 = slowest
// 7 = fastest
// 4 = default
2021-04-25 13:56:44 -04:00
void setDataRate(uint8_t dataRate = 4); // invalid values are mapped on 4 (default)
uint8_t getDataRate(); // actual speed depends on device
2021-01-29 06:31:58 -05:00
2022-03-15 10:40:30 -04:00
int16_t readADC(uint8_t pin = 0);
2021-01-29 06:31:58 -05:00
int16_t readADC_Differential_0_1();
// used by continuous mode and async mode.
2021-04-25 13:56:44 -04:00
int16_t getLastValue() { return getValue(); }; // will be obsolete in the future 0.4.0
2021-01-29 06:31:58 -05:00
int16_t getValue();
2021-04-25 13:56:44 -04:00
2021-01-29 06:31:58 -05:00
// ASYNC INTERFACE
2022-01-21 13:23:09 -05:00
// requestADC(pin) -> isBusy() or isReady() -> getValue();
2021-01-29 06:31:58 -05:00
// see examples
2022-03-15 10:40:30 -04:00
void requestADC(uint8_t pin = 0);
2021-01-29 06:31:58 -05:00
void requestADC_Differential_0_1();
bool isBusy();
2021-10-08 03:28:06 -04:00
bool isReady();
2021-01-29 06:31:58 -05:00
// COMPARATOR
// 0 = TRADITIONAL > high => on < low => off
// else = WINDOW > high or < low => on between => off
void setComparatorMode(uint8_t mode) { _compMode = mode == 0 ? 0 : 1; };
uint8_t getComparatorMode() { return _compMode; };
// 0 = LOW (default)
// else = HIGH
void setComparatorPolarity(uint8_t pol) { _compPol = pol ? 0 : 1; };
uint8_t getComparatorPolarity() { return _compPol; };
// 0 = NON LATCH
// else = LATCH
void setComparatorLatch(uint8_t latch) { _compLatch = latch ? 0 : 1; };
uint8_t getComparatorLatch() { return _compLatch; };
// 0 = trigger alert after 1 conversion
// 1 = trigger alert after 2 conversions
2021-07-14 04:59:33 -04:00
// 2 = trigger alert after 4 conversions
2021-01-29 06:31:58 -05:00
// 3 = Disable comparator = default, also for all other values.
void setComparatorQueConvert(uint8_t mode) { _compQueConvert = (mode < 3) ? mode : 3; };
uint8_t getComparatorQueConvert() { return _compQueConvert; };
void setComparatorThresholdLow(int16_t lo);
int16_t getComparatorThresholdLow();
void setComparatorThresholdHigh(int16_t hi);
int16_t getComparatorThresholdHigh();
2021-04-25 13:56:44 -04:00
2021-01-29 06:31:58 -05:00
int8_t getError();
2022-01-21 13:23:09 -05:00
// EXPERIMENTAL
// see https://github.com/RobTillaart/ADS1X15/issues/22
void setWireClock(uint32_t clockSpeed = 100000);
2021-07-14 04:59:33 -04:00
// proto - getWireClock returns the value set by setWireClock not necessary the actual value
2021-04-25 13:56:44 -04:00
uint32_t getWireClock();
2021-01-29 06:31:58 -05:00
protected:
ADS1X15();
// CONFIGURATION
// BIT DESCRIPTION
// 0 # channels 0 == 1 1 == 4;
// 1 0
// 2 # resolution 0 == 12 1 == 16
// 3 0
// 4 has gain 0 = NO 1 = YES
// 5 has comparator 0 = NO 1 = YES
// 6 0
// 7 0
uint8_t _config;
uint8_t _maxPorts;
uint8_t _address;
uint8_t _conversionDelay;
uint8_t _bitShift;
uint16_t _gain;
uint16_t _mode;
uint16_t _datarate;
2021-07-14 04:59:33 -04:00
// COMPARATOR variables
// TODO merge these into one COMPARATOR MASK? (low priority)
2021-01-29 06:31:58 -05:00
// would speed up code in _requestADC() and save 3 bytes RAM.
2022-01-21 13:23:09 -05:00
// TODO boolean flags for first three, or make it mask value that
2021-07-14 04:59:33 -04:00
// can be or-ed. (low priority)
2021-04-25 13:56:44 -04:00
uint8_t _compMode;
uint8_t _compPol;
uint8_t _compLatch;
uint8_t _compQueConvert;
2021-01-29 06:31:58 -05:00
2021-04-07 07:31:22 -04:00
int16_t _readADC(uint16_t readmode);
void _requestADC(uint16_t readmode);
bool _writeRegister(uint8_t address, uint8_t reg, uint16_t value);
uint16_t _readRegister(uint8_t address, uint8_t reg);
int8_t _err = ADS1X15_OK;
2021-01-29 06:31:58 -05:00
2021-04-07 07:31:22 -04:00
TwoWire* _wire;
2021-04-25 13:56:44 -04:00
uint32_t _clockSpeed = 0;
2021-01-29 06:31:58 -05:00
};
2022-03-15 10:40:30 -04:00
2021-01-29 06:31:58 -05:00
///////////////////////////////////////////////////////////////////////////
//
// Derived classes from ADS1X15
//
class ADS1013 : public ADS1X15
{
public:
2021-04-07 07:31:22 -04:00
ADS1013(uint8_t Address = ADS1015_ADDRESS, TwoWire *wire = &Wire);
2021-01-29 06:31:58 -05:00
};
2022-03-15 10:40:30 -04:00
2021-01-29 06:31:58 -05:00
class ADS1014 : public ADS1X15
{
public:
2021-04-07 07:31:22 -04:00
ADS1014(uint8_t Address = ADS1015_ADDRESS, TwoWire *wire = &Wire);
2021-01-29 06:31:58 -05:00
};
2022-03-15 10:40:30 -04:00
2021-01-29 06:31:58 -05:00
class ADS1015 : public ADS1X15
{
public:
2021-04-07 07:31:22 -04:00
ADS1015(uint8_t Address = ADS1015_ADDRESS, TwoWire *wire = &Wire);
2021-01-29 06:31:58 -05:00
int16_t readADC_Differential_0_3();
int16_t readADC_Differential_1_3();
int16_t readADC_Differential_2_3();
int16_t readADC_Differential_0_2(); // not possible in async
int16_t readADC_Differential_1_2(); // not possible in async
void requestADC_Differential_0_3();
void requestADC_Differential_1_3();
void requestADC_Differential_2_3();
};
2022-03-15 10:40:30 -04:00
2021-01-29 06:31:58 -05:00
///////////////////////////////////////////////////////////////////////////
//
// Derived classes from ADS1X15
//
class ADS1113 : public ADS1X15
{
public:
2021-04-07 07:31:22 -04:00
ADS1113(uint8_t address = ADS1115_ADDRESS, TwoWire *wire = &Wire);
2021-01-29 06:31:58 -05:00
};
2022-03-15 10:40:30 -04:00
2021-01-29 06:31:58 -05:00
class ADS1114 : public ADS1X15
{
public:
2021-04-07 07:31:22 -04:00
ADS1114(uint8_t address = ADS1115_ADDRESS, TwoWire *wire = &Wire);
2021-01-29 06:31:58 -05:00
};
2022-03-15 10:40:30 -04:00
2021-01-29 06:31:58 -05:00
class ADS1115 : public ADS1X15
{
public:
2021-04-07 07:31:22 -04:00
ADS1115(uint8_t address = ADS1115_ADDRESS, TwoWire *wire = &Wire);
2021-01-29 06:31:58 -05:00
int16_t readADC_Differential_0_3();
int16_t readADC_Differential_1_3();
int16_t readADC_Differential_2_3();
int16_t readADC_Differential_0_2(); // not possible in async
int16_t readADC_Differential_1_2(); // not possible in async
void requestADC_Differential_0_3();
void requestADC_Differential_1_3();
void requestADC_Differential_2_3();
};
2022-03-15 10:40:30 -04:00
2021-01-29 06:31:58 -05:00
// --- END OF FILE ---
2022-03-15 10:40:30 -04:00