This one works.
I don't exactly know why but I have added another test just before the lens move (fp2 too late in case fp2=lens.focus_distance is refreshed later); it appears that it is this test that triggers the shots !
It is to be simplified (debug, strong typing, slow timings)
In the infinity range, a photo is taken at each step of the focus motor (manage infinity shots : to be modified)
Here is the script (to share if needed)
-- strict type : number/string not interchangeable
-- timings : 2nd chance for fp2
require('logger')
focus_log = nil
soft_limit = false
infinity = 100000
epsilon = 0.00001
dir=0
function move()
local fp1,fp2 = 0,0
local st_fp1,st_fp2 = "void","void"
local st_dir = "void"
local istep = 0
st_fp2 = tostring(fp2)
st_dir = tostring(dir)
fp2 = tonumber(lens.focus_distance)
st_fp2 = tostring( fp2)
printf(" --- start move : fp1,fp2 = %s , %s direction = %s \n",st_fp1,st_fp2,st_dir)
istep = 0
while true do
msleep(100) -- to let things stabilize if needed
fp2 = tonumber(lens.focus_distance)
st_fp2 = tostring( fp2)
printf("- reenter loop : step = %s - fp1,fp2 = %s , %s \n",istep, st_fp1, st_fp2)
if ( tonumber(fp1) < tonumber(fp2) ) then -- last time test if fp2 was refreshed too late
printf(" - fp2<>fp1 (fp2 too late) fp1,fp2 = %s , %s \n",st_fp1,st_fp2)
shoot()
elseif (tonumber(fp2) > infinity) and soft_limit then -- near infinity
printf(" - near infinity (fp2 too late) fp1,fp2 = %s , %s \n",st_fp1,st_fp2)
manage_infinity_shots()
break
elseif not soft_limit then
printf(" - near infinity (fp2 too late) error : did not manage infinity shots")
break
end
fp1 = tonumber(fp2) -- transfer values just before the move
st_fp1 = tostring( fp1)
-- move
soft_limit = lens.focus( dir, 1, true) -- HERE it is !!!!!!!!!!!!!!!!!!!!!!
istep = istep+1
msleep(100) -- with hope to get fp2 refreshed
fp2 = tonumber(lens.focus_distance)
st_fp2=tostring( fp2)
printf("- loop after lens move: step = %s - fp1,fp2 = %s , %s \n",istep, st_fp1,st_fp2)
if ( tonumber(fp1) < tonumber(fp2) ) then -- if new big step (step function)
printf(" - fp2<>fp1 : fp1,fp2 = %s , %s \n",st_fp1,st_fp2)
shoot()
fp1 = tonumber(fp2)
st_fp1 = tostring( fp1)
elseif (tonumber(fp2) > infinity) and soft_limit then -- near infinity
printf(" - near infinity : fp1,fp2 = %s , %s \n",st_fp1,st_fp2)
manage_infinity_shots()
break
elseif not soft_limit then
printf(" - near infinity : error : did not manage infinity shots")
break
end
end
printf(" end of move : fp1,fp2 = %s , %s \n",st_fp1,st_fp2)
end
-- new algorithm to be implemented for infinity range
function manage_infinity_shots()
while lens.focus( dir, 1, true) do
shoot()
end
end
function printf( format_string, ...)
focus_log:writef( format_string, ...)
end
function shoot()
msleep(1000) -- wait for other tasks to finish
printf(" shoot \n")
camera.shoot(64, false)
msleep(3000) -- wait for camera.shoot to finish
end
function start()
lv.start()
focus_log = logger("test_wt.log")
dir = -1
move()
dir = 1
--move()
dir = -1
--move()
focus_log:close()
end
scrnshot_menu = menu.new
{
name = "myTest",
select = function(this)
task.create(start)
end
}
If needed, the log to show that the "fp2 too late" is used !
===============================================================================
ML/SCRIPTS/TSTSTACK.LUA - 2016-7-2 20:25:01
===============================================================================
--- start move : fp1,fp2 = void , 380 direction = -1
- reenter loop : step = 0 - fp1,fp2 = void , 380
- fp2<>fp1 (fp2 too late) fp1,fp2 = void , 380
shoot
- loop after lens move: step = 1 - fp1,fp2 = 380 , 380
- reenter loop : step = 1 - fp1,fp2 = 380 , 380
- loop after lens move: step = 2 - fp1,fp2 = 380 , 380
- reenter loop : step = 2 - fp1,fp2 = 380 , 400
- fp2<>fp1 (fp2 too late) fp1,fp2 = 380 , 400
shoot
- loop after lens move: step = 3 - fp1,fp2 = 400 , 400
- reenter loop : step = 3 - fp1,fp2 = 400 , 400
- loop after lens move: step = 4 - fp1,fp2 = 400 , 400
- reenter loop : step = 4 - fp1,fp2 = 400 , 400
- loop after lens move: step = 5 - fp1,fp2 = 400 , 400
- reenter loop : step = 5 - fp1,fp2 = 400 , 400
- loop after lens move: step = 6 - fp1,fp2 = 400 , 400
- reenter loop : step = 6 - fp1,fp2 = 400 , 400
- loop after lens move: step = 7 - fp1,fp2 = 400 , 400
- reenter loop : step = 7 - fp1,fp2 = 400 , 400
- loop after lens move: step = 8 - fp1,fp2 = 400 , 400
- reenter loop : step = 8 - fp1,fp2 = 400 , 400
- loop after lens move: step = 9 - fp1,fp2 = 400 , 400
- reenter loop : step = 9 - fp1,fp2 = 400 , 400
- loop after lens move: step = 10 - fp1,fp2 = 400 , 400
- reenter loop : step = 10 - fp1,fp2 = 400 , 400
- loop after lens move: step = 11 - fp1,fp2 = 400 , 400
- reenter loop : step = 11 - fp1,fp2 = 400 , 400
- loop after lens move: step = 12 - fp1,fp2 = 400 , 400
- reenter loop : step = 12 - fp1,fp2 = 400 , 400
- loop after lens move: step = 13 - fp1,fp2 = 400 , 400
- reenter loop : step = 13 - fp1,fp2 = 400 , 400
- loop after lens move: step = 14 - fp1,fp2 = 400 , 400
- reenter loop : step = 14 - fp1,fp2 = 400 , 400
- loop after lens move: step = 15 - fp1,fp2 = 400 , 400
- reenter loop : step = 15 - fp1,fp2 = 400 , 400
- loop after lens move: step = 16 - fp1,fp2 = 400 , 400
- reenter loop : step = 16 - fp1,fp2 = 400 , 400
- loop after lens move: step = 17 - fp1,fp2 = 400 , 400
- reenter loop : step = 17 - fp1,fp2 = 400 , 400
- loop after lens move: step = 18 - fp1,fp2 = 400 , 400
- reenter loop : step = 18 - fp1,fp2 = 400 , 400
- loop after lens move: step = 19 - fp1,fp2 = 400 , 400
- reenter loop : step = 19 - fp1,fp2 = 400 , 400
- loop after lens move: step = 20 - fp1,fp2 = 400 , 400
- reenter loop : step = 20 - fp1,fp2 = 400 , 400
- loop after lens move: step = 21 - fp1,fp2 = 400 , 400
- reenter loop : step = 21 - fp1,fp2 = 400 , 400
- loop after lens move: step = 22 - fp1,fp2 = 400 , 400
- reenter loop : step = 22 - fp1,fp2 = 400 , 400
- loop after lens move: step = 23 - fp1,fp2 = 400 , 400
- reenter loop : step = 23 - fp1,fp2 = 400 , 400
- loop after lens move: step = 24 - fp1,fp2 = 400 , 400
- reenter loop : step = 24 - fp1,fp2 = 400 , 400
- loop after lens move: step = 25 - fp1,fp2 = 400 , 400
- reenter loop : step = 25 - fp1,fp2 = 400 , 400
- loop after lens move: step = 26 - fp1,fp2 = 400 , 400
- reenter loop : step = 26 - fp1,fp2 = 400 , 400
- loop after lens move: step = 27 - fp1,fp2 = 400 , 400
- reenter loop : step = 27 - fp1,fp2 = 400 , 400
- loop after lens move: step = 28 - fp1,fp2 = 400 , 400
- reenter loop : step = 28 - fp1,fp2 = 400 , 400
- loop after lens move: step = 29 - fp1,fp2 = 400 , 400
- reenter loop : step = 29 - fp1,fp2 = 400 , 400
- loop after lens move: step = 30 - fp1,fp2 = 400 , 400
- reenter loop : step = 30 - fp1,fp2 = 400 , 400
- loop after lens move: step = 31 - fp1,fp2 = 400 , 400
- reenter loop : step = 31 - fp1,fp2 = 400 , 400
- loop after lens move: step = 32 - fp1,fp2 = 400 , 400
- reenter loop : step = 32 - fp1,fp2 = 400 , 400
- loop after lens move: step = 33 - fp1,fp2 = 400 , 400
- reenter loop : step = 33 - fp1,fp2 = 400 , 400
- loop after lens move: step = 34 - fp1,fp2 = 400 , 400
- reenter loop : step = 34 - fp1,fp2 = 400 , 400
- loop after lens move: step = 35 - fp1,fp2 = 400 , 400
- reenter loop : step = 35 - fp1,fp2 = 400 , 400
- loop after lens move: step = 36 - fp1,fp2 = 400 , 430
- fp2<>fp1 : fp1,fp2 = 400 , 430
shoot
- reenter loop : step = 36 - fp1,fp2 = 430 , 430
- loop after lens move: step = 37 - fp1,fp2 = 430 , 430
- reenter loop : step = 37 - fp1,fp2 = 430 , 430
- loop after lens move: step = 38 - fp1,fp2 = 430 , 430
- reenter loop : step = 38 - fp1,fp2 = 430 , 430
- loop after lens move: step = 39 - fp1,fp2 = 430 , 430
- reenter loop : step = 39 - fp1,fp2 = 430 , 430
- loop after lens move: step = 40 - fp1,fp2 = 430 , 430
- reenter loop : step = 40 - fp1,fp2 = 430 , 430
- loop after lens move: step = 41 - fp1,fp2 = 430 , 430
- reenter loop : step = 41 - fp1,fp2 = 430 , 430
- loop after lens move: step = 42 - fp1,fp2 = 430 , 430
- reenter loop : step = 42 - fp1,fp2 = 430 , 430
- loop after lens move: step = 43 - fp1,fp2 = 430 , 430
- reenter loop : step = 43 - fp1,fp2 = 430 , 430
- loop after lens move: step = 44 - fp1,fp2 = 430 , 430
- reenter loop : step = 44 - fp1,fp2 = 430 , 430
- loop after lens move: step = 45 - fp1,fp2 = 430 , 430
- reenter loop : step = 45 - fp1,fp2 = 430 , 430
- loop after lens move: step = 46 - fp1,fp2 = 430 , 430
- reenter loop : step = 46 - fp1,fp2 = 430 , 430
- loop after lens move: step = 47 - fp1,fp2 = 430 , 430
- reenter loop : step = 47 - fp1,fp2 = 430 , 430
- loop after lens move: step = 48 - fp1,fp2 = 430 , 430
- reenter loop : step = 48 - fp1,fp2 = 430 , 430
- loop after lens move: step = 49 - fp1,fp2 = 430 , 430
- reenter loop : step = 49 - fp1,fp2 = 430 , 430
- loop after lens move: step = 50 - fp1,fp2 = 430 , 430
- reenter loop : step = 50 - fp1,fp2 = 430 , 430
- loop after lens move: step = 51 - fp1,fp2 = 430 , 430
- reenter loop : step = 51 - fp1,fp2 = 430 , 430
- loop after lens move: step = 52 - fp1,fp2 = 430 , 430
- reenter loop : step = 52 - fp1,fp2 = 430 , 430
- loop after lens move: step = 53 - fp1,fp2 = 430 , 430
- reenter loop : step = 53 - fp1,fp2 = 430 , 430
- loop after lens move: step = 54 - fp1,fp2 = 430 , 430
- reenter loop : step = 54 - fp1,fp2 = 430 , 430
- loop after lens move: step = 55 - fp1,fp2 = 430 , 430
- reenter loop : step = 55 - fp1,fp2 = 430 , 430
- loop after lens move: step = 56 - fp1,fp2 = 430 , 430
- reenter loop : step = 56 - fp1,fp2 = 430 , 430
- loop after lens move: step = 57 - fp1,fp2 = 430 , 430
- reenter loop : step = 57 - fp1,fp2 = 430 , 430
- loop after lens move: step = 58 - fp1,fp2 = 430 , 430
- reenter loop : step = 58 - fp1,fp2 = 430 , 430
- loop after lens move: step = 59 - fp1,fp2 = 430 , 430
- reenter loop : step = 59 - fp1,fp2 = 430 , 430
- loop after lens move: step = 60 - fp1,fp2 = 430 , 430
- reenter loop : step = 60 - fp1,fp2 = 430 , 430
- loop after lens move: step = 61 - fp1,fp2 = 430 , 430
- reenter loop : step = 61 - fp1,fp2 = 430 , 430
- loop after lens move: step = 62 - fp1,fp2 = 430 , 430
- reenter loop : step = 62 - fp1,fp2 = 430 , 430
- loop after lens move: step = 63 - fp1,fp2 = 430 , 430
- reenter loop : step = 63 - fp1,fp2 = 430 , 430
- loop after lens move: step = 64 - fp1,fp2 = 430 , 430
- reenter loop : step = 64 - fp1,fp2 = 430 , 430
- loop after lens move: step = 65 - fp1,fp2 = 430 , 430
- reenter loop : step = 65 - fp1,fp2 = 430 , 430
- loop after lens move: step = 66 - fp1,fp2 = 430 , 430
- reenter loop : step = 66 - fp1,fp2 = 430 , 470
- fp2<>fp1 (fp2 too late) fp1,fp2 = 430 , 470
shoot
- loop after lens move: step = 67 - fp1,fp2 = 470 , 430
- reenter loop : step = 67 - fp1,fp2 = 470 , 470
- loop after lens move: step = 68 - fp1,fp2 = 470 , 470
- reenter loop : step = 68 - fp1,fp2 = 470 , 470
- loop after lens move: step = 69 - fp1,fp2 = 470 , 470
......
- loop after lens move: step = 368 - fp1,fp2 = 5950 , 5950
- reenter loop : step = 368 - fp1,fp2 = 5950 , 5950
- loop after lens move: step = 369 - fp1,fp2 = 5950 , 5950
- reenter loop : step = 369 - fp1,fp2 = 5950 , 5950
- loop after lens move: step = 370 - fp1,fp2 = 5950 , 5950
- reenter loop : step = 370 - fp1,fp2 = 5950 , 5950
- loop after lens move: step = 371 - fp1,fp2 = 5950 , 5950
- reenter loop : step = 371 - fp1,fp2 = 5950 , 5950
- loop after lens move: step = 372 - fp1,fp2 = 5950 , 5950
- reenter loop : step = 372 - fp1,fp2 = 5950 , 5950
- loop after lens move: step = 373 - fp1,fp2 = 5950 , 5950
- reenter loop : step = 373 - fp1,fp2 = 5950 , 5950
- loop after lens move: step = 374 - fp1,fp2 = 5950 , 5950
- reenter loop : step = 374 - fp1,fp2 = 5950 , 5950
- loop after lens move: step = 375 - fp1,fp2 = 5950 , 5950
- reenter loop : step = 375 - fp1,fp2 = 5950 , 5950
- loop after lens move: step = 376 - fp1,fp2 = 5950 , 5950
- reenter loop : step = 376 - fp1,fp2 = 5950 , 655350
- fp2<>fp1 (fp2 too late) fp1,fp2 = 5950 , 655350
shoot
- loop after lens move: step = 377 - fp1,fp2 = 655350 , 655350
- near infinity : fp1,fp2 = 655350 , 655350
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
shoot
end of move : fp1,fp2 = 655350 , 655350