[uBasic] Md-Six - Bewegungserkennung mit Intervall +++

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

Md-Six - Bewegungserkennung mit Intervall +++

Beitragvon gehtnix » 07.09.2008, 19:47

Hallo,

ein erweitertes MD-Script mit vielfacher und variabler Zeitsteuerung.

Ein kurze grafische Ãœbersicht ist unten zu finden. Besonders interessant, der "six"te und letzte Balken

Auf allen Kameras lauffähig - IXUS-User müssen den Parameter "Mit Sucher" auf 1 setzen.

Eine detaillierte Beschreibung ist in der PDF zu finden.

Sollten Fehler auftreten, bitte melden

EDIT: MD_SIX.BAS wurde auf "get_mode" angepasst. Mit dem Videomode sollte es also keine Probleme mehr geben. Die untenstehende Änderung ist hier nicht mehr vonnöten!

gruß gehtnix
Dateianhänge
Md-Six.pdf
Neues PDF mit Steuerung vom Backlight
(159.36 KiB) 2092-mal heruntergeladen
Md-Six.bas
Neue Version - nur mit CHDK-De lauffähig
(5.24 KiB) 1949-mal heruntergeladen
MD-Ãœbersicht_rs.jpg
MD-Ãœbersicht_rs.jpg (53.75 KiB) 21370-mal betrachtet
Zuletzt geändert von gehtnix am 14.01.2010, 00:42, insgesamt 8-mal geändert.
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 msl » 07.09.2008, 21:57

Interessante und komplexe Anwendung der Bewegungserkennung!

Außerdem ist alles sehr schön dokumentiert.

Ein paar Fragen bzw. Anmerkungen hätte ich dann noch:

Code: Alles auswählen
:prop
   if get_propset=1 then get_prop 0 V
   if get_propset=2 then get_prop 49 V
   if V=18 then s=3
   if get_propset=1 then get_prop 6 W
   if get_propset=2 then get_prop 102 W
   if s<>2 and W=1 then
      s=2
   else if s=2 and W<>1 then
      s=0
   endif
   if s=0 then n=1 else n=0
   p=p*100
   d=d*1000
return


-Unter welchen Bedingungen erhält die Variable V den Wert 18?

-Für die Variable W könnte man den Befehl get_drive_mode verwenden - spart eine Zeile.

-Könnte man mit get_time nicht einiges an Berechnungen ersparen?

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 gehtnix » 07.09.2008, 22:55

Hi msl,

danke für die Blumen.
Ich denke wir sollten mal unter Skriptsammlung mal alle MD zusammenfassen. Es wird für den Einen oder Anderen unübersichtlich, besonders für den Einsteiger.

if V=18 then s=3
Das ist für Video - Zeile 180 if h>0 and s=3 then gosub "Filmaufnahme"


Für die Variable W könnte man den Befehl get_drive_mode verwenden - spart eine Zeile.

Der Code stammt aus Bewegung-J.bas und habe ich so übernommen. Dennoch ist es schon richtig dass man da noch was ändern könnte. Aber nicht mehr heute. ;)

Könnte man mit get_time nicht einiges an Berechnungen ersparen?
Nähere Funktion von get_time ist mir unbekannt. Im juciphox-wiki-handbuch finde ich nichts und hier im Forum mit Suche habe ich das hier "neu: get_time (LUA-Script)" von fe50 gefunden. Sollte ich damit eine formatierte Uhrzeit erhalten muß ich aber die wieder zu sleep umrechnen. Also möglicherweise 0 zu 0?
Bei wiki steht get_time unter LUA Scripting commands.

gruß gehtnix





Gruß msl
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 msl » 07.09.2008, 23:25

Skriptsammlung ist ein gutes Thema. Wenn Du Lust hast, mach doch mal ein Thread mit einer Zusammenstellung von MD-Sachen. Den können wir dann in der Skriptsammlung verlinken.

Das ist für Video - Zeile 180 if h>0 and s=3 then gosub "Filmaufnahme"


Mit den Porpcase-Variablen 0 bzw. 49 ist das so eine Sache. Da gibt es zu unterschiedliche Ausgabewerte. Deshalb auch meine Frage. Es gibt den Befehl get_mode unter juciphox, 0=Aufnahme, 1=Wiedergabe und 2=Video. Letzteres funktioniert erst seit Rev.499. Außerdem kannst du noch den Video-Button bei der S-Serie abfragen. Ich habe das hier schon mal getestet.

Nähere Funktion von get_time ist mir unbekannt.


In der PDF-Ausgabe vom Handbuch stehen die Parameter zu get_time. Das ist alles sehr neu und muss erst überall eingearbeitet werden.

get_time
0 Sekunden
1 Minuten
2 Stunden
3 Tag
4 Monat
5 Jahr

Möglicherweise lassen sich damit Berechnungen verkürzen. Du wirst das am besten beurteilen können. So genau habe ich das Skript nicht begutachtet. :D

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 fe50 » 08.09.2008, 00:36

gehtnix hat geschrieben:...Nähere Funktion von get_time ist mir unbekannt. Im juciphox-wiki-handbuch finde ich nichts und hier im Forum mit Suche habe ich das hier "neu: get_time (LUA-Script)" von fe50 gefunden. Sollte ich damit eine formatierte Uhrzeit erhalten muß ich aber die wieder zu sleep umrechnen. Also möglicherweise 0 zu 0?
Bei wiki steht get_time unter LUA Scripting commands.

Hi gehtnix & msl,
habe eben die "Neuen" in der e-Wiki eingepflegt, hier geht's los: CHDKWiki - MoreBest-get_time und folgende...

Wenn Befehle nicht in LUA UND uBasic vorhanden sind, steht das normalerweise immer dabei, get_time wurde erst in Changeset #497 als uBasic-Variante nachgerüstet (deshalb war's bisher nur im LUA Teil gelistet)...einige neue Befehle aus obiger Liste sind noch nicht als LUA Variante verfügbar (steht dabei), aber das kommt schon noch...

...in deutsch ist's noch nicht drin, ausser msl setzt's gleich in's wikia Handbuch mit rein ;)
◄"The grass was greener, The light was brighter"►  ◄fe50 home►  ◄TRAIL-Magazin►  ◄RTFM !►
Benutzeravatar
fe50
CHDK-Legende
CHDK-Legende
 
Beiträge: 1106
Registriert: 25.04.2008, 14:28
Wohnort: B'Württemberg
Kamera(s): Ixus50 101b, Ixus860 100c, SX10 101a

Beitragvon gehtnix » 08.09.2008, 01:17

msl hat geschrieben:Skriptsammlung ist ein gutes Thema.
Ich sammle die bas und lade die hoch und Du baust die Skriptseite, wie gehhabt. Da brauchen wir keinen weiteren Thread.

Mit den Porpcase-Variablen 0 bzw. 49 ist das so eine Sache

Das schau ich mir noch mal an.

Nähere Funktion von get_time ist mir unbekannt

Jetzt habe ich noch was gefunden. http://tinyurl.com/58x866. Das geht auch unter uBasic.
Hier unten das Unterprogramm.

:time
rem h=hh, m=mm, s=ss
h = get_time(2)
m = get_time(1)
s = get_time(0)
return

Da ich ja habe ich 3 Werte die ich wieder, bis auf die Sekunden(0) umrechnen und addieren muß um auf eine Zahl zu kommen mit der ich dann weiter rechnen kann. Da müßte ich im Script wesentlich mehr Klimmzüge (8x) machen um z.B. auf das jeweilige timeout zu kommen. Die Laufzeit würde sich auch erhöhen. Da sehe ich keinen Vorteil drinnen. Mit get_dayseconds habe ich den Wert gleich zur Hand.
Guckst Du hier:
"if K<=get_day_seconds then gosub "schlafen"" Dieses K verändert sich mit jedem Intervall........
oder hier nach jeder MD-Auslösung:
Code: Alles auswählen
if (d/1000)>(K-get_day_seconds) then
d=(K-get_day_seconds)*1000+500
endif

Das MD_SIX.BAS ist doch eh mehr Zeitberechnung als MD :D
Also, da mußt Du mich schon zum Jagen tragen, wie der Volksmund sagt.

Für das obiges Beispiel ist get_time aber die bessere Lösung.

Interessieren würde mich aber ob das Script bei Dir läuft, verständlich ist.

Für die "Trainspotter" dürfte das Script doch wohl sehr von Interesse sein.
Und Mehdorn darf sich warm anziehen, von wegen "DIE BAHN" und pünktlich!

Ich freue mich aber über den nicht mehr notwendigen SD-Card Schieber. Dank nochmals an chiptune :D
Bis jetzt geht zwar immer noch ein Griff ins Leere, das wird aber.


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 gehtnix » 08.09.2008, 01:29

Hi fe50,

während ich hier experimentiere, nebenbei dem Rotwein zusage, tippst Du hinter meinem Rücken Anworten. :)

Was mir allgemein fehlt, ist ein Beispiel wie man dann "solche Parameter" einsetzt.
z.B. "h = get_time(2)"

geschmeidig bleiben

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 msl » 08.09.2008, 11:23

Interessieren würde mich aber ob das Script bei Dir läuft, verständlich ist.

Das Skript läuft rund bis auf eine Ausnahme - Video (keine Auslösung). Das hatte ich aber schon vermutet. Versuch da mal, wie schon gesagt mit get_mode zu arbeiten. Den Parameter 2 für Videobetrieb hat noch nicht mal fe50 entdeckt :shock:.

Ich sammle die bas und lade die hoch und Du baust die Skriptseite, wie gehhabt.

Ok, gib ein Rauchzeichen, wenn es soweit ist.

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 fe50 » 08.09.2008, 12:33

msl hat geschrieben:... Den Parameter 2 für Videobetrieb hat noch nicht mal fe50 entdeckt :shock:.

Tja, entdeckt hab' ich schon viel, aber anscheinend bin ich der einzige hier, der in der Wikia solche Sachen auch einpflegt :?

Deshalb gibt es ja das Changelog, da sind ja Neuerungen ersichtlich, bis die dann "offiziell" dokumentiert werden können sie dort ja auch noch etwas verweilen...

@gehtnix:
Beispiele gibt's nur für nicht-so-offensichtliche-Funktionen, aber Du kannst ja auch gerne Beispiele einbauen, Kommunen-Work - das ist ja Sinn & Zweck der Wikia :roll:

PS: Trink' nicht soviel Roten, vor allem nicht so früh am morgen, sonst kann ja irgendwann der Bildstabilisator Deiner Canon Deine Schwankungen nicht mehr ausgleichen :-`
◄"The grass was greener, The light was brighter"►  ◄fe50 home►  ◄TRAIL-Magazin►  ◄RTFM !►
Benutzeravatar
fe50
CHDK-Legende
CHDK-Legende
 
Beiträge: 1106
Registriert: 25.04.2008, 14:28
Wohnort: B'Württemberg
Kamera(s): Ixus50 101b, Ixus860 100c, SX10 101a

Beitragvon gehtnix » 08.09.2008, 12:38

msl hat geschrieben:
Versuch da mal, wie schon gesagt mit get_mode zu arbeiten. Den Parameter 2 für Videobetrieb hat noch nicht mal fe50 entdeckt


Der liefert mir immer eine 0 zurück.

Returns 0 in record mode, 1 in playback mode, it's that simple.

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 msl » 08.09.2008, 12:55

Der liefert mir immer eine 0 zurück.

Returns 0 in record mode, 1 in playback mode, it's that simple.

Welche Rev. von juciphox hast Du denn im Einsatz? Das mit der 2 als Rückgabewert geht erst seit Rev.499.

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 gehtnix » 08.09.2008, 13:10

msl hat geschrieben:Welche Rev. von juciphox hast Du denn im Einsatz? Das mit der 2 als Rückgabewert geht erst seit Rev.499.

Da bin ich schon aktuell, sollte dann doch tun :o

Code: Alles auswählen
@title Modus auslesen
rem Liest den Rückgabewert für CHDK-Scripte aus
rem Script laden, Währad auf gewünschten Modus stellen, Script starten, ablesen.

if get_propset=1 then get_prop 0 V
if get_propset=2 then get_prop 49 V

print "V =",V

end



Mal kurz ein Script für diejenigen bei den das Video nicht tut. Script laden, Wählrad auf Video und Script starten. Wenn das 18 steht dann ist alles ok, ansonsten in Script-Zeile

268 if V=18 then s=3

Dort die 18 mit dem neu ermittelten Wert austauschen.
Und bitte, wenn ihr geändert haben solltet, gebt eine Rückmeldung dazu mit Wert und Kamera!

Edit: :-` geht doch mit get_mode :-` von wegen gehtnix

Neue Version steht oben bereit.

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 msl » 08.09.2008, 14:39

Du kannst den Wert für jede Kamera aus dem Quellcode wie folgt ermitteln:

als Beispiel die A610, folgende Adresse:

http://tools.assembla.com/chdk/browser/ ... 610/main.c

Hier suchst Du nach "modemap". Für den Link ist das Zeile 38. Dann siehst du eine Tabelle mit den Rückgabewerten wie mode_video_std 18. Für andere Kameras einfach in der Kopfzeile der Seite auf Plattform gehen und dann das Modell auswählen und unter main.c nachschauen.

Für die A720 ist der Wert 2597.

Trotzdem wundert mich, dass get_mode nicht funktioniert.

Code: Alles auswählen
@title Test get_mode

M=get_mode
if M=2 then print "video mode"
if M=0 then print "record mode"
if M=1 then print "play mode"

sleep 3000
end



Wenn das so bei Dir nicht funktioniert, müssen wir PhyrePhoX bemühen.

Gruß msl


Edit: Sorry, hatte Dein Edit nicht gelesen :oops:
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 gehtnix » 08.09.2008, 16:23

Hi msl,

wieso das bei mir zuerst nicht ging? Tippfehler ;) sehr naheliegend.
Ich meinte vor horhin mit einem Beispiel - Syntax z.B. "x=get_mode".
Wie kann ich aber das hinzufügen wenn ich es eben das nicht weiß :o

Das kannst Du bestimmt auch erklären wieso das verschiedene Werte stehen, beides die 570IS

Von
http://chdk.wikia.com/wiki/Mode_dial_propcase_values
zu
http://tools.assembla.com/chdk/browser/ ... 570/main.c

wikia - {branches}
AUTO- -32768 { MODE_AUTO, 32768 }
P- -32764 { MODE_P, 32772 },
Tv- -32765 { MODE_TV, 32771 }
Av- -32766 { MODE_AV, 32770 }

Flutscht es jetzt mit get_mode?

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 msl » 08.09.2008, 16:33

Ja, das Skript läuft jetzt komplett rund.

Den Unterschied der Werte kann ich nicht erklären, würde mich aber an den Quellcode halten.

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

Nächste

Zurück zu Code-Ecke

Wer ist online?

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

cron