Lua/Scripts: Accurate Intervalometer with power-saving and pre-focus -error!

  • 1 Replies
I've just started CHDK on an A490 with the objective of long interval time lapses of flowerbed as it grows this spring.
Lua/Scripts: Accurate Intervalometer with power-saving and pre-focus - this script looks as though it may have the features I need, but when I run it an error message is generated - :/: unexpected symbol near '('.
I lam using "  (722KB) " from Auto Builder.
I've changed line "if get_prop(67) > 0 then" to "if get_prop(18) > 0 then" as instructed.
I've saved as Lapse.lua to SD card.
Can anyone help me de-bug this error(I'm new to Lua); or suggest an alternative script that would allow say 2 shots per day over a 30 day period? Copy of Lapse Lua attached

I guess you didn't use simple text editor such as notepad but rather a text editor, that produces formated text (word-like).

In your file there is folowing text:

Code: [Select]
{\fonttbl\f0\fmodern\fcharset0 Courier;}

\f0\fs26 \cf2 \cb3 --[[\
Author: Fraser McCrossan\
Tested on G9, should work on most cameras.\
An accurate intervalometer script, with pre-focus and screen power off options.\
 - input is frame interval plus total desired run-time (or "endless")\
 - displays frame count, frame total and remaining time after each frame\
   (in endless mode, displays frame count and elapsed time)\
 - honours the "Display" button during frame delays (so you can\
   get it running then turn off the display to save power)\
 - can turn off the display a given number of frames after starting\
   (might take a couple of frames longer to cycle to correct mode)\
 - can pre-focus before starting then go to manual focus mode\
 - use SET button to exit \
 See bottom of script for main loop.\
@title Time-lapse\
@param s Secs/frame\
@default s 5\
@param h Sequence hours\
@default h 0\
@param m Sequence minutes\
@default m 5\
@param e Endless? 0=No 1=Yes\
@default e 0\
@param f Focus: 0=Every 1=Start\
@default f 0\
@param d Display off frame 0=never\
@default d 0\
-- convert parameters into readable variable names\
secs_frame, hours, minutes, endless, focus_at_start, display_off_frame = s, h, m, (e > 0), (f > 0), d\
props = require "propcase"\
-- derive actual running parameters from the more human-friendly input\
-- parameters\
function calculate_parameters (seconds_per_frame, hours, minutes, start_ticks)\
   local ticks_per_frame = 1000 * secs_frame -- ticks per frame\
   local total_frames = (hours * 3600 + minutes * 60) / secs_frame -- total frames\
   local end_ticks = start_ticks + total_frames * ticks_per_frame -- ticks at end of sequence\
   return ticks_per_frame, total_frames, end_ticks\
function print_status (frame, total_frames, ticks_per_frame, end_ticks, endless)\
   local free = get_jpg_count()\
   if endless then\
      local h, m, s = ticks_to_hms(frame * ticks_per_frame)\
      print("#" .. frame .. ", " .. h .. "h " .. m .. "m " .. s .. "s")\
      local h, m, s = ticks_to_hms(end_ticks - get_tick_count())\
      print(frame .. "/" .. total_frames .. ", " .. h .. "h" .. m .. "m" .. s .. "s/" .. free .. " left")\
function ticks_to_hms (ticks)\
   local secs = (ticks + 500) / 1000 -- round to nearest seconds\
   local s = secs\'a0% 60\
   secs = secs / 60\
   local m = secs\'a0% 60\
   local h = secs / 60\
   return h, m, s\
-- sleep, but using wait_click(); return true if a key was pressed, else false\
function next_frame_sleep (frame, start_ticks, ticks_per_frame)\
   -- this calculates the number of ticks between now and the time of\
   -- the next frame\
   local sleep_time = (start_ticks + frame * ticks_per_frame) - get_tick_count()\
   if sleep_time < 1 then\
      sleep_time = 1\
   return not is_key("no_key")\
-- delay for the appropriate amount of time, but respond to\
-- the display key (allows turning off display to save power)\
-- return true if we should exit, else false\
function frame_delay (frame, start_ticks, ticks_per_frame)\
   -- this returns true while a key has been pressed, and false if\
   -- none\
   while next_frame_sleep (frame, start_ticks, ticks_per_frame) do\
      -- honour the display button\
      if is_key("display") then\
      -- if set key is pressed, indicate that we should stop\
      if is_key("set") then\
return true\
   return false\
-- if the display mode is not the passed mode, click display and return true\
-- otherwise return false\
function seek_display_mode(mode)\
   if get_prop(props.DISPLAY_MODE) == mode then\
      return false\
      click "display"\
      return true\
-- switch to autofocus mode, pre-focus, then go to manual focus mode\
function pre_focus()\
   local focused = false\
   local try = 1\
   while not focused and try <= 5 do\
      print("Pre-focus attempt " .. try)\
      if get_prop(18) > 0 then\
focused = true\
      try = try + 1\
   return focused\
if focus_at_start then\
   if not pre_focus() then\
      print "Unable to reach pre-focus"\
start_ticks = get_tick_count()\
ticks_per_frame, total_frames, end_ticks = calculate_parameters(secs_frame, hours, minutes, start_ticks)\
frame = 1\
original_display_mode = get_prop(props.DISPLAY_MODE)\
target_display_mode = 2 -- off\
print "Press SET to exit"\
while endless or frame <= total_frames do\
   print_status(frame, total_frames, ticks_per_frame, end_ticks, endless)\
   if display_off_frame > 0 and frame >= display_off_frame then\
   if frame_delay(frame, start_ticks, ticks_per_frame) then\
      print "User quit"\
   frame = frame + 1\
-- restore display mode\
if display_off_frame > 0 then\
   while seek_display_mode(original_display_mode) do\
-- restore focus mode\

As you can see, there is not only the Lua code you want to have, but also formating informations (such as "{\fonttbl\f0\fmodern\fcharset0 Courier;}").

Use text editor that saves in plain text format (Notepad on Windows, Kate/Gedit/nano on Linux).
if (2*b || !2*b) {

Compile error: poor Yorick


Related Topics