Skip to content

Instantly share code, notes, and snippets.

@pigeonhill

pigeonhill/HHBS.lua

Last active Oct 8, 2019
Embed
What would you like to do?
Hand Held Bracketing Script
--[[
HHBS
Hand Held Bracketing Script for WA lenses
Version 1.365
Garry George Oct 2019
http://photography.grayheron.net/
--]]
CON = "ON"
COFF = "OFF"
run = false
switched_off = false
min_tv = 0
base_tv = camera.shutter.apex
delay = 0
timer = 0
ev_lift = 0
choices0 = {COFF,CON}
choices1 = {"Float","800","1600","3200"}
AB_running = false
end_count = 0
half_press_dalay = 3000
ab_m = {}
last_key = 0
require("config")
function run_script(m)
if AB_running and (not switched_off) then
if dryos.shooting_card.file_number == end_count then -- switch off AB and reset AB settings
AB_running = false
menu.set("Shoot","Advanced Bracket",0)
menu.set("Advanced Bracket","Bracket type",ab_m[1])
menu.set("Advanced Bracket","Frames",ab_m[2])
menu.set("Advanced Bracket","Sequence",ab_m[3])
menu.set("Advanced Bracket","2-second delay",ab_m[4])
menu.set("Advanced Bracket","ISO shifting",ab_m[5])
menu.set("Advanced Bracket","EV increment",ab_m[6])
end
end
if switched_off then return true end
if run then
base_tv = camera.shutter.apex
sleep(delay)
run = false
min_tv = (menu.get("Auto ETTR","Slowest shutter",0) - 56.0)/8.0
-- set up advanced bracketing for HHBS. Note the script switches AB off after bracketing
ab_m[1] = menu.get("Advanced Bracket","Bracket type",0)
ab_m[2] = menu.get("Advanced Bracket","Frames",2)
ab_m[3] = menu.get("Advanced Bracket","Sequence",2)
ab_m[4] = menu.get("Advanced Bracket","2-second delay",0)
ab_m[5] = menu.get("Advanced Bracket","ISO shifting",1)
ab_m[6] = menu.get("Advanced Bracket","EV increment",1)
menu.set("Advanced Bracket","Bracket type",0)
menu.set("Advanced Bracket","Frames",2)
menu.set("Advanced Bracket","Sequence",2)
menu.set("Advanced Bracket","2-second delay",0)
menu.set("Advanced Bracket","ISO shifting",1)
local del = 0
if Script_Menu.submenu["ISO logic?"].value == "800" then
if camera.iso.apex < 8 then
del = math.floor(8 - camera.iso.apex + 0.5)
end
elseif Script_Menu.submenu["ISO logic?"].value == "1600" then
if camera.iso.apex < 9 then
del = math.floor(9 - camera.iso.apex + 0.5)
end
elseif Script_Menu.submenu["ISO logic?"].value == "3200" then
if camera.iso.apex < 10 then
del = math.floor(10 - camera.iso.apex + 0.5)
end
else -- float the ISO from the (ETTR) base ISO, irrespective of final value
del = ev_lift
end
menu.set("Advanced Bracket","EV increment",del)
end_count = dryos.shooting_card.file_number
AB_running = true
if base_tv > min_tv then
menu.set("Shoot","Advanced Bracket",0)
camera.shoot()
camera.shutter.apex = min_tv
menu.set("Shoot","Advanced Bracket",1)
menu.set("Advanced Bracket","ISO shifting",1)
camera.shoot()
end_count = end_count + 3
else
camera.shutter.apex = min_tv
menu.set("Shoot","Advanced Bracket",1)
menu.set("Advanced Bracket","ISO shifting",1)
camera.shoot()
end_count = end_count + 2
end
else
return true
end
end
function testkeys(kk)
run = false
if switched_off then return true end
if kk == 1 then timer = dryos.ms_clock end
if (kk == 2 and last_key == 1) and ((dryos.ms_clock - timer) > half_press_dalay) then run = true end
last_key = kk
return true
end
Script_Menu = menu.new
{
parent = "Shoot",
name = "HHBS",
help = "Does what it says",
submenu =
{
{
name = "ON or Off?",
help = "Switches the script on & off",
choices = choices0,
update = function(this)
if this.value == "ON" then
switched_off = false
menu.set("Focus","Toggle SGFB",1)
else
switched_off = true
menu.set("Focus","Toggle SGFB",0)
end
end,
},
{
name = "Delay",
help = "Shutter delay in seconds",
min = 0,
max = 5,
value = 1,
update = function(this)
delay = this.value
end,
},
{
name = "ISO logic?",
help = "Helps manages max ISO sensitivities",
help2 = "Float uses ISO Ev lift from the base ISO",
choices = choices1,
},
{
name = "ISO Ev lift",
help = "Lift above base ISO",
min = 3,
max = 5,
value = 4,
update = function(this)
ev_lift = this.value
end,
},
{
name = "Half Press delay",
help = "In seconds",
min = 1,
max = 9,
value = 3,
update = function(this)
half_press_dalay = this.value * 1000
end,
},
}
}
event.shoot_task = run_script
event.keypress = testkeys
config.create_from_menu(Script_Menu) -- keep track of the script's menu state at camera close
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment