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
You can’t perform that action at this time.