Skriptologen Thread

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

Skriptologen Thread

Beitragvon _c_ » 06.08.2008, 13:31

Hallo zusammen,

manche hier finden ja Gefallen daran, ihren Kameras mittels CHDK und eigener Ideen neue Funktionalität beizubringen. Ich würde es sinnvoll und hoffentliczh auch anregend finden, wenn noch nicht ganz ausgegorene Ideen hier auch Platz finden könnten und dann evtl. gemeinsam zu noch besseren Ergebnissen führten.
Ich fange mal mit einem Script an, dasn ich gestern geschrieben habe und das gehtnix bereits kennt - mein Ziel war es, ein Intervallscript zu schrteiben, bei dem ich - wenn ich mal wissen möchte, wie lange es denn noch läuft, auf den USB-Taster drücken kann, um dasd Display für ein paar Sekunden einzuschalten.

Um das Skript diskutieren zu können, klemm ich es unten als Code-Schnipsel an und zusätzlich auch als Download.
Wer will, kann es testen und wer weitere Ideen dazu hat, nur her damit.

Grüße
c

Code: Alles auswählen
rem get_day_seconds als Intervalltimer
@title Intervalltimer-get_ds
@param a Anzahl Bilder (Faktor 100)
@default a 1
@param b Anzahl Bilder (Faktor 10)
@default b 1
@param c Anzahl Bilder (Faktor 1)
@default c 0
@param d Intervall (min)
@default d 0
@param e Intervall (sec)
@default e 5
@param l Start um x Uhr
@default l 12
@param m Start um x Minuten
@default m 30
@param n Start-Timer 0=aus 1=ein
@default n 1

rem to avoid wrong settings they are adjusted here
if a<=0 then a=0
if b<=0 then b=0
if c<=0 then c=0
if d<=0 then d=0
if e<=0 then e=0
if l<=0 then l=0
if l>=23 then l=23
if m<=0 then m=0
if m>=59 then m=59
if n>1 then n=1
if n<0 then n=0

rem how many photos?
a=a*100+b*10+c
print "Insgesamt "a" Bilder"

rem length of minimum intervall
b=d*60+e
if b<=4 then b=4
print "echte Intervallänge "b" Sek"

d=0
e=0

rem if timer is used print when shooting starts
if n=1 then
c=l*3600+m*60
print "Start "l"h, "m"min"
endif

rem get display status
X=get_display_mode
rem X=1
U=X
d=1
print "dispmode "U

rem wait a while
sleep 4000
cls


w=get_day_seconds

rem if timer is used move to timer subroutine, otherwise go to intervall
if n=1 then goto "vorbereitung" else goto "inter"

rem preparations for timer use
:vorbereitung
t=get_day_seconds
if (c-t)<=0 then
c=c+86400
endif
z=c-t
print "Start: "z/3600"h, "(z%3600)/60"min, "(z%3600)%60"sec"

rem and here the tiomer loop starts
:timer
if n=1 then
t=get_day_seconds
u=get_usb_power
z=c-t
print "Start: "z/3600"h "(z%3600)/60"min "(z%3600)%60"sec"
if z<=0 then goto "inter"
if d=1 and (z<10 or w<=(t-5)) then gosub "dispaus"
u=get_usb_power
if u>0 then
 if d=0 then
  w=get_day_seconds
  u=0
  gosub "dispein"
 endif
endif
sleep 950
goto "timer"
endif

rem intervall shooting in this loop
:inter
u=get_usb_power
if u>0 then
 gosub "dispein"
 d=1
 u=0
 T=get_day_seconds
endif
if d=1 and t>(T+5) then
 gosub "dispaus"
 d=0
endif
t=get_day_seconds
if v<=t then
 e=e+1
 print e" von "a
 shoot
 v=t+b
endif
if e>=a then goto "ende"
goto "inter"

rem end routine
:ende
for i=1 to 3
playsound 3
sleep 2000
next i
rem display wieder einschalten
gosub "dispein"
rem Kamera ausschalten, zweimal, weil mit
rem einmal shut_down funktioniert das nicht
shut_down
sleep 2000
shut_down

end

rem switch off display
:dispaus
do
click "display"
U=get_display_mode
until (U=2 or U=3)
d=0
return

rem switch on display
:dispein
do
click "display"
U=get_display_mode
until (U=X)
d=1
return
Dateianhänge
gdsinter.bas
(2.52 KiB) 126-mal heruntergeladen
A720 IS. CHDK-SVN 0.9.8, revision 765 Bild
_c_
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 88
Registriert: 25.06.2008, 12:59

Beitragvon _c_ » 07.08.2008, 17:20

Hat jemand eine Idee, wie man während einer Schleife die Tasten abfragen kann, ohne dabei den Ablauf anderer Befehle zu unterbrechen?
Ich würde gerne anstatt des USB-Tasters im Intervall-Teil des oben gezeigten Skripts z.B. die "Set" Taste überwachen und falls sie gedrückt wird, das Display für 10 Sekunden einschalten.

Hm. Evtl. mit timeout beim wait_click:

rem intervall shooting in this loop
:inter
u=get_usb_power
wait_click 5
if is_key "set" then u=1
if u>0 then
gosub "dispein"
d=1
u=0
T=get_day_seconds
endif

leider funktioniert das nicht wie gedacht, weil offenbar der Tastendruck genau innerhalb des timeouts erfolgen muss, sonst wird der Tastendruck nicht erkannt. (Falls man den Zeitpunkt erwischt, dann funktioniert's - man könnte den Timeout auch als Timer verwenden und den Druck auf den USB-Taster als
is_key "usb"
abfragen, aber das wäre dann ein neuer Ansatz)

Wie könnte man das lösen?

Übrigens - das oben gepostete Skript sollte auf allen Kameras mit jucyphox laufen.
A720 IS. CHDK-SVN 0.9.8, revision 765 Bild
_c_
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 88
Registriert: 25.06.2008, 12:59


Zurück zu Code-Ecke

Wer ist online?

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