CHDK Wiki
Register
Advertisement

Focus Bracketing with set_focus and get_focus[]

Written for/on: Powershot A630, CHDK Build 125 or later required.
Also works on: Powershot SX10 IS

This is a new focus bracketing script. It uses set_focus to set the focus and is faster and more reliable than other scripts.

Script Code(save as "focus2.bas" to your /SCRIPTS/ folder)

rem Author Bubendorf
@title Focus2
@param a Number of ±steps 
@default a 2
@param b Step size [x6]
@default b 6

if a<1 then let a=2
if b<1 then let b=1

sleep 500
get_focus f

for s=-a to a
  g=f
  if s<0 then gosub "negative"
  if s>0 then gosub "positive"
  print "Shoot", s, "(", g, ")"
  set_focus g
  shoot
next s
set_focus f

end

:negative
  for i=s to -1
   g=6*g/(b+6)
  next i
return

:positive
  for i=1 to s
   g=g*b/6+g
  next i
return

A few more additions to the code:

Script Code(save as "focusrange.bas" to your /SCRIPTS/ folder)

rem arne182
rem G12 specific code
@title FocusRange
@param a Number of +steps 
@default a 3
@param b Number of -steps
@default b 3
@param c Focus range in cm
@default c 10
@param d Infinity included, yes = 1
@default d 0

if a<0 then let a=0
if b<0 then let b=0
if c<1 then let c=1
if c>50 then let c=1

rem ------- camera specific section / omit if you are not using G12 -------
y=0
get_prop 133 x
if x=1 then y=y+1 else print "Not in MF mode"
get_prop 12 x
if x=0 then y=y+1 else print "Continuous AF is on!"
if y=2 then goto "continue"
set_focus f
 end
rem ------- camera specific section / omit if you are not using G12 -------

:continue
sleep 500
cls
get_focus f
if f<0 then let f=65530
if f<69 then let b=0
if f>17590 then let a=0
p=b
if (f-(b*c*10)/(a+b))<68 then let b=(f-68)*(a+p)/(10*c) else goto "shoot"
if b<0 then let b=0
if p=b then print "" else let a= a+p-b
print "b adjusted to ", b
print "press Set to proceed"
print "press Shutter to exit"
wait_click

:shoot
x=get_near_limit
y=get_far_limit

g=f-b*c*10/(a+b)
set_focus g
sleep 100
print "Near focus check"
print "press Set to proceed"
print "press Shutter to exit"
wait_click

g=f+a*c*10/(a+b)
set_focus g
sleep 100
print "Far focus check"
print "press Set to proceed"
print "press Shutter to exit"
wait_click

print "waiting for camera"
print "vibrations to stop"
sleep 2000

for s=-b to a
  g=f+s*c*10/(a+b)
  set_focus g
  sleep 100
  get_focus g
  print "Shoot", s, "(", g, ")"
  shoot
next s
  if d=1 then gosub "infinity"

set_focus f

end

:infinity
  g = 65530
  print "Shoot infinity", "(", g, ")"
  set_focus g
  sleep 100
  shoot
return
Advertisement