Electrochemical Gas Sensor Library 1.0.0
A library for the Electrochemical Gas Sensor breakout board
Loading...
Searching...
No Matches
ADS1X15.h
Go to the documentation of this file.
1#pragma once
2//
3// FILE: ADS1X15.H
4// AUTHOR: Rob Tillaart
5// VERSION: 0.3.1
6// DATE: 2013-03-24
7// PUPROSE: Arduino library for ADS1015 and ADS1115
8// URL: https://github.com/RobTillaart/ADS1X15
9//
10
11#include "Arduino.h"
12#include "Wire.h"
13
14#define ADS1X15_LIB_VERSION (F("0.3.1"))
15
16// allow compile time default address
17// address in { 0x48, 0x49, 0x4A, 0x4B }, no test...
18#ifndef ADS1015_ADDRESS
19#define ADS1015_ADDRESS 0x48
20#endif
21
22#ifndef ADS1115_ADDRESS
23#define ADS1115_ADDRESS 0x48
24#endif
25
26
27#define ADS1X15_OK 0
28#define ADS1X15_INVALID_VOLTAGE -100
29#define ADS1X15_INVALID_GAIN 0xFF
30#define ADS1X15_INVALID_MODE 0xFE
31
32
34{
35public:
36 void reset();
37
38#if defined (ESP8266) || defined(ESP32)
39 bool begin(uint8_t sda, uint8_t scl);
40#endif
41 bool begin();
42 bool isConnected();
43
44 // GAIN
45 // 0 = ±6.144V default
46 // 1 = ±4.096V
47 // 2 = ±2.048V
48 // 4 = ±1.024V
49 // 8 = ±0.512V
50 // 16 = ±0.256V
51 void setGain(uint8_t gain = 0); // invalid values are mapped to 0 (default).
52 uint8_t getGain(); // 0xFF == invalid gain error.
53
54 // both may return ADS1X15_INVALID_VOLTAGE if the gain is invalid.
55 float toVoltage(int16_t val = 1); // converts raw to voltage
56 float getMaxVoltage(); // -100 == invalid voltage error
57
58 // 0 = CONTINUOUS
59 // 1 = SINGLE default
60 void setMode(uint8_t mode = 1); // invalid values are mapped to 1 (default)
61 uint8_t getMode(); // 0xFE == invalid mode error.
62
63 // 0 = slowest
64 // 7 = fastest
65 // 4 = default
66 void setDataRate(uint8_t dataRate = 4); // invalid values are mapped on 4 (default)
67 uint8_t getDataRate(); // actual speed depends on device
68
69 int16_t readADC(uint8_t pin);
71
72 // used by continuous mode and async mode.
73 int16_t getLastValue() { return getValue(); }; // will be obsolete in the future 0.4.0
74 int16_t getValue();
75
76
77 // ASYNC INTERFACE
78 // requestADC(pin) -> isBusy() or isReady() -> getValue();
79 // see examples
80 void requestADC(uint8_t pin);
82 bool isBusy();
83 bool isReady() { return isBusy() == false; };
84
85
86 // COMPARATOR
87 // 0 = TRADITIONAL > high => on < low => off
88 // else = WINDOW > high or < low => on between => off
89 void setComparatorMode(uint8_t mode) { _compMode = mode == 0 ? 0 : 1; };
90 uint8_t getComparatorMode() { return _compMode; };
91
92 // 0 = LOW (default)
93 // else = HIGH
94 void setComparatorPolarity(uint8_t pol) { _compPol = pol ? 0 : 1; };
95 uint8_t getComparatorPolarity() { return _compPol; };
96
97 // 0 = NON LATCH
98 // else = LATCH
99 void setComparatorLatch(uint8_t latch) { _compLatch = latch ? 0 : 1; };
100 uint8_t getComparatorLatch() { return _compLatch; };
101
102 // 0 = trigger alert after 1 conversion
103 // 1 = trigger alert after 2 conversions
104 // 2 = trigger alert after 4 conversions
105 // 3 = Disable comparator = default, also for all other values.
106 void setComparatorQueConvert(uint8_t mode) { _compQueConvert = (mode < 3) ? mode : 3; };
108
109 void setComparatorThresholdLow(int16_t lo);
111 void setComparatorThresholdHigh(int16_t hi);
113
114
115 int8_t getError();
116
117 void setWireClock(uint32_t clockSpeed);
118 // proto - getWireClock returns the value set by setWireClock not necessary the actual value
119 uint32_t getWireClock();
120
121protected:
122 ADS1X15();
123
124 // CONFIGURATION
125 // BIT DESCRIPTION
126 // 0 # channels 0 == 1 1 == 4;
127 // 1 0
128 // 2 # resolution 0 == 12 1 == 16
129 // 3 0
130 // 4 has gain 0 = NO 1 = YES
131 // 5 has comparator 0 = NO 1 = YES
132 // 6 0
133 // 7 0
134 uint8_t _config;
135 uint8_t _maxPorts;
136 uint8_t _address;
138 uint8_t _bitShift;
139 uint16_t _gain;
140 uint16_t _mode;
141 uint16_t _datarate;
142
143 // COMPARATOR variables
144 // TODO merge these into one COMPARATOR MASK? (low priority)
145 // would speed up code in _requestADC() and save 3 bytes RAM.
146 // TODO boolean flags for first three, or make it mask value that
147 // can be or-ed. (low priority)
148 uint8_t _compMode;
149 uint8_t _compPol;
150 uint8_t _compLatch;
152
153 int16_t _readADC(uint16_t readmode);
154 void _requestADC(uint16_t readmode);
155 bool _writeRegister(uint8_t address, uint8_t reg, uint16_t value);
156 uint16_t _readRegister(uint8_t address, uint8_t reg);
157 int8_t _err = ADS1X15_OK;
158
159 TwoWire* _wire;
160 uint32_t _clockSpeed = 0;
161};
162
164//
165// Derived classes from ADS1X15
166//
167class ADS1013 : public ADS1X15
168{
169public:
170 ADS1013(uint8_t Address = ADS1015_ADDRESS, TwoWire *wire = &Wire);
171};
172
173class ADS1014 : public ADS1X15
174{
175public:
176 ADS1014(uint8_t Address = ADS1015_ADDRESS, TwoWire *wire = &Wire);
177};
178
179class ADS1015 : public ADS1X15
180{
181public:
182 ADS1015(uint8_t Address = ADS1015_ADDRESS, TwoWire *wire = &Wire);
183 int16_t readADC_Differential_0_3();
184 int16_t readADC_Differential_1_3();
185 int16_t readADC_Differential_2_3();
186 int16_t readADC_Differential_0_2(); // not possible in async
187 int16_t readADC_Differential_1_2(); // not possible in async
191};
192
194//
195// Derived classes from ADS1X15
196//
197class ADS1113 : public ADS1X15
198{
199public:
200 ADS1113(uint8_t address = ADS1115_ADDRESS, TwoWire *wire = &Wire);
201};
202
203class ADS1114 : public ADS1X15
204{
205public:
206 ADS1114(uint8_t address = ADS1115_ADDRESS, TwoWire *wire = &Wire);
207};
208
209class ADS1115 : public ADS1X15
210{
211public:
212 ADS1115(uint8_t address = ADS1115_ADDRESS, TwoWire *wire = &Wire);
213 int16_t readADC_Differential_0_3();
214 int16_t readADC_Differential_1_3();
215 int16_t readADC_Differential_2_3();
216 int16_t readADC_Differential_0_2(); // not possible in async
217 int16_t readADC_Differential_1_2(); // not possible in async
221};
222
223// --- END OF FILE ---
ADS1013(uint8_t Address=ADS1015_ADDRESS, TwoWire *wire=&Wire)
Definition ADS1X15.cpp:505
ADS1014(uint8_t Address=ADS1015_ADDRESS, TwoWire *wire=&Wire)
Definition ADS1X15.cpp:520
ADS1015(uint8_t Address=ADS1015_ADDRESS, TwoWire *wire=&Wire)
Definition ADS1X15.cpp:535
void requestADC_Differential_1_3()
Definition ADS1X15.cpp:577
int16_t readADC_Differential_0_3()
Definition ADS1X15.cpp:545
int16_t readADC_Differential_2_3()
Definition ADS1X15.cpp:555
void requestADC_Differential_0_3()
Definition ADS1X15.cpp:572
int16_t readADC_Differential_1_3()
Definition ADS1X15.cpp:550
int16_t readADC_Differential_1_2()
Definition ADS1X15.cpp:565
int16_t readADC_Differential_0_2()
Definition ADS1X15.cpp:560
void requestADC_Differential_2_3()
Definition ADS1X15.cpp:582
ADS1113(uint8_t address=ADS1115_ADDRESS, TwoWire *wire=&Wire)
Definition ADS1X15.cpp:592
ADS1114(uint8_t address=ADS1115_ADDRESS, TwoWire *wire=&Wire)
Definition ADS1X15.cpp:607
void requestADC_Differential_2_3()
Definition ADS1X15.cpp:667
int16_t readADC_Differential_2_3()
Definition ADS1X15.cpp:642
void requestADC_Differential_1_3()
Definition ADS1X15.cpp:662
ADS1115(uint8_t address=ADS1115_ADDRESS, TwoWire *wire=&Wire)
Definition ADS1X15.cpp:622
int16_t readADC_Differential_1_2()
Definition ADS1X15.cpp:652
void requestADC_Differential_0_3()
Definition ADS1X15.cpp:657
int16_t readADC_Differential_0_2()
Definition ADS1X15.cpp:647
int16_t readADC_Differential_1_3()
Definition ADS1X15.cpp:637
int16_t readADC_Differential_0_3()
Definition ADS1X15.cpp:632
float toVoltage(int16_t val=1)
Definition ADS1X15.cpp:227
int16_t readADC(uint8_t pin)
Definition ADS1X15.cpp:300
void reset()
Definition ADS1X15.cpp:144
void setMode(uint8_t mode=1)
Definition ADS1X15.cpp:263
void requestADC_Differential_0_1()
Definition ADS1X15.cpp:308
int16_t getComparatorThresholdHigh()
Definition ADS1X15.cpp:354
uint8_t _maxPorts
Definition ADS1X15.h:135
uint8_t _conversionDelay
Definition ADS1X15.h:137
uint8_t _bitShift
Definition ADS1X15.h:138
uint8_t getComparatorPolarity()
Definition ADS1X15.h:95
void _requestADC(uint16_t readmode)
Definition ADS1X15.cpp:457
uint8_t getComparatorLatch()
Definition ADS1X15.h:100
int16_t getLastValue()
Definition ADS1X15.h:73
uint16_t _gain
Definition ADS1X15.h:139
uint16_t _mode
Definition ADS1X15.h:140
void setGain(uint8_t gain=0)
Definition ADS1X15.cpp:194
ADS1X15()
Definition ADS1X15.cpp:134
uint8_t getComparatorQueConvert()
Definition ADS1X15.h:107
void setComparatorMode(uint8_t mode)
Definition ADS1X15.h:89
void setWireClock(uint32_t clockSpeed)
Definition ADS1X15.cpp:368
uint8_t getMode()
Definition ADS1X15.cpp:274
uint8_t getGain()
Definition ADS1X15.cpp:210
int16_t getValue()
Definition ADS1X15.cpp:328
uint8_t _compLatch
Definition ADS1X15.h:150
uint8_t _config
Definition ADS1X15.h:134
bool _writeRegister(uint8_t address, uint8_t reg, uint16_t value)
Definition ADS1X15.cpp:475
uint8_t _compMode
Definition ADS1X15.h:148
int8_t _err
Definition ADS1X15.h:157
bool begin()
Definition ADS1X15.cpp:170
TwoWire * _wire
Definition ADS1X15.h:159
int8_t getError()
Definition ADS1X15.cpp:360
void setComparatorThresholdLow(int16_t lo)
Definition ADS1X15.cpp:336
void setComparatorQueConvert(uint8_t mode)
Definition ADS1X15.h:106
void setComparatorThresholdHigh(int16_t hi)
Definition ADS1X15.cpp:348
uint32_t _clockSpeed
Definition ADS1X15.h:160
uint16_t _datarate
Definition ADS1X15.h:141
uint8_t getComparatorMode()
Definition ADS1X15.h:90
void setComparatorPolarity(uint8_t pol)
Definition ADS1X15.h:94
void setComparatorLatch(uint8_t latch)
Definition ADS1X15.h:99
uint8_t _compPol
Definition ADS1X15.h:149
int16_t getComparatorThresholdLow()
Definition ADS1X15.cpp:342
int16_t readADC_Differential_0_1()
Definition ADS1X15.cpp:314
uint8_t getDataRate()
Definition ADS1X15.cpp:294
int16_t _readADC(uint16_t readmode)
Definition ADS1X15.cpp:443
bool isConnected()
Definition ADS1X15.cpp:187
bool isBusy()
Definition ADS1X15.cpp:179
float getMaxVoltage()
Definition ADS1X15.cpp:247
void setDataRate(uint8_t dataRate=4)
Definition ADS1X15.cpp:286
uint32_t getWireClock()
Definition ADS1X15.cpp:377
void requestADC(uint8_t pin)
Definition ADS1X15.cpp:320
uint8_t _address
Definition ADS1X15.h:136
bool isReady()
Definition ADS1X15.h:83
uint8_t _compQueConvert
Definition ADS1X15.h:151
uint16_t _readRegister(uint8_t address, uint8_t reg)
Definition ADS1X15.cpp:484