yea
This commit is contained in:
59
lua/8-mosfet.lua
Normal file
59
lua/8-mosfet.lua
Normal file
@ -0,0 +1,59 @@
|
||||
sda = 23 -- pins as on Adafruit Huzzah32 silkscreen
|
||||
scl = 22
|
||||
id = i2c.HW0 -- hardware interface
|
||||
speed = i2c.SLOW
|
||||
|
||||
-- values for TCA9534A
|
||||
i2c_addr = 0x3F
|
||||
|
||||
-- initialize i2c software interface
|
||||
i2c.setup(id, sda, scl, speed)
|
||||
|
||||
port_input = 0x00
|
||||
port_output = 0x01
|
||||
reg_polarity = 0x02
|
||||
reg_config = 0x03
|
||||
|
||||
function write_reg(addr, reg, data, callback)
|
||||
i2c.start(id)
|
||||
i2c.address(id, dev_address, i2c.TRANSMITTER)
|
||||
i2c.write(id, reg, data, true)
|
||||
i2c.stop(id)
|
||||
return i2c.transfer(id, callback, 5000)
|
||||
end
|
||||
|
||||
function read_reg(dev_address, dev_register, callback)
|
||||
i2c.start(id)
|
||||
i2c.address(id, dev_address, i2c.TRANSMITTER)
|
||||
i2c.write(id, dev_register)
|
||||
i2c.start(id) -- repeated start condition
|
||||
i2c.address(id, dev_address, i2c.RECEIVER)
|
||||
i2c.read(id, 1)
|
||||
i2c.stop(id)
|
||||
return i2c.transfer(id, callback, 5000)
|
||||
end
|
||||
|
||||
write_reg(i2c_addr, reg_config, 0x00, function(_,_) print("8-mosfet: reg_config done") end)
|
||||
|
||||
function set_mosfet(value)
|
||||
write_reg(i2c_addr, reg_config, value, function(_,a)
|
||||
print("set mosfet")
|
||||
end)
|
||||
end
|
||||
|
||||
mosfet_value = 0xFF
|
||||
function publish_status(value)
|
||||
mosfet_value = read_reg(i2c_addr, reg_output)
|
||||
for i = 0,8 do
|
||||
oskar_m:publish("/shannon/kontrol/relay/"..i, bit.band(bit.rshift(mosfet_value, i), 0x1), 0, 0)
|
||||
end
|
||||
end
|
||||
|
||||
oskar_topichandle["/shannon/kontrol/relay"] = function (client, topic, data)
|
||||
n = tonumber(string.sub(topic, -1))
|
||||
if n<8 and n>=0 then
|
||||
if data then mosfet_value = bit.band(mosfet_value, bit.lshift(1, n))
|
||||
else mosfet_value = bit.bor(mosfet_value, bit.bnot(bit.lshift(1, n))) end
|
||||
set_mosfet(mosfet_value)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user