[Lua] CHDK-Test

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

CHDK-Test

Beitragvon msl » 01.12.2010, 14:38

Hallo CHDK-Bastler,

CHDK ist ein dynamisches Projekt. Es fließen laufend Änderungen in das System ein. Da bleibt es nicht aus, dass die eine oder andere Funktion nach Veränderungen nicht mehr richtig benutzbar ist. Das ist nicht schön, aber leider auch nicht immer vermeidbar.

Damit man einen prinzipiellen Funktionscheck ausführen kann, habe ich angefangen, ein Skript zusammenzustellen, dass diverse grundlegende Funktionen testet. So kann man sich schneller einen Überblick verschaffen, wo es evt. klemmt.

Das Skript hat noch einen netten Nebeneffekt. Es kann auch als CHDK-Demo verwendet werden.

Zum Skript selbst:

Es sollte im Wiedergabemodus gestartet werden. Zuerst werden diverse Kamera/CHDK-Infos angezeigt. Als nächstes erfolgt ein Signalton-Test, bei dem das Einschaltsignal ertönen sollte. Dann werden die LEDs angesteuert. Danach wird die Modusumschaltung Wiedergabe/Aufnahme getestet (Achtung Objektiv!). Anschließend wird fokussiert und diverse fototechnische Werte kommen zur Anzeige. Es folgt der DOF-Test mit Anzeige aller relevanten DOF-Werte. Zum Schluß wird die Bewegungserkennung geprüft. Wird eine Bewegung erkannt (Muss natürlich auch erzeugt werden.), endet das Skript.

Alle Text-Ausgaben werden zusätzlich in einer Log-Datei gespeichert (CHDK/LOGS/ LOG0010.txt).

(Anmerkung: Es wird die Anzahl der verbleibenden JPGs angezeigt. Das funktioniert nur, wenn man zwischen Kamerastart und Skript-Start ein Foto gemacht hat. Ansonsten wird hier 0 angezeigt.)

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
--[[
***************************
(c)msl 26/11/2010
thx rudi for Int2Str
***************************
@title Test CHDK-DE Version
]]



function led_test()
    for i=0, 10 do
        cls()
        print("LED-Nr.:", i)
        set_led(i, 1)
        sleep(800)
        set_led(i, 0)
    end
    cls()
end

function mode_test()
    rec, vid, mode=get_mode()
    if rec == false then
        set_record(1)
        sleep(3000)
        set_record(0)
    end
end

function call_focus_test()
    rec, vid, mode=get_mode()
    if rec == false then set_record(1) end
    set_console_layout(5,3,30,10)
    press("shoot_half")
    repeat
        sleep(10)
    until get_shooting() == true
    print("Tv96-Wert", get_tv96())
    print("Av96-Wert", get_av96())
    print("Sv96-Wert", get_sv96())
    print("Bv96-Wert", get_bv96())
    release("shoot_half")
    repeat
        sleep(10)
    until get_shooting() ~= true
    sleep(4000)
end

function md_test()
    repeat
    ret=md_detect_motion()
    until ret~=0
    print("Bewegung erkannt!")
    sleep(1000)
end

function Int2Str(val, f_dist, dpow, unit, fix)
  local sval=tostring(math.abs(val))
  local res=tostring(val)
  if (f_dist==1 and (val<=0 or val>=65535)) then res="inf" end
  if (sval~="nil" and res~="inf" and dpow~=nil) then
    local slen=string.len(sval)
    local scount=math.abs(dpow)
    local least=""
    if (scount==dpow) then
      res=sval..string.rep("0",scount)
      if (fix~=nil) then least=string.rep("0",fix) end
    else
      if (slen<=scount) then
        sval=string.rep("0",scount-slen+1)..sval
        slen=string.len(sval)
      end
      res=string.sub(sval,1,slen-scount)
      least=string.sub(sval,slen-scount+1)
      local l_l=string.len(least)
      if (fix==nil) then
        while (l_l>0 and string.sub(least,l_l)=="0") do
          least=string.sub(least,1,l_l-1)
          l_l=string.len(least)
        end
      else
        if (l_l>math.abs(fix)) then least=string.sub(least,1,fix) end
        if (l_l<math.abs(fix)) then least=least..string.rep("0",fix-l_l) end
      end
    end
    if (string.len(least)>0) then res=res.."."..least end
    if (val<0) then res="-"..res end
  end
  if (unit~=nil and res~="inf" and string.len(unit)>0) then res=res.." "..unit end
  return res
end

function dof_test()
    set_console_layout(5,0,30,14)
    press("shoot_half")
    repeat
        sleep(10)
    until get_shooting() == true
    dofinfo=get_dofinfo()
    release("shoot_half")
    print("SD :",Int2Str(dofinfo.focus,1,0,"mm"))
    print("NL :",Int2Str(dofinfo.near,1,0,"mm"))
    print("FL :",Int2Str(dofinfo.far,1,0,"mm"))
    print("DOF:",Int2Str(dofinfo.dof,1,0,"mm"))
    print("HYP:",Int2Str(dofinfo.hyp_dist,1,0,"mm"))
    print("MSD:",Int2Str(dofinfo.min_stack_dist,1,0,"mm"))
    print("Hyp.-Validität:",dofinfo.hyp_valid)
    print("Fokus-Validität:",dofinfo.focus_valid)
    print("coc:",dofinfo.coc,"µm /",Int2Str(dofinfo.coc,0,-3,"mm"))
    print("Brennweite:",Int2Str(dofinfo.focal_length,0,-3,"mm"))
    print("KB-Brennweite:",Int2Str(dofinfo.eff_focal_length,0,-3,"mm"))
    print("Blende:",Int2Str(dofinfo.aperture,0,-3,"",1))
    sleep(12000)
end

function sound_test()
    play_sound(0)
end

function get_info()
    set_console_layout(5,2,35,13)
    cls()
    bi=get_buildinfo()
    print("Kamera:",bi.platform, bi.platsub)
    print(os.date("%d.%m.%Y %X"))
    nd=get_nd_present()
    if     nd == 0 then print("Irisblende")
    elseif nd == 1 then print("ND-Filter")
    elseif nd == 2 then print("ND-Filter+Irisblende")
    end
    print("Zoomschritte:", get_zoom_steps())
    if (type(get_curve_state) ~= "function") then
        print("RAW-Format: 12 Bit")
    else
        print("RAW-Format: 10 Bit")
    end
    if os.stat("A/CHDK/badpixel.bin") ~= nil then
        print("badpixel.bin verfügbar!")
    else
        print("badpixel.bin nicht verfügbar!")
    end
    print("Akku/Bat:", get_vbatt(), "mV")
    print("SD-Karte:", get_free_disk_space()/1024, "MB frei")
    print("Anzahl JPG:", get_jpg_count())
    print("Anzahl RAW:", get_raw_count())
    if type(call_func_ptr) == "function" or type(call_event_proc) == "function"  then
        print("Native Calls möglich!")
    else
        print("Native Calls nicht möglich!")
    end
    sleep(11000)
end

function print_info(text)
    cls()
    sleep(500)
    set_console_layout(5,5,30,10)
    print(text)
    sleep(2000)
    cls()
    set_console_layout(0,0,25,5)
end


-- start script
wait=2000

print_screen(10)

print_info("Test Kamera-Infos")
get_info()
sleep(wait)

print_info("Test Audio-Signal")
sound_test()
sleep(wait)

print_info("Test LED")
led_test()
sleep(wait)

print_info("Test Modusumschaltung")
mode_test()
sleep(wait)

print_info("Test Fokusieren")
call_focus_test()
sleep(wait)

print_info("Test DOF")
dof_test()
sleep(wait)

print_info("Test MD")
md_test()

print_screen(false)
Erstellt in 0.031 Sekunden, mit GeSHi 1.0.8.9


Vorschläge für weitere Tests sowie Ergänzungen oder Änderungen sind erwünscht.

Gruß msl
Dateianhänge
fncTest.lua
CHDK-Funktionstest
(4.94 KiB) 503-mal heruntergeladen
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: CHDK-Test

Beitragvon Gerhard34 » 01.01.2012, 14:05

Prosit 2012!!!

Der Forum Eintrag ist zwar schon etwas älter aber ich habe das Script als exzellent Lernhilfe gesehen um mit meiner A430 und LUA die ersten Gehschritte zu machen.

Mit diesem shell Script lade ich die lua Datei auf die Kamera und führe sie aus:
cd /home/gerhard/chdkptp
./chdkptp -c -e"u /home/gerhard/Desktop/A430/fncTest.lua A/CHDK/SCRIPTS/fnctest.lua"

echo 'lua loadfile("A/CHDK/SCRIPTS/fnctest.lua")()' | ./chdkptp -c -i


Der Teil Kamera-Info bis Test LED läuft ja sehr zufriedenstellend, nur ab Test Fokusieren sind die Ergbnisse in den einzelnen Testdurchläufen stark unterschiedlich:
  • Manchmal bleibt das Script bereits bei der Modusumschaltung hängen (Objektiv wird ausgefahren und dann flackert nur mehr der Bildschirm),
  • zeitweise läuft es ein Stück weiter und ein Bild wird gemacht und
  • ganz selten geht's bis zur motion dedection.
Alles in Allem sehr merkwürdig!?!

Nach einigen Stunden Tests und steigender Verwunderung habe ich dann das Script einmal nicht vom PC gestartet, sondern direkt auf der Kamera - und plötzlich läuft alles.

Frage an die Runde: habt ihr ähnliche Erfahrungen???

lG
Gerhard
Gerhard34
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Bilder: 0
Registriert: 03.04.2011, 19:52
Kamera(s): A430 (a430-100b-1.1.0-full_BETA_rev_908)


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 21 Gäste