1
1
//
2
2
// FILE: ADS1X15.cpp
3
3
// AUTHOR: Rob Tillaart
4
- // VERSION: 0.2.7
4
+ // VERSION: 0.3.0
5
5
// DATE: 2013-03-24
6
6
// PUPROSE: Arduino library for ADS1015 and ADS1115
7
7
// URL: https://github.com/RobTillaart/ADS1X15
8
8
//
9
- // HISTORY:
10
- // 0.0.0 2013-03-24 initial version
11
- // 0.0.1 2013-03-24 first working version
12
- // 0.1.0 2017-07-31 removed pre 1.0 support; added getVoltage
13
- // 0.2.0 2020-04-08 initial release; refactor ad fundum;
14
- // 0.2.1 2020-08-15 fix issue 2 gain; refactor
15
- // 0.2.2 2020-08-18 add begin(sda, scl) for ESP32
16
- // 0.2.3 2020-08-20 add comparator code + async mode
17
- // 0.2.4 2020-08-26 check readme.md and minor fixes
18
- // 0.2.5 2020-08-26 add missing readADC_Differential_X_X()
19
- // 0.2.6 2020-09-01 fix #12 - fix getMaxVoltage + minor refactor
20
- // 0.2.7 2020-09-27 redo readRegister() + getValue() + getError()
9
+ // HISTORY:
10
+ // 0.0.0 2013-03-24 initial version
11
+ // 0.0.1 2013-03-24 first working version
12
+ // 0.1.0 2017-07-31 removed pre 1.0 support; added getVoltage
13
+ // 0.2.0 2020-04-08 initial release; refactor ad fundum;
14
+ // 0.2.1 2020-08-15 fix issue 2 gain; refactor
15
+ // 0.2.2 2020-08-18 add begin(sda, scl) for ESP32
16
+ // 0.2.3 2020-08-20 add comparator code + async mode
17
+ // 0.2.4 2020-08-26 check readme.md and minor fixes
18
+ // 0.2.5 2020-08-26 add missing readADC_Differential_X_X()
19
+ // 0.2.6 2020-09-01 fix #12 - fix getMaxVoltage + minor refactor
20
+ // 0.2.7 2020-09-27 redo readRegister() + getValue() + getError()
21
+ // 0.3.0 2021-03-29 add Wire parameter to constructors.
21
22
22
23
23
24
#include " ADS1X15.h"
@@ -121,35 +122,6 @@ differs for different devices, check datasheet or readme.md
121
122
#define ADS_CONF_COMP 0x20
122
123
123
124
124
- // ///////////////////////////////////////////////////////////////////////
125
- //
126
- // STATIC MEMBERS
127
- //
128
- static bool writeRegister (uint8_t address, uint8_t reg, uint16_t value)
129
- {
130
- Wire.beginTransmission (address);
131
- Wire.write ((uint8_t )reg);
132
- Wire.write ((uint8_t )(value >> 8 ));
133
- Wire.write ((uint8_t )(value & 0xFF ));
134
- return (Wire.endTransmission () == 0 );
135
- }
136
-
137
- static uint16_t readRegister (uint8_t address, uint8_t reg)
138
- {
139
- Wire.beginTransmission (address);
140
- Wire.write (reg);
141
- Wire.endTransmission ();
142
-
143
- int rv = Wire.requestFrom (address, (uint8_t ) 2 );
144
- if (rv == 2 )
145
- {
146
- uint16_t value = Wire.read () << 8 ;
147
- value += Wire.read ();
148
- return value;
149
- }
150
- return 0x0000 ;
151
- }
152
-
153
125
// ////////////////////////////////////////////////////
154
126
//
155
127
// BASE CONSTRUCTOR
@@ -168,30 +140,33 @@ ADS1X15::ADS1X15()
168
140
#if defined (ESP8266) || defined(ESP32)
169
141
bool ADS1X15::begin (uint8_t sda, uint8_t scl)
170
142
{
171
- Wire.begin (sda, scl);
143
+ _wire = &Wire;
144
+ _wire->begin (sda, scl);
172
145
if ((_address < 0x48 ) || (_address > 0x4B )) return false ;
146
+ if (! isConnected ()) return false ;
173
147
return true ;
174
148
}
175
149
#endif
176
150
177
151
bool ADS1X15::begin ()
178
152
{
179
- Wire. begin ();
153
+ _wire-> begin ();
180
154
if ((_address < 0x48 ) || (_address > 0x4B )) return false ;
155
+ if (! isConnected ()) return false ;
181
156
return true ;
182
157
}
183
158
184
159
bool ADS1X15::isBusy ()
185
160
{
186
- uint16_t val = readRegister (_address, ADS1X15_REG_CONFIG);
161
+ uint16_t val = _readRegister (_address, ADS1X15_REG_CONFIG);
187
162
if ((val & ADS1X15_OS_NOT_BUSY) != 0 ) return false ;
188
163
return true ;
189
164
}
190
165
191
166
bool ADS1X15::isConnected ()
192
167
{
193
- Wire. beginTransmission (_address);
194
- return (Wire. endTransmission () == 0 );
168
+ _wire-> beginTransmission (_address);
169
+ return (_wire-> endTransmission () == 0 );
195
170
}
196
171
197
172
void ADS1X15::setGain (uint8_t gain)
@@ -318,29 +293,29 @@ void ADS1X15::requestADC(uint8_t pin)
318
293
319
294
int16_t ADS1X15::getValue ()
320
295
{
321
- int16_t raw = readRegister (_address, ADS1X15_REG_CONVERT);
296
+ int16_t raw = _readRegister (_address, ADS1X15_REG_CONVERT);
322
297
if (_bitShift) raw >>= _bitShift; // Shift 12-bit results
323
298
return raw;
324
299
}
325
300
326
301
void ADS1X15::setComparatorThresholdLow (int16_t lo)
327
302
{
328
- writeRegister (_address, ADS1X15_REG_LOW_THRESHOLD, lo);
303
+ _writeRegister (_address, ADS1X15_REG_LOW_THRESHOLD, lo);
329
304
};
330
305
331
306
int16_t ADS1X15::getComparatorThresholdLow ()
332
307
{
333
- return readRegister (_address, ADS1X15_REG_LOW_THRESHOLD);
308
+ return _readRegister (_address, ADS1X15_REG_LOW_THRESHOLD);
334
309
};
335
310
336
311
void ADS1X15::setComparatorThresholdHigh (int16_t hi)
337
312
{
338
- writeRegister (_address, ADS1X15_REG_HIGH_THRESHOLD, hi);
313
+ _writeRegister (_address, ADS1X15_REG_HIGH_THRESHOLD, hi);
339
314
};
340
315
341
316
int16_t ADS1X15::getComparatorThresholdHigh ()
342
317
{
343
- return readRegister (_address, ADS1X15_REG_HIGH_THRESHOLD);
318
+ return _readRegister (_address, ADS1X15_REG_HIGH_THRESHOLD);
344
319
};
345
320
346
321
int8_t ADS1X15::getError ()
@@ -352,7 +327,7 @@ int8_t ADS1X15::getError()
352
327
353
328
// ////////////////////////////////////////////////////
354
329
//
355
- // PRIVATE
330
+ // PROTECTED
356
331
//
357
332
int16_t ADS1X15::_readADC (uint16_t readmode)
358
333
{
@@ -383,17 +358,43 @@ void ADS1X15::_requestADC(uint16_t readmode)
383
358
if (_compLatch) config |= ADS1X15_COMP_LATCH;
384
359
else config |= ADS1X15_COMP_NON_LATCH; // bit 2 ALERT latching
385
360
config |= _compQueConvert; // bit 0..1 ALERT mode
386
- writeRegister (_address, ADS1X15_REG_CONFIG, config);
361
+ _writeRegister (_address, ADS1X15_REG_CONFIG, config);
362
+ }
363
+
364
+ bool ADS1X15::_writeRegister (uint8_t address, uint8_t reg, uint16_t value)
365
+ {
366
+ _wire->beginTransmission (address);
367
+ _wire->write ((uint8_t )reg);
368
+ _wire->write ((uint8_t )(value >> 8 ));
369
+ _wire->write ((uint8_t )(value & 0xFF ));
370
+ return (_wire->endTransmission () == 0 );
371
+ }
372
+
373
+ uint16_t ADS1X15::_readRegister (uint8_t address, uint8_t reg)
374
+ {
375
+ _wire->beginTransmission (address);
376
+ _wire->write (reg);
377
+ _wire->endTransmission ();
378
+
379
+ int rv = _wire->requestFrom (address, (uint8_t ) 2 );
380
+ if (rv == 2 )
381
+ {
382
+ uint16_t value = _wire->read () << 8 ;
383
+ value += _wire->read ();
384
+ return value;
385
+ }
386
+ return 0x0000 ;
387
387
}
388
388
389
389
390
390
// /////////////////////////////////////////////////////////////////////////
391
391
//
392
392
// ADS1013
393
393
//
394
- ADS1013::ADS1013 (uint8_t address)
394
+ ADS1013::ADS1013 (uint8_t address, TwoWire *wire )
395
395
{
396
396
_address = address;
397
+ _wire = wire;
397
398
_config = ADS_CONF_NOCOMP | ADS_CONF_NOGAIN | ADS_CONF_RES_12 | ADS_CONF_CHAN_1;
398
399
_conversionDelay = ADS1015_CONVERSION_DELAY;
399
400
_bitShift = 4 ;
@@ -405,9 +406,10 @@ ADS1013::ADS1013(uint8_t address)
405
406
//
406
407
// ADS1014
407
408
//
408
- ADS1014::ADS1014 (uint8_t address)
409
+ ADS1014::ADS1014 (uint8_t address, TwoWire *wire )
409
410
{
410
411
_address = address;
412
+ _wire = wire;
411
413
_config = ADS_CONF_COMP | ADS_CONF_GAIN | ADS_CONF_RES_12 | ADS_CONF_CHAN_1;
412
414
_conversionDelay = ADS1015_CONVERSION_DELAY;
413
415
_bitShift = 4 ;
@@ -419,9 +421,10 @@ ADS1014::ADS1014(uint8_t address)
419
421
//
420
422
// ADS1015
421
423
//
422
- ADS1015::ADS1015 (uint8_t address)
424
+ ADS1015::ADS1015 (uint8_t address, TwoWire *wire )
423
425
{
424
426
_address = address;
427
+ _wire = wire;
425
428
_config = ADS_CONF_COMP | ADS_CONF_GAIN | ADS_CONF_RES_12 | ADS_CONF_CHAN_4;
426
429
_conversionDelay = ADS1015_CONVERSION_DELAY;
427
430
_bitShift = 4 ;
@@ -475,9 +478,10 @@ void ADS1015::requestADC_Differential_2_3()
475
478
//
476
479
// ADS1113
477
480
//
478
- ADS1113::ADS1113 (uint8_t address)
481
+ ADS1113::ADS1113 (uint8_t address, TwoWire *wire )
479
482
{
480
483
_address = address;
484
+ _wire = wire;
481
485
_config = ADS_CONF_NOCOMP | ADS_CONF_NOGAIN | ADS_CONF_RES_16 | ADS_CONF_CHAN_1;
482
486
_conversionDelay = ADS1115_CONVERSION_DELAY;
483
487
_bitShift = 0 ;
@@ -489,9 +493,10 @@ ADS1113::ADS1113(uint8_t address)
489
493
//
490
494
// ADS1114
491
495
//
492
- ADS1114::ADS1114 (uint8_t address)
496
+ ADS1114::ADS1114 (uint8_t address, TwoWire *wire )
493
497
{
494
498
_address = address;
499
+ _wire = wire;
495
500
_config = ADS_CONF_COMP | ADS_CONF_GAIN | ADS_CONF_RES_16 | ADS_CONF_CHAN_1;
496
501
_conversionDelay = ADS1115_CONVERSION_DELAY;
497
502
_bitShift = 0 ;
@@ -503,9 +508,10 @@ ADS1114::ADS1114(uint8_t address)
503
508
//
504
509
// ADS1115
505
510
//
506
- ADS1115::ADS1115 (uint8_t address)
511
+ ADS1115::ADS1115 (uint8_t address, TwoWire *wire )
507
512
{
508
513
_address = address;
514
+ _wire = wire;
509
515
_config = ADS_CONF_COMP | ADS_CONF_GAIN | ADS_CONF_RES_16 | ADS_CONF_CHAN_4;
510
516
_conversionDelay = ADS1115_CONVERSION_DELAY;
511
517
_bitShift = 0 ;
0 commit comments