summaryrefslogtreecommitdiffstats
path: root/src/ADS1115_WE.h
blob: 2316d6a4b84a2c1dbfc75295763bb6205139133c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/******************************************************************************
 *
 * This is a library for the ADS1115 A/D Converter
 *
 * You'll find several example sketches which should enable you to use the library. 
 *
 * You are free to use it, change it or build on it. In case you like it, it would
 * be cool if you give it a star.
 *
 * If you find bugs, please inform me!
 * 
 * Written by Wolfgang (Wolle) Ewald
 * https://wolles-elektronikkiste.de
 *
 * 
 ******************************************************************************/

#ifndef ADS1115_WE_H_
#define ADS1115_WE_H_

#if (ARDUINO >= 100)
 #include "Arduino.h"
#else
 #include "WProgram.h"
#endif

#include <Wire.h>

/* registers */
#define ADS1115_CONV_REG 		0x00 //Conversion Register
#define ADS1115_CONFIG_REG    	0x01 //Configuration Register
#define ADS1115_LO_THRESH_REG   0x02 //Low Threshold Register
#define ADS1115_HI_THRESH_REG   0x03 //High Threshold Register 

/* other */
#define ADS1115_REG_FACTOR 32768
#define ADS1115_REG_RESET_VAL 0x8583

typedef enum ADS1115_COMP_QUE {
	ADS1115_ASSERT_AFTER_1 = 0x0000,
	ADS1115_ASSERT_AFTER_2 = 0x0001,
	ADS1115_ASSERT_AFTER_4 = 0x0002,
	ADS1115_DISABLE_ALERT  = 0x0003
} compQue;

typedef enum ADS1115_LATCH {
	ADS1115_LATCH_DISABLED = 0x0000,
	ADS1115_LATCH_ENABLED  = 0x0004,
} latch;

typedef enum ADS1115_ALERT_POL {
	ADS1115_ACT_LOW  = 0x0000,   
	ADS1115_ACT_HIGH = 0x0008
} alertPol;

typedef enum ADS1115_COMP_MODE{
	ADS1115_MAX_LIMIT = 0x0000,
	ADS1115_WINDOW    = 0x0010
} compMode;

typedef enum ADS1115_CONV_RATE{
	ADS1115_8_SPS	= 0x0000,
	ADS1115_16_SPS	= 0x0020,
	ADS1115_32_SPS	= 0x0040,
	ADS1115_64_SPS	= 0x0050,
	ADS1115_128_SPS	= 0x0080,
	ADS1115_250_SPS	= 0x00A0,
	ADS1115_475_SPS	= 0x00C0,
	ADS1115_860_SPS	= 0x00E0
} convRate;

typedef enum ADS1115_MEASURE_MODE{
	ADS1115_CONTINOUS = 0x0000,
	ADS1115_SINGLE    = 0x0100
} measureMode;

typedef enum ADS1115_RANGE{
	ADS1115_RANGE_6144	= 0x0000,
	ADS1115_RANGE_4096	= 0x0200,
	ADS1115_RANGE_2048  = 0x0400,
	ADS1115_RANGE_1024	= 0x0600,
	ADS1115_RANGE_0512	= 0x0800,
	ADS1115_RANGE_0256	= 0x0A00,
} range;

typedef enum ADS1115_MUX{
	ADS1115_COMP_0_1   = 0x0000,
	ADS1115_COMP_0_3   = 0x1000,
	ADS1115_COMP_1_3   = 0x2000,
	ADS1115_COMP_2_3   = 0x3000,
	ADS1115_COMP_0_GND = 0x4000,
	ADS1115_COMP_1_GND = 0x5000,
	ADS1115_COMP_2_GND = 0x6000,
	ADS1115_COMP_3_GND = 0x7000
} mux;

typedef enum ADS1115_STATUS_OR_START{
	ADS1115_BUSY 		  = 0x0000,
	ADS1115_START_ISREADY = 0x8000
} statusOrStart;


class ADS1115_WE
{
public:	
	ADS1115_WE(int addr);
	ADS1115_WE();			//sets default I2C Address 0x48
  
	void reset();
	bool init();
	void setAlertPinMode(ADS1115_COMP_QUE mode);
	void setAlertLatch(ADS1115_LATCH latch);
	void setAlertPol(ADS1115_ALERT_POL polarity);
	void setAlertModeAndLimit_V(ADS1115_COMP_MODE mode, float hithres, float lothres);
	void setConvRate(ADS1115_CONV_RATE rate);
	void setMeasureMode(ADS1115_MEASURE_MODE mode);
	void setVoltageRange_mV(ADS1115_RANGE range);
	void setCompareChannels(ADS1115_MUX mux);
	bool isBusy();
	void startSingleMeasurement();
	float getResult_V();
	float getResult_mV();
	void setAlertPinToConversionReady();
	void unlatchAlertPin();
	
		
private:
	uint16_t voltageRange;
	ADS1115_MEASURE_MODE deviceMeasureMode;
	int i2cAddress;
	int16_t calcLimit(float rawLimit);
	uint8_t writeRegister(uint8_t reg, uint16_t val);
	uint16_t readRegister(uint8_t reg);

};

#endif