-
Notifications
You must be signed in to change notification settings - Fork 0
/
ads1115.lua
143 lines (113 loc) · 3.39 KB
/
ads1115.lua
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
139
140
141
142
143
-- Requirements
bit = require("bit")
-- Global variable for i2c
SDA = 2
SCL = 1
-- Global variable for ADS1115
ADDR = 0x48
ADS1115_CONVERTIONDELAY = 8
ADS1015_REG_POINTER_MASK = 0x03
ADS1015_REG_POINTER_CONVERT = 0x00
ADS1015_REG_POINTER_CONFIG = 0x01
ADS1015_REG_POINTER_LOWTHRESH = 0x02
ADS1015_REG_POINTER_HITHRESH = 0x03
ADS1015_REG_CONFIG_MUX_SINGLE_0 = 0x4000
ADS1015_REG_CONFIG_MUX_SINGLE_1 = 0x5000
ADS1015_REG_CONFIG_MUX_SINGLE_2 = 0x6000
ADS1015_REG_CONFIG_MUX_SINGLE_3 = 0x7000
ADS1015_REG_CONFIG_OS_SINGLE = 0x8000
ADS1015_REG_CONFIG_CQUE_NONE = 0x0003
ADS1015_REG_CONFIG_CLAT_NONLAT = 0x0000
ADS1015_REG_CONFIG_CPOL_ACTVLOW = 0x0000
ADS1015_REG_CONFIG_CMODE_TRAD = 0x0000
ADS1015_REG_CONFIG_DR_1600SPS = 0x0080
ADS1015_REG_CONFIG_MODE_SINGLE = 0x0100
-- Functions
function readRegister(address, reg)
i2c.start(0)
i2c.address(0, address, i2c.TRANSMITTER)
i2c.write(0, reg)
i2c.stop(0)
i2c.start(0)
i2c.address(0, address, i2c.RECEIVER)
local all = i2c.read(0, 2)
i2c.stop(0)
local a = string.byte(all)
if a == nil then
a = 0
end
local b = string.byte(all, 2)
if b == nil then
b = 0
end
local ret = 0
ret = bit.bor(ret, a)
ret = bit.lshift(ret, 8)
ret = bit.bor(ret, b)
return ret
end
function writeRegister(address, reg, value)
i2c.start(0)
i2c.address(0, address, i2c.TRANSMITTER)
i2c.write(0, reg)
local high = 0
high = bit.rshift(value, 8)
i2c.write(0, high)
local low = 0
low = bit.band(0xFF)
i2c.write(0, low)
i2c.stop(0)
end
function readADC_SingleEnded(channel)
if channel > 3 then
return 0
end
local config = 0
config = bit.bor(config, ADS1015_REG_CONFIG_CQUE_NONE)
config = bit.bor(config, ADS1015_REG_CONFIG_CLAT_NONLAT)
config = bit.bor(config, ADS1015_REG_CONFIG_CPOL_ACTVLOW)
config = bit.bor(config, ADS1015_REG_CONFIG_CMODE_TRAD)
config = bit.bor(config, ADS1015_REG_CONFIG_DR_1600SPS)
config = bit.bor(config, ADS1015_REG_CONFIG_MODE_SINGLE)
if channel == 0 then
config = bit.bor(config, ADS1015_REG_CONFIG_MUX_SINGLE_0)
elseif channel == 1 then
config = bit.bor(config, ADS1015_REG_CONFIG_MUX_SINGLE_1)
elseif channel == 2 then
config = bit.bor(config, ADS1015_REG_CONFIG_MUX_SINGLE_2)
elseif channel == 3 then
config = bit.bor(config, ADS1015_REG_CONFIG_MUX_SINGLE_3)
end
config = bit.bor(config, ADS1015_REG_CONFIG_OS_SINGLE)
writeRegister(ADDR, ADS1015_REG_POINTER_CONFIG, config)
tmr.delay(ADS1115_CONVERTIONDELAY)
local ret = readRegister(ADDR, ADS1015_REG_POINTER_CONVERT)
return ret
end
print('I2C_SETUP...')
i2c.setup(0, SDA, SCL, i2c.SLOW)
print('SET UP')
function main()
local a = readADC_SingleEnded(0)
if a == nil then
a = 0
end
local b = readADC_SingleEnded(1)
if b == nil then
b = 0
end
local c = readADC_SingleEnded(2)
if c == nil then
c = 0
end
local d = readADC_SingleEnded(3)
if d == nil then
d = 0
end
print("--------")
print("1: " .. a)
print("2: " .. b)
print("3: " .. c)
print("4: " .. d)
end
tmr.alarm(0, 1000, 1, function() main() end )