_PROMPT=""
--MCP23017 x20
--MCP23017 X21
-- I2C Setup
id=0
intax20 = 5
intax21 = 1
sda=6
scl=7
PortA = 0x12
PortB = 0x13
print("Canon 1200D timeslider.")
print("Version 26022015 ")
print("-----------------------")
TimePicDelay = 6 -- Sekunder
TakeTotalPic = 5 -- Number of picture to take.
print("Antal billeder at tage : "..TakeTotalPic.." stk.")
print("Pause mellem billeder : "..TimePicDelay.. " sekunder")
-- initialize i2c, set pin6 as sda, set pin7 as scl
i2c.setup(id,sda,scl,i2c.SLOW)
-- user defined function: read from reg_addr content of dev_addr
function read_reg(dev_addr, reg_addr)
i2c.start(id)
i2c.address(id, dev_addr ,i2c.TRANSMITTER)
i2c.write(id,reg_addr)
i2c.stop(id)
i2c.start(id)
i2c.address(id, dev_addr,i2c.RECEIVER)
c=i2c.read(id,1)
i2c.stop(id)
return c
end
function write_reg(dev_addr, reg_addr, reg_val)
i2c.start(id)
i2c.address(id, dev_addr, i2c.TRANSMITTER)
i2c.write(id, reg_addr)
i2c.write(id, reg_val)
i2c.stop(id)
end
-- Int MCP23017 Addr 0x20
write_reg(0x20, 0x00, 0xff) -- set Port A to input
write_reg(0x20, 0x02, 0xff) -- set Port A to input invert.
write_reg(0x20, 0x0c, 0xff) -- set Port A to input and pullup.
write_reg(0x20, 0x01, 0x00) -- set Port B to output
-- Function til at tage billedet med.
-- Port Bx20 Bit 7 Hoej Saa lav
-- Port Bx20 Bit 6 Hoej Saa lav
function f_take_pic()
write_reg(0x20, PortB, bit.set(string.byte(read_reg(0x20, PortB)),6))
tmr.delay(500000)
write_reg(0x20, PortB, bit.clear(string.byte(read_reg(0x20, PortB)),6))
tmr.delay(500000)
write_reg(0x20, PortB, bit.set(string.byte(read_reg(0x20, PortB)),7))
tmr.delay(500000)
write_reg(0x20, PortB, bit.clear(string.byte(read_reg(0x20, PortB)),7))
end
--- Main program ----
for i = 1, TakeTotalPic do
tmr.delay(1000000*TimePicDelay)
reg = read_reg(0x20, PortA) -- Port A (input)
if string.byte(reg) > 0 then
print(string.byte(reg))
end
print("Billede nr. " .. i.." taget")
f_take_pic()
tmr.wdclr()
end
print("Alle billeder taget.\nProgram slut")
_PROMPT=nil