GY-63_MS5611/libraries/ADS1x15/README.md

487 lines
18 KiB
Markdown
Raw Normal View History

2021-01-29 06:31:58 -05:00
[![Arduino CI](https://github.com/RobTillaart/ADS1X15/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
2021-10-08 03:28:06 -04:00
[![Arduino-lint](https://github.com/RobTillaart/ADS1X15/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/ADS1X15/actions/workflows/arduino-lint.yml)
[![JSON check](https://github.com/RobTillaart/ADS1X15/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/ADS1X15/actions/workflows/jsoncheck.yml)
2023-08-31 11:53:34 -04:00
[![GitHub issues](https://img.shields.io/github/issues/RobTillaart/ADS1X15.svg)](https://github.com/RobTillaart/ADS1X15/issues)
2021-01-29 06:31:58 -05:00
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/ADS1X15/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/release/RobTillaart/ADS1X15.svg?maxAge=3600)](https://github.com/RobTillaart/ADS1X15/releases)
2023-08-31 11:53:34 -04:00
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/ADS1X15.svg)](https://registry.platformio.org/libraries/robtillaart/ADS1X15)
2021-01-29 06:31:58 -05:00
2022-03-15 10:40:30 -04:00
2021-01-29 06:31:58 -05:00
# ADS1X15
2021-12-11 10:46:06 -05:00
Arduino library for I2C ADC ADS1015, ADS1115, and similar.
2021-01-29 06:31:58 -05:00
2023-01-21 05:46:58 -05:00
For using I2C ADC with Raspberry pi or other SBC with Linux OS,
you can check similar library [here](https://github.com/chandrawi/ADS1x15-ADC).
2021-07-14 04:59:33 -04:00
2022-03-15 10:40:30 -04:00
2021-01-29 06:31:58 -05:00
## Description
This library should work for the devices mentioned below,
although not all sensors support all functionality.
2023-01-21 05:46:58 -05:00
| Device | Channels | Resolution | Max sps | Comparator | ProgGainAMP | Notes |
|:---------:|:----------:|:------------:|:---------:|:------------:|:-------------:|:---------|
| ADS1013 | 1 | 12 | 3300 | N | N | |
| ADS1014 | 1 | 12 | 3300 | Y | Y | |
| ADS1015 | 4 | 12 | 3300 | Y | Y | |
| ADS1113 | 1 | 16 | 860 | N | N | |
| ADS1114 | 1 | 16 | 860 | Y | Y | |
| ADS1115 | 4 | 16 | 860 | Y | Y | Tested |
2021-01-29 06:31:58 -05:00
2023-08-31 11:53:34 -04:00
As the ADS1015 and the ADS1115 are both 4 channels these are the most
2021-01-29 06:31:58 -05:00
interesting from functionality point of view as these can also do
2023-08-31 11:53:34 -04:00
differential measurements.
2023-12-06 11:03:16 -05:00
#### 0.4.0 Breaking change
Version 0.4.0 introduced a breaking change.
You cannot set the pins in **begin()** any more.
This reduces the dependency of processor dependent Wire implementations.
The user has to call **Wire.begin()** and can optionally set the Wire pins
before calling **begin()**.
2023-08-31 11:53:34 -04:00
#### Related
- https://github.com/RobTillaart/MCP_ADC (10 & 12 bit ADC, SPI, fast)
- https://github.com/RobTillaart/PCF8591 (8 bit ADC + 1 bit DAC)
## I2C Address
2021-01-29 06:31:58 -05:00
2021-12-11 10:46:06 -05:00
The address of the ADS1113/4/5 is determined by to which pin the **ADDR**
2021-01-29 06:31:58 -05:00
is connected to:
2023-01-21 05:46:58 -05:00
| ADDR pin connected to | Address | Notes |
|:-----------------------:|:---------:|:---------:|
| GND | 0x48 | default |
| VDD | 0x49 | |
| SDA | 0x4A | |
| SCL | 0x4B | |
2021-01-29 06:31:58 -05:00
2022-01-31 13:03:19 -05:00
## Interface
2023-03-31 08:32:54 -04:00
```cpp
#include "ADS1X15.h"
```
#### Initializing
2022-01-31 13:03:19 -05:00
2023-08-31 11:53:34 -04:00
To initialize the library you must call a constructor as described below.
2022-01-31 13:03:19 -05:00
2021-12-11 10:46:06 -05:00
- **ADS1x15()** base constructor, should not be used.
2023-01-21 05:46:58 -05:00
- **ADS1013(uint8_t address, TwoWire \*wire = &Wire)** Constructor with device address,
2021-04-07 07:31:22 -04:00
and optional the Wire interface as parameter.
2023-01-21 05:46:58 -05:00
- **ADS1014(uint8_t address, TwoWire \*wire = &Wire)** Constructor with device address,
2021-04-07 07:31:22 -04:00
and optional the Wire interface as parameter.
2023-01-21 05:46:58 -05:00
- **ADS1015(uint8_t address, TwoWire \*wire = &Wire)** Constructor with device address,
2021-04-07 07:31:22 -04:00
and optional the Wire interface as parameter.
2023-01-21 05:46:58 -05:00
- **ADS1113(uint8_t address, TwoWire \*wire = &Wire)** Constructor with device address,
2021-04-07 07:31:22 -04:00
and optional the Wire interface as parameter.
2023-01-21 05:46:58 -05:00
- **ADS1114(uint8_t address, TwoWire \*wire = &Wire)** Constructor with device address,
2021-04-07 07:31:22 -04:00
and optional the Wire interface as parameter.
2023-01-21 05:46:58 -05:00
- **ADS1115(uint8_t address, TwoWire \*wire = &Wire)** Constructor with device address,
2021-04-07 07:31:22 -04:00
and optional the Wire interface as parameter.
2021-01-29 06:31:58 -05:00
2022-01-21 13:23:09 -05:00
2023-01-21 05:46:58 -05:00
After construction the **ADS.begin()** need to be called. This will return false
2022-01-21 13:23:09 -05:00
if an invalid address is used.
The function **bool isConnected()** can be used to verify the reading of the ADS.
2023-01-21 05:46:58 -05:00
The function **void reset()** is sets the parameters to their initial value as
2022-01-21 13:23:09 -05:00
in the constructor.
2022-01-31 13:03:19 -05:00
For example.
```cpp
#include "ADS1X15.h"
// initialize ADS1115 on I2C bus 1 with default address 0x48
ADS1115 ADS(0x48);
void begin() {
if (!ADS.isConnected()) {
// error ADS1115 not connected
}
}
```
2022-01-21 13:23:09 -05:00
2022-01-31 13:03:19 -05:00
2023-03-31 08:32:54 -04:00
#### I2C clock speed
2022-01-21 13:23:09 -05:00
2023-01-21 05:46:58 -05:00
The function **void setWireClock(uint32_t speed = 100000)** is used to set the clock speed
2022-01-21 13:23:09 -05:00
in Hz of the used I2C interface. typical value is 100 KHz.
2021-04-25 13:56:44 -04:00
2023-01-21 05:46:58 -05:00
The function **uint32_t getWireClock()** is a prototype.
2021-08-10 16:16:36 -04:00
It returns the value set by setWireClock().
2023-01-21 05:46:58 -05:00
This is not necessary the actual value.
2021-08-10 16:16:36 -04:00
When no value is set **getWireClock()** returns 0.
Need to implement a read / calculate from low level I2C code (e.g. TWBR on AVR),
better the Arduino Wire lib should support this call (ESP32 does).
2021-04-25 13:56:44 -04:00
2022-01-21 13:23:09 -05:00
See - https://github.com/arduino/Arduino/issues/11457
2023-08-31 11:53:34 -04:00
Question: Should this functionality be in this library?
2021-01-29 06:31:58 -05:00
2023-03-31 08:32:54 -04:00
#### Programmable Gain
2021-01-29 06:31:58 -05:00
2021-10-08 03:28:06 -04:00
- **void setGain(uint8_t gain)** set the gain value, indicating the maxVoltage that can be measured
2023-01-21 05:46:58 -05:00
Adjusting the gain allowing to make more precise measurements.
2021-08-10 16:16:36 -04:00
Note: the gain is not set in the device until an explicit read/request of the ADC (any read call will do).
2021-01-29 06:31:58 -05:00
See table below.
2021-10-08 03:28:06 -04:00
- **uint8_t getGain()** returns the gain value (index).
2021-01-29 06:31:58 -05:00
2023-01-21 05:46:58 -05:00
| PGA value | Max Voltage | Notes |
|:-----------:|:-------------:|:---------:|
| 0 | ±6.144V | default |
| 1 | ±4.096V | |
| 2 | ±2.048V | |
| 4 | ±1.024V | |
| 8 | ±0.512V | |
| 16 | ±0.256V | |
2021-01-29 06:31:58 -05:00
2021-08-10 16:16:36 -04:00
- **float getMaxVoltage()** returns the max voltage with the current gain.
- **float toVoltage(int16_t raw = 1)** converts a raw measurement to a voltage.
2021-01-29 06:31:58 -05:00
Can be used for normal and differential measurements.
The default value of 1 returns the conversion factor for any raw number.
2023-01-21 05:46:58 -05:00
The voltage factor can also be used to set HIGH and LOW threshold registers
2021-01-29 06:31:58 -05:00
with a voltage in the comparator mode.
2022-01-31 13:03:19 -05:00
Check the [examples](https://github.com/RobTillaart/ADS1X15/blob/master/examples/ADS_read_comparator_1/ADS_read_comparator_1.ino).
2021-01-29 06:31:58 -05:00
```cpp
float f = ADS.toVoltage();
ADS.setComparatorThresholdLow( 3.0 / f );
ADS.setComparatorThresholdLow( 4.3 / f );
```
2021-10-08 03:28:06 -04:00
2023-03-31 08:32:54 -04:00
#### Operational mode
2021-01-29 06:31:58 -05:00
2023-01-21 05:46:58 -05:00
The ADS sensor can operate in single shot or continuous mode.
2022-01-31 13:03:19 -05:00
Depending on how often conversions needed you can tune the mode.
2021-08-10 16:16:36 -04:00
- **void setMode(uint8_t mode)** 0 = CONTINUOUS, 1 = SINGLE (default)
Note: the mode is not set in the device until an explicit read/request of the ADC (any read call will do).
- **uint8_t getMode()** returns current mode 0 or 1, or ADS1X15_INVALID_MODE = 0xFE.
2021-01-29 06:31:58 -05:00
2023-03-31 08:32:54 -04:00
#### Data rate
2021-01-29 06:31:58 -05:00
2021-08-10 16:16:36 -04:00
- **void setDataRate(uint8_t dataRate)** Data rate depends on type of device.
2021-01-29 06:31:58 -05:00
For all devices the index 0..7 can be used, see table below.
Values above 7 ==> will be set to the default 4.
2021-08-10 16:16:36 -04:00
Note: the data rate is not set in the device until an explicit read/request of the ADC (any read call will do).
- **uint8_t getDataRate()** returns the current data rate (index).
2021-01-29 06:31:58 -05:00
The library has no means to convert this index to the actual numbers
2023-01-21 05:46:58 -05:00
as that would take 32 bytes.
2021-01-29 06:31:58 -05:00
2022-01-31 13:03:19 -05:00
Data rate in samples per second, based on datasheet is described on table below.
2021-01-29 06:31:58 -05:00
2023-01-21 05:46:58 -05:00
| data rate | ADS101x | ADS111x | Notes |
|:-----------:|----------:|----------:|:---------:|
| 0 | 128 | 8 | slowest |
| 1 | 250 | 16 | |
| 2 | 490 | 32 | |
| 3 | 920 | 64 | |
| 4 | 1600 | 128 | default |
| 5 | 2400 | 250 | |
| 6 | 3300 | 475 | |
| 7 | 3300 | 860 | fastest |
2021-01-29 06:31:58 -05:00
2023-03-31 08:32:54 -04:00
#### ReadADC Single mode
2021-01-29 06:31:58 -05:00
2022-01-31 13:03:19 -05:00
Reading the ADC is very straightforward, the **readADC()** function handles all in one call.
Under the hood it uses the asynchronous calls.
2023-01-21 05:46:58 -05:00
- **int16_t readADC(uint8_t pin = 0)** normal ADC functionality, pin = 0..3.
2021-07-14 04:59:33 -04:00
If the pin number is out of range, this function will return 0.
2022-03-15 10:40:30 -04:00
Default pin = 0 as this is convenient for 1 channel devices.
2021-01-29 06:31:58 -05:00
2022-01-31 13:03:19 -05:00
```cpp
2022-03-15 10:40:30 -04:00
// read ADC in pin 2
ADS.readADC(2);
// read ADC in pin 0 - two ways
ADS.readADC();
2022-01-31 13:03:19 -05:00
ADS.readADC(0);
```
See [examples](https://github.com/RobTillaart/ADS1X15/blob/master/examples/ADS_minimum/ADS_minimum.ino).
To read the ADC in an asynchronous way (e.g. to minimize blocking) you need call three functions:
2023-01-21 05:46:58 -05:00
- **void requestADC(uint8_t pin = 0)** Start the conversion. pin = 0..3.
2022-03-15 10:40:30 -04:00
Default pin = 0 as this is convenient for 1 channel devices.
2021-10-08 03:28:06 -04:00
- **bool isBusy()** Is the conversion not ready yet? Works only in SINGLE mode!
2023-01-21 05:46:58 -05:00
- **bool isReady()** Is the conversion ready? Works only in SINGLE mode! (= wrapper around **isBusy()** )
2021-08-10 16:16:36 -04:00
- **int16_t getValue()** Read the result of the conversion.
2021-01-29 06:31:58 -05:00
in terms of code
```cpp
void setup()
{
// other setup things here
2021-10-08 03:28:06 -04:00
ADS.setMode(1); // SINGLE SHOT MODE
2021-01-29 06:31:58 -05:00
ADS.requestADC(pin);
}
void loop()
{
if (ADS.isReady())
{
2021-12-11 10:46:06 -05:00
value = ADS.getValue();
2021-01-29 06:31:58 -05:00
ADS.requestADC(pin); // request new conversion
}
// do other things here
}
```
2022-01-31 13:03:19 -05:00
See [examples](https://github.com/RobTillaart/ADS1X15/blob/master/examples/ADS_read_async/ADS_read_async.ino).
2021-01-29 06:31:58 -05:00
2021-10-08 03:28:06 -04:00
2023-03-31 08:32:54 -04:00
#### ReadADC Differential
2021-01-29 06:31:58 -05:00
For reading the ADC in a differential way there are 4 calls possible.
2021-12-11 10:46:06 -05:00
2021-08-10 16:16:36 -04:00
- **int16_t readADC_Differential_0_1()** returns the difference between 2 ADC pins.
- **int16_t readADC_Differential_0_3()** ADS1x15 only
- **int16_t readADC_Differential_1_3()** ADS1x15 only
- **int16_t readADC_Differential_2_3()** ADS1x15 only
- **int16_t readADC_Differential_0_2()** ADS1x15 only - in software (no async equivalent)
- **int16_t readADC_Differential_1_2()** ADS1x15 only - in software (no async equivalent)
2021-01-29 06:31:58 -05:00
2022-01-31 13:03:19 -05:00
```cpp
// read differential ADC between pin 0 and 1
ADS.readADC_Differential_0_1(0);
```
2021-07-14 04:59:33 -04:00
The differential reading of the ADC can also be done with asynchronous calls.
2021-12-11 10:46:06 -05:00
2021-10-08 03:28:06 -04:00
- **void requestADC_Differential_0_1()** starts conversion for differential reading
- **void requestADC_Differential_0_3()** ADS1x15 only
- **void requestADC_Differential_1_3()** ADS1x15 only
- **void requestADC_Differential_2_3()** ADS1x15 only
2021-01-29 06:31:58 -05:00
2022-01-31 13:03:19 -05:00
After one of these calls you need to call
2021-08-10 16:16:36 -04:00
- **int16_t getValue()** Read the result of the last conversion.
2021-01-29 06:31:58 -05:00
2022-01-31 13:03:19 -05:00
See [examples](https://github.com/RobTillaart/ADS1X15/blob/master/examples/ADS_differential/ADS_differential.ino).
2021-10-08 03:28:06 -04:00
2021-01-29 06:31:58 -05:00
2023-09-14 05:34:36 -04:00
#### lastRequestMode
Since 0.3.12 the library tracks the last request mode, single pin or differential.
This variable is set at the moment of request, and keeps its value until a new
request is made. This implies that the value / request can be quite old.
Values >= 0x10 are differential, values < 0x10 are single pin.
- **uint8_t lastRequest()** returns one of the values below.
| Value | Description | Notes |
|:-------:|:-----------------------------|:--------|
| 0xFF | no (invalid) request made | after call constructor.
| 0x00 | single pin 0 |
| 0x01 | single pin 1 |
| 0x02 | single pin 2 |
| 0x03 | single pin 3 |
| 0x10 | differential pin 1 0 |
| 0x30 | differential pin 3 0 |
| 0x31 | differential pin 3 1 |
| 0x32 | differential pin 3 2 |
Please note that (for now) the function does not support a descriptive return value
for the following two requests:
- **readADC_Differential_0_2()** ADS1x15 only - in software (no async equivalent)
- **readADC_Differential_1_2()** ADS1x15 only - in software (no async equivalent)
As these are emulated in software by two single pin calls, the state would be
one of the two single pin values.
2023-03-31 08:32:54 -04:00
#### ReadADC continuous mode
2021-01-29 06:31:58 -05:00
2022-01-31 13:03:19 -05:00
To use the continuous mode you need call three functions:
2021-08-10 16:16:36 -04:00
- **void setMode(0)** 0 = CONTINUOUS, 1 = SINGLE (default).
Note: the mode is not set in the device until an explicit read/request of the ADC (any read call will do).
- **int16_t readADC(uint8_t pin)** or **void requestADC(uint8_t pin)** to get the continuous mode started.
2023-01-21 05:46:58 -05:00
- **int16_t getValue()** to return the last value read by the device.
2021-08-10 16:16:36 -04:00
Note this can be a different pin, so be warned.
2021-01-29 06:31:58 -05:00
Calling this over and over again can give the same value multiple times.
2022-01-31 13:03:19 -05:00
```cpp
void setup() {
// configuration things here
ADS.setMode(ADS.MODE_CONTINUOUS);
ADS.requestADC(0); // request on pin 0
}
void loop() {
value = ADS.getValue()
sleep(1)
}
```
See [examples](https://github.com/RobTillaart/ADS1X15/blob/master/examples/ADS_continuous/ADS_continuous.ino)
.
2021-08-10 16:16:36 -04:00
By using **bool isBusy()** or **bool isReady()** one can wait until new data is available.
2021-10-17 06:48:59 -04:00
Note this only works in the SINGLE_SHOT modus.
2021-10-08 03:28:06 -04:00
2022-01-31 13:03:19 -05:00
In continuous mode, you can't use **isBusy()** or **isReady()** functions to wait until new data available.
2023-01-21 05:46:58 -05:00
Instead you can configure the threshold registers to allow the **ALERT/RDY**
2022-10-17 05:10:46 -04:00
pin to trigger an interrupt signal when conversion data ready.
2021-01-29 06:31:58 -05:00
2021-04-25 13:56:44 -04:00
2023-08-31 11:53:34 -04:00
#### Switching mode or channel during continuous mode
When switching the operating mode or the ADC channel in continuous mode, be aware that
the device will always finish the running conversion.
This implies that after switching the mode or channel the first sample you get is probably
the last sample with the previous settings, e.g. channel.
This might be a problem for your project as this value can be in an "unexpected" range (outlier).
The robust way to change mode or channel therefore seems to be:
1. stop continuous mode,
1. wait for running conversion to be ready,
1. reject the last conversion or process it "under old settings",
1. change the settings,
1. restart (continuous mode) with the new settings.
This explicit stop takes extra time, however it should prevent "incorrect" readings.
(need to be verified with different models)
2023-03-31 08:32:54 -04:00
#### Threshold registers
2021-01-29 06:31:58 -05:00
If the thresholdHigh is set to 0x0100 and the thresholdLow to 0x0000
the **ALERT/RDY** pin is triggered when a conversion is ready.
2021-12-11 10:46:06 -05:00
2021-08-10 16:16:36 -04:00
- **void setComparatorThresholdLow(int16_t lo)** writes value to device directly.
- **void setComparatorThresholdHigh(int16_t hi)** writes value to device directly.
- **int16_t getComparatorThresholdLow()** reads value from device.
- **int16_t getComparatorThresholdHigh()** reads value from device.
2021-01-29 06:31:58 -05:00
2022-01-31 13:03:19 -05:00
See [examples](https://github.com/RobTillaart/ADS1X15/blob/master/examples/ADS_read_RDY/ADS_read_RDY.ino).
2021-01-29 06:31:58 -05:00
2021-04-25 13:56:44 -04:00
2023-03-31 08:32:54 -04:00
#### Comparator
2021-01-29 06:31:58 -05:00
2021-08-10 16:16:36 -04:00
Please read Page 15 of the datasheet as the behaviour of the
2021-01-29 06:31:58 -05:00
comparator is not trivial.
2023-01-21 05:46:58 -05:00
NOTE: all comparator settings are copied to the device only after calling
2022-01-31 13:03:19 -05:00
**readADC()** or **requestADC()** functions.
2021-08-10 16:16:36 -04:00
2021-04-25 13:56:44 -04:00
2023-03-31 08:32:54 -04:00
#### Comparator Mode
2021-01-29 06:31:58 -05:00
When configured as a **TRADITIONAL** comparator, the **ALERT/RDY** pin asserts
(active low by default) when conversion data exceed the limit set in the
2021-07-14 04:59:33 -04:00
high threshold register. The comparator then de-asserts when the input
2021-01-29 06:31:58 -05:00
signal falls below the low threshold register value.
2023-01-21 05:46:58 -05:00
- **void setComparatorMode(uint8_t mode)** value 0 = TRADITIONAL 1 = WINDOW,
2021-10-08 03:28:06 -04:00
- **uint8_t getComparatorMode()** returns value set.
2023-01-21 05:46:58 -05:00
2021-01-29 06:31:58 -05:00
If the comparator **LATCH** is set, the **ALERT/RDY** pin asserts and it will be
reset after reading the sensor (conversion register) again.
*An SMB alert command (00011001) on the I2C bus will also reset the alert state.*
*Not implemented in the library (yet)*
In **WINDOW** comparator mode, the **ALERT/RDY** pin asserts if conversion data exceeds
the high threshold register or falls below the low threshold register.
In this mode the alert is held if the **LATCH** is set. This is similar as above.
2021-04-25 13:56:44 -04:00
2023-03-31 08:32:54 -04:00
#### Polarity
2021-01-29 06:31:58 -05:00
Default state of the **ALERT/RDY** pin is **LOW**, can be to set **HIGH**.
2023-01-21 05:46:58 -05:00
- **void setComparatorPolarity(uint8_t pol)**
2021-08-10 16:16:36 -04:00
Flag is only explicitly set after a **readADC()** or a **requestADC()**
2023-01-21 05:46:58 -05:00
- **uint8_t getComparatorPolarity()** returns value set.
2021-04-25 13:56:44 -04:00
2023-03-31 08:32:54 -04:00
#### Latch
2021-01-29 06:31:58 -05:00
Holds the **ALERT/RDY** to **HIGH** (or **LOW** depending on polarity) after triggered
even if actual value has been 'restored to normal' value.
2021-08-10 16:16:36 -04:00
- **void setComparatorLatch(uint8_t latch)** 0 = NO LATCH, not 0 = LATCH
- **uint8_t getComparatorLatch()** returns value set.
2021-04-25 13:56:44 -04:00
2023-03-31 08:32:54 -04:00
#### QueConvert
2021-01-29 06:31:58 -05:00
Set the number of conversions before trigger activates.
2021-08-10 16:16:36 -04:00
The **void setComparatorQueConvert(uint8_t mode)** is used to set the number of
2021-01-29 06:31:58 -05:00
conversions that exceed the threshold before the **ALERT/RDY** pin is set **HIGH**.
2023-12-06 11:03:16 -05:00
A value of 3 (or above) effectively disables the comparator. See table below.
To enable the conversion-ready function of the ALERT/RDY pin, it is necessary to set the MSB of the Hi_thresh register to 1 and the MSB of the Lo_thresh register to 0.
See [examples](https://github.com/RobTillaart/ADS1X15/blob/master/examples/ADS_continuous_differential/ADS_continuous_differential.ino).
2021-01-29 06:31:58 -05:00
2021-08-10 16:16:36 -04:00
- **void setComparatorQueConvert(uint8_t mode)** See table below.
- **uint8_t getComparatorQueConvert()** returns value set.
2023-01-21 05:46:58 -05:00
| value | meaning | Notes |
|:-------:|:------------------------------------|:----------|
| 0 | trigger alert after 1 conversion | |
| 1 | trigger alert after 2 conversions | |
| 2 | trigger alert after 4 conversions | |
| 3 | Disable comparator | default |
2021-01-29 06:31:58 -05:00
2021-04-25 13:56:44 -04:00
2023-03-31 08:32:54 -04:00
#### Threshold registers comparator mode
2021-01-29 06:31:58 -05:00
Depending on the comparator mode **TRADITIONAL** or **WINDOW** the thresholds registers
mean something different see - Comparator Mode above or datasheet.
2021-12-11 10:46:06 -05:00
2021-08-10 16:16:36 -04:00
- **void setComparatorThresholdLow(int16_t lo)** set the low threshold; take care the hi >= lo.
- **void setComparatorThresholdHigh(int16_t hi)** set the high threshold; take care the hi >= lo.
- **int16_t getComparatorThresholdLow()** reads value from device.
- **int16_t getComparatorThresholdHigh()** reads value from device.
2021-01-29 06:31:58 -05:00
## Future ideas & improvements
2023-01-21 05:46:58 -05:00
#### Must
- Improve documentation (always)
#### Should
#### Could
2023-09-14 05:34:36 -04:00
- More examples
2021-01-29 06:31:58 -05:00
- SMB alert command (00011001) on I2C bus?
2023-08-31 11:53:34 -04:00
- sync order .h / .cpp
2021-01-29 06:31:58 -05:00
2023-01-21 05:46:58 -05:00
#### Wont (unless requested)
2021-04-25 13:56:44 -04:00
2023-01-21 05:46:58 -05:00
- type flag?
2023-09-14 05:34:36 -04:00
- constructor for ADS1X15? No as all types are supported.
2023-08-31 11:53:34 -04:00
## Support
If you appreciate my libraries, you can support the development and maintenance.
Improve the quality of the libraries by providing issues and Pull Requests, or
donate through PayPal or GitHub sponsors.
Thank you,
2022-01-21 13:23:09 -05:00