[uBasic] USB Fernauslöser ohne Verzögerung?

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

USB Fernauslöser ohne Verzögerung?

Beitragvon Plenz » 22.09.2008, 10:28

Ich bin neu hier seit gestern und interessiere mich für diese Materie, weil ich mir ein Unterwassergehäuse bauen möchte - natürlich ohne mechanischen Auslöser, weil das viel zu kompliziert ist. Ich denke an eine Reflexlichtschranke im Inneren, die das Bild auslöst, und außen irgend ein bewegliches Plastikteil, das teils weiß und teils schwarz ist.

Meine ersten Versuche (USB-Kabel in die Buches am Computer eingesteckt) zeigen, dass der Befehl "shoot" immer mit erheblicher Verzögerung arbeitet, da erst fokussiert wird, oder die Kamera wartet sogar, bis der Blitz geladen und bereit ist. So ist die Sache kaum brauchbar. Aber andere Scripts außer mit "shoot" habe ich noch nicht gefunden.

Hat denn noch niemand versucht, mit click shoot_full zu arbeiten?

Oder so:
lange drücken = press shoot_half
kurz drücken = click shoot_full und dann release shoot_half

Ich frage erst mal so, um zu vermeiden, dass ich das Rad zum zweiten Mal erfinde. ;)
Benutzeravatar
Plenz
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 110
Bilder: 1
Registriert: 21.09.2008, 12:51
Kamera(s): SX230HS

Beitragvon msl » 22.09.2008, 10:39

Hallo Plenz,

ich zitiere mal das Handbuch:
shoot
Spezieller optimierter Befehl zum Auslösen der Kamera. (vergleichbar mit click
"shoot_full“, nur schneller in der Ausführung) Dieser Befehl dauert 40ms.


Deshalb hat noch niemand mit click "shoot_full" gearbeitet.

Du kannst aber mit press und release arbeiten. Außerdem ist die Dauer bis zur Bereitschaft vom gewählten Modus abhängig. Da könnte man auch per Skript Vorgaben machen.

Gruß msl
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

...

Beitragvon C4_87 » 22.09.2008, 14:47

ich find die tatsache ansich schon mutig sich en unterwassergehäuse zu >>>"bauen"<<< schon krass.
hoffe deine cam säuft ni ab.
erstmal kein CHDK mehr für mich :)

http://zephyrc4.deviantart.com

[irgenwie hab ich ja mit den : ^^] ^^
Benutzeravatar
C4_87
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 250
Bilder: 5
Registriert: 13.06.2008, 11:26
Wohnort: Jetzt in DD

Beitragvon Plenz » 22.09.2008, 14:56

Ach... das machen viele. Es gibt reichlich Bauanleitungen, vor allem für Gehäuse für Videokameras.
Und von wegen mutig... wenn es fertig ist, wird es erst mal im leeren Zustand an einem Seil runtergelassen und wieder raufgeholt, dann wird man ja sehen...
Benutzeravatar
Plenz
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 110
Bilder: 1
Registriert: 21.09.2008, 12:51
Kamera(s): SX230HS

...

Beitragvon C4_87 » 22.09.2008, 16:54

is mir schon klar, aber der zufall ist bei selbstbau dingern bestimmt ein größerer feind als bei gekauften die ja über eine längere zeit entwickelt und getestet werden
erstmal kein CHDK mehr für mich :)

http://zephyrc4.deviantart.com

[irgenwie hab ich ja mit den : ^^] ^^
Benutzeravatar
C4_87
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 250
Bilder: 5
Registriert: 13.06.2008, 11:26
Wohnort: Jetzt in DD

Beitragvon Plenz » 22.09.2008, 17:02

Gesagt, getan. Dieses Script hält den Auslöser halb gedrückt, wenn man die Fernbedienung lange drückt (bzw. lässt beim zweiten langen Druck wieder los) und macht bei einem kurzen Druck sofort ein Foto (falls der Auslöser vorher halb gedrückt war).

Code: Alles auswählen
@title Remote Control
@param z Zustand
@default z 0

while 1

  do
    p=get_usb_power
  until p>0

  if p>100 then
    p=0
    if z>0 then
      z=0
      release "shoot_half"
      print "sh AUS"
    else
      z=1
      press "shoot_half"
      print "sh EIN"
    endif
  endif

  if p>0 then
    p=0
    cls
    click "shoot_full"
    release "shoot_half"
    z=0
    print "sh AUS"
  endif

wend

end
Benutzeravatar
Plenz
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 110
Bilder: 1
Registriert: 21.09.2008, 12:51
Kamera(s): SX230HS

Seltsames Verhalten

Beitragvon Plenz » 23.09.2008, 20:20

Heute wollte ich mein Skript noch verbessern. Es geht darum, dass die Kamera fokussiert, wenn man den Auslöser halb drückt - aber wenn man ihn weiter festhält, leuchtet zwar die orange LED, aber der Fokus bleibt auf seiner Stellung stehen. Ich möchte aber, dass der Fokus immer wieder neu eingestellt wird.

Also habe ich in mein Skript einen Zähler eingebaut, und wenn der sein Maximum erreicht, dann soll der Auslöser losgelassen und wieder halb gedrückt werden. Ich zitiere mal nur die entscheidende Schleife, der Rest ist wie oben:

Code: Alles auswählen
  do
    p=get_usb_power
    c=c+1
    print c
    if c>50 then
      if z>0 then
        release "shoot_half"
        sleep 100
        press "shoot_half"
      endif
      c=0
    endif
  until p>0

Das Verrückte ist nun, dass der Zähler immer auf 1 bleibt! :evil:

Wenn ich die Zeilen von "if z>0 then" bis "endif" lösche, wird brav bis 50 hochgezählt. Füge ich diese Zeilen wieder ein, bleibt der Zähler auf 1.

Woran kann das liegen? Die 4 IF-Level habe ich ja noch lange nicht erreicht.
Benutzeravatar
Plenz
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 110
Bilder: 1
Registriert: 21.09.2008, 12:51
Kamera(s): SX230HS

Beitragvon gehtnix » 23.09.2008, 21:32

Hi Plenz,

willkommen im Club der IF-Spezialisten. =D>
Du hast eine neue Merkwürdigkeit entdeckt.
Wieso es jetzt so funktioniert, ich habe keine Ahnung! :-`

c=0 ist nach oben gewandert :D
Code: Alles auswählen
do
    p=get_usb_power
    c=c+1
    print c
    if c>50 then
      c=0
      if z>0 then
        release "shoot_half"
        sleep 100
        press "shoot_half"
      endif
    endif
  until p>0


gruß gehtnix
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 12:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS990 IS

Beitragvon Plenz » 23.09.2008, 21:56

<SPOCK>
Faszinierend... :idea:
</SPOCK>
Benutzeravatar
Plenz
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 110
Bilder: 1
Registriert: 21.09.2008, 12:51
Kamera(s): SX230HS

Variablen immer deklarieren?

Beitragvon Plenz » 24.09.2008, 06:36

Irgendwie wird jetzt aber p nicht mehr richtig verarbeitet...

Dazu erst mal eine grundsätzliche Frage. Von C und Perl kenne ich, dass man Variablen zuerst deklarieren muss, bevor man sie verwendet. Bei BASIC muss man das nicht. In diesem Programm aber kommt beides vor: z und c werden deklariert und vorbelegt, aber p taucht einfach so auf. Ist das wirklich nicht nötig, "@param p Power" zu schreiben? Wenn nein, warum genügt dann ganz oben nicht einfach "z = 0"?
Benutzeravatar
Plenz
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 110
Bilder: 1
Registriert: 21.09.2008, 12:51
Kamera(s): SX230HS

Back to the roots :)

Beitragvon Plenz » 24.09.2008, 07:39

Ich habe so den Verdacht, dass die Sprungmarken für IF-THEN vielleicht in den selben Speicher geschrieben werden wie für WHILE-WEND und FOR-NEXT und dass alle zusammenaddiert ein gewisses Limit nicht überschreiten dürfen. Wenn dies doch passiert, und wenn dahinter der Variablenspeicher liegt, dann werden die Variablen überschrieben. Ist natürlich reine Theorie, aber denkbar.

Also habe ich mein Programm mal "veraltet". Heutzutage muss ein Programm ja "elegant" sein, Sprungmarken sind "pöse" und Spaghetticode ist Sünde. Vergessen wir das alles mal und deklarieren außerdem noch ALLE Variablen... das Ergebnis ist der folgende Code, der einwandfrei funktioniert!

Code: Alles auswählen
@title Remote Control
@param c Counter
@default c 0
@param p Power
@default p 0
@param z Zustand
@default z 0

:start
  p=get_usb_power
  c=c+z
  if c>50 then goto "focus"
  if p>100 then goto "half"
  if p>0 then goto "shoot"
  goto "start"

:focus
  c=0
  release "shoot_half"
  sleep 100
  press "shoot_half"
  goto "start"

:half
  if z=0 then goto "shalf"
  release "shoot_half"
  z=0
  goto "start"

:shalf
  press "shoot_half"
  z=1
  goto "start"

:shoot
  click "shoot_full"
  release "shoot_half"
  z=0
  goto "start"

end

Benutzeravatar
Plenz
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 110
Bilder: 1
Registriert: 21.09.2008, 12:51
Kamera(s): SX230HS

Re: Back to the roots :)

Beitragvon gehtnix » 24.09.2008, 12:38

@Plenz

zieh mal eine Ereigniskarte und begebe Dich hierhin:
http://chdk.wikia.com/wiki/German/Handb ... 6:_Skripte

Du bist der Erste der das "@param p Power" getippt hat, es sollte aber nicht notwendig sein.
Interessieren würde mich aber brennend mit was für einem CHDK-Stand Du arbeitest? Auch wäre es für uns hilfreich wenn Du das in Deinem Profil noch hinterlegst.
Hast Du Deine alte Version schon mal mit einem älteren SW-Stand probiert?

_c_ hat ja auch eine 720IS und beschreibt ein ähnliches USB-Problem unter 0.5.5.524.

Da stellt sich doch dann eher die Frage:
a) liegt es an der 720IS?
b) liegt es am CHDK 0.5.5.524?

Da ich ja auch beim ersten Test mit dem 0.5.5.524 Probleme hatte tippe ich mal auf die neue Version.

gruß gehtnix
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 12:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS990 IS

Re: Back to the roots :)

Beitragvon Plenz » 24.09.2008, 13:02

gehtnix hat geschrieben:zieh mal eine Ereigniskarte und begebe Dich hierhin:
http://chdk.wikia.com/wiki/German/Handb ... 6:_Skripte

Sorry, aber was glaubst du denn wohl, woher ich mein Wissen habe? Göttliche Eingebung? :roll:

gehtnix hat geschrieben:Du bist der Erste der das "@param p Power" getippt hat, es sollte aber nicht notwendig sein.

Dann verrate mir doch mal bitte, warum man
Code: Alles auswählen
@param c Counter
@default c 0

schreiben soll und nicht einfach
Code: Alles auswählen
c=0

Ich fände es logisch, wenn man entweder ALLE Variablen deklariert oder gar keine. Bin ich denn der erste, dem diese Inkonsequenz aufgefallen ist?

gehtnix hat geschrieben:Interessieren würde mich aber brennend mit was für einem CHDK-Stand Du arbeitest?

Ich bin erst seit dem Wochenende mit CHDK beschäftigt. Ich habe die Version runtergeladen, die da für meine Kamera angegeben ist, und weiter habe ich nicht geschaut.
Benutzeravatar
Plenz
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 110
Bilder: 1
Registriert: 21.09.2008, 12:51
Kamera(s): SX230HS

Beitragvon gehtnix » 24.09.2008, 13:30

Hi Plenz,

die @param... werden eigentlich nur dafür hergenommen um dem Script veränderbare Startwerte zu übermitteln. Diese Wete kann man ja dann unter Script-Parameter verändern.
Variablen werden zwischen klein, a-z und groß A-Z unterschieden.
Nur die kleinen Variablen kannst Du unter @param... definieren.
Die großen Variablen "tauchen" im Script dann irgendwann bei Bedarf auf. Also z.B.
A=b+c , das reicht!
Schau mal in diesem Script nach, da findest Du reichlich davon.
viewtopic.php?t=553

@param c Counter
@default c 0
würde ich eben nur dann hernehmen wenn ich diesen Wert c veränderbar haben möchte.
c=0 reicht völlig aus.

Bin ich denn der erste, dem diese Inkonsequenz aufgefallen ist?

Nein, Du bist nur der Erste der darüber schreibt.

gruß gehtnix
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 12:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS990 IS

Beitragvon Plenz » 24.09.2008, 13:51

gehtnix hat geschrieben:@param c Counter
@default c 0
würde ich eben nur dann hernehmen wenn ich diesen Wert c veränderbar haben möchte.
c=0 reicht völlig aus.

In allen Scripts taucht "p=get_usb_power" auf, das heißt, p ist veränderlich, wird aber in keinem Script mit @param definiert. Wozu dann also @param bei den anderen Variablen, wenn das gar nicht nötig ist???
Benutzeravatar
Plenz
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 110
Bilder: 1
Registriert: 21.09.2008, 12:51
Kamera(s): SX230HS

Nächste

Zurück zu Code-Ecke

Wer ist online?

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