[kein Feedback] SX20IS RC Zoom Control Rc-CHDK2

Sx, Sxx, Sxxx, SX1, SXxx, SX1xx, SX2xx, SX4xx, SX5xx, SX6xx, SX7xx

[kein Feedback] SX20IS RC Zoom Control Rc-CHDK2

Beitragvon Rex-600 » 06.10.2012, 21:36

Hallo CHDK-User,
ich starte hier gleich mit einer Frage bzw. Problematik.
Ich habe mir das Rc-CHDK2 von Peter Engels zugelegt (http://skyware.fam-engels.de/)
Das funktioniert auch super, bis auf die Zoom Funktion.

Das CHDK2 generiert alle 0,5 sekunden einen Impuls.
Dieser Impuls lässt die Kamera jedes Mal nur 1en Objektiv-Step ausfahren
Beim nächsten Impuls wieder einen Step.
Insgesamt macht sie etwa 200 Steps, bis das Objektiv voll ausgefahren ist.
Sie braucht also etwa 100 sekunden, um das Objektiv voll auszufahren...

Richtig soweit ?

Nun zu meinem Problem :
Diese einzelnen Steps müssen doch irgendwie "flüssig" hintereinander und vor allem schneller ablaufen können, oder ?
Sodass ich ein ganz normales Zoomen wie über den "zoom-knopf" habe.
Auf der Suche nach der Problematik, bin ich auf dieses Video gestoßen : http://www.youtube.com/watch?v=n6qEjRxhDEk
Also muss es möglich sein das Objektiv flüssig ein und ausfahren zu können, bis zu einer bestimmten Position, oder ?


Vielleicht hat ja jemand das selbe Problem, oder eine Lösung dafür.
Ich bin mir eigentlich ziemlich sicher, dass es nur am Sript liegt und es sich irgendwie realisieren lässt. :)

Im Voraus schonmal vielen Dank für eure Hilfe,

Gruß Daniel
PS ;(Bedanken möchte ich mich auch nochmal an Peter, für seinen Super-Support)


Momentaner Skript :
@title 3-Signal-Remote
@param a Shoot
@default a 10
@param b ZoomIn
@default b 30
@param c ZoomOut
@default c 50
@param o TimeOffset
@default o 8
@param d ShowTime
@default d 0
@param e video
@default e 20
@param f Steps
@default f 100

do

do
z = get_usb_power
until z>0

if d>0 then print "usbpower:",z

if z>(a-o) and z<(a+o) then shoot
if z>(b-o) and z<(b+o) then click "zoom_in"
get_zoom_steps 200
if z>(c-o) and z<(c+o) then click "zoom_out"
get_zoom_steps 200
if z>(e-o) and z<(e+o) then click "video"

until is_key "set"

end
Rex-600
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 1
Registriert: 06.10.2012, 15:29
Kamera(s): SX20IS

Re: SX20IS RC Zoom Control Rc-CHDK2

Beitragvon Werner_O » 07.10.2012, 10:42

Hallo Daniel,

leider habe ich selber von Sripts keine Ahnung :-(

Für meine SX20 habe ich allerdings die IR-Fernbedienung CanoRemote (siehe hier), und als Script nutze ich dazu das Lua-Script "Remote", siehe dazu diesen Thread hier im Forum.
Die aktuellste Version vom Script mit geändeter Tastenbelegung für Zoom In/Out findest Du im letzten Beitrag dieses Threads - nachfolgend dessen Quelltext.

--[[
@title USB IR-Remote V1.04
]]

STATE_IDLE = 0
STATE_IN_STEP = 1
STATE_IN_CONT = 2
STATE_OUT_STEP = 3
STATE_OUT_CONT = 4
STATE_SHOOT_HALF = 5

KEY_NOKEY = 0
KEY_LEFT = 9
KEY_RIGHT = 17
KEY_UP = 25
KEY_DOWN = 33
KEY_PLAY = 41
KEY_MENU = 49

KEY_TIMEOUT = 750
countIn = 0
countOut = 0

state = STATE_SLEEP


function zoomIn()
if state == STATE_OUT_CONT then
release "zoom_out"
state = STATE_IDLE
elseif state == STATE_IN_CONT then
release "zoom_in"
state = STATE_IDLE
else
if state == STATE_SHOOT_HALF then
release "shoot_half"
end
if state == STATE_IN_STEP then
if get_tick_count()-countIn > KEY_TIMEOUT then
zoomInStep()
else
zoomInContinue()
end
else
zoomInStep()
end
end
end

function zoomInStep()
press "zoom_in"
sleep(5)
release "zoom_in"
state = STATE_IN_STEP
countIn = get_tick_count()
end

function zoomInContinue()
state = STATE_IN_CONT
press "zoom_in"
end

function zoomOut()
if state == STATE_IN_CONT then
release "zoom_in"
state = STATE_IDLE
elseif state == STATE_OUT_CONT then
release "zoom_out"
state = STATE_IDLE
else
if state == STATE_SHOOT_HALF then
release "shoot_half"
end
if state == STATE_OUT_STEP then
if get_tick_count()-countOut > KEY_TIMEOUT then
zoomOutStep()
else
zoomOutContinue()
end
else
zoomOutStep()
end
end
end

function zoomOutStep()
press "zoom_out"
sleep(5)
release "zoom_out"
state = STATE_OUT_STEP
countOut = get_tick_count()
end

function zoomOutContinue()
state = STATE_OUT_CONT
press "zoom_out"
end

function shootHalf()
if state == STATE_OUT_CONT then
release "zoom_out"
state = STATE_IDLE
elseif state == STATE_IN_CONT then
release "zoom_in"
state = STATE_IDLE
elseif state == STATE_SHOOT_HALF then
release "shoot_half"
state = STATE_IDLE
end
state = STATE_SHOOT_HALF
press "shoot_half"
end

function shootFull()
if state == STATE_OUT_CONT then
release "zoom_out"
elseif state == STATE_IN_CONT then
release "zoom_in"
elseif state == STATE_SHOOT_HALF then
release "shoot_half"
end
press "shoot_full"
release "shoot_full"
state = STATE_IDLE
end

function startStopVideo()
if state == STATE_OUT_CONT then
release "zoom_out"
elseif state == STATE_IN_CONT then
release "zoom_in"
elseif state == STATE_SHOOT_HALF then
release "shoot_half"
end
press "video"
release "video"
state = STATE_IDLE
end

while true do
repeat
a = get_usb_power()
until a > KEY_NOKEY

if a <= KEY_LEFT then
zoomOut()
elseif a <= KEY_RIGHT then
zoomIn()
elseif a <= KEY_UP then
startStopVideo()
elseif a <= KEY_DOWN then
shootHalf()
elseif a <= KEY_PLAY then
shootFull()
elseif a <= KEY_MENU then
print("menu")
else
print("other")
end

end

Warum schreibe ich das jetzt:
Mit diesem Script kann ich nicht nur in kleinen Schritten rein- und rauszoomen, nach 2 mal drücken von >>I (Right) oder I<< (Left) innerhalb von 750ms kann ich damit auch kontinuierlich rein- und rauszoomen. So kann ich innerhalb weniger Sekunden etwa von min. Zoom auf max. Zoom wechseln. Drücke ich nach 2 mal drücken einer Zoomtaste (sozusagen "Doppelklick") nochmal diese Taste wird das kontinuierliche Zoomen übrigens angehalten.

Das Script wertet dazu die unterschiedlichen Puls-Längen vom IR-Empfangsmodul aus (bei >>I bzw. Right für ZoomIn Pulse 160ms; bei I<< bzw. Left für ZoomOut Pulse 80ms; bei Play zum Auslösen Pulse 400ms).

Vielleicht kann Dir dieses Lua-Script ja Anregungen für die Lösung Deines Problems geben.

Nachtrag:
Ich habe eben noch die Rückgabewerte vom Remote-Script zu verschiedenen Pulslängen analysiert und daraus die zu erwartenden Rückgabewerte bei der Rc-CHDK2 errechnet (bitte auf das Bild klicken für eine vergrößerte Anzeige):
Bild
Die Rückgabewerte scheinen sich nach folgender Formel zu berechnen:
Rückgabewert = Pulslänge/10 + 1

Liebe Grüße
Werner_O
Benutzeravatar
Werner_O
CHDK-Legende
CHDK-Legende
 
Beiträge: 1014
Registriert: 22.10.2010, 14:12
Wohnort: Köln
Kamera(s): SX20 1.02d
SX240 1.01a
S100 1.01a
S3 1.00a


Zurück zu S/SX-Serie

Wer ist online?

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