[Lua] Texteingabe z. B. für Ordnername (Studie)

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

Texteingabe z. B. für Ordnername (Studie)

Beitragvon msl » 24.10.2008, 23:13

Hallo Leute,

Ein Lua-Skript, welches die erweiterten Möglichkeiten verdeutlicht.

Mit diesem Skript ist eine Texteingabe möglich. Der eingegebene Text kann als Name für einen Ordner verwendet werden. Auf Wunsch wird dieser im Hauptverzeichnis der SD-Karte angelegt. Mit den normalen CHDK-Browser können so z. B. Bilder in diesen Ordner verschoben werden.

Bitte keine illegalen Namen für Ordner verwenden. Das führt kann zu Datenverlust führen.

Letztendlich stellt dieses Skript nur eine Studie dar, die zukünftige möglichkeiten zeigen soll.

Voraussetzung ist eine aktuelle CHDK-Version, Stand Okt. 2008.

Skript-Parameter

key-delay: Einstellung Tastatur-Wiederholrate

Benutzung

1. Fenster

[<-][->] Auswahl: Zeichen 1 Schritt
[SET] Zeichen schreiben
[+/-] Zeichen löschen
[UP] Auswahl: kleine Buchstaben, große Buchstaben, Zahlen und Sonderzeichen
[DOWN] Rücksprung auf erstes Zeichen (a)
[ZOOM in/out] Auswahl: Zeichen 5 Schritte
[MENU] fertig und weiter

2. Fenster

INPUT Eingabe anzeigen
[SET] neue Eingabe
[DISP] Schreibe Name als Ordner in Hauptverzeichnis der Karte und beenden
[MENU] Beenden

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
--[[
@title char input
@param f key delay
@default f 200
]]


key_delay = f
output=""

function button()
 local x = 0
 repeat
 wait_click(key_delay)
  if is_pressed "remote" then
   key = "REMOTE"
   x = 1
  end
  if is_pressed "set" then
   key = "SET"
   x = 1
  end
  if is_pressed "erase" then
   key = "ERASE"
   x = 1
  end
  if is_pressed "display" then
   key = "DISP."
   x = 1
  end
  if is_pressed "menu" then
   key = "MENU"
   x = 1
  end
  if is_pressed "up" then
   key = "UP"
   x = 1
  end
  if is_pressed "down" then
   key = "DOWN"
   x = 1
  end
  if is_pressed "left" then
   key = "LEFT"
   x = 1
  end
  if is_pressed "right" then
   key = "RIGHT"
   x = 1
  end
  if is_pressed "zoom_in" then
   key = "ZOOM_IN"
   x = 1
  end
  if is_pressed "zoom_out" then
   key = "ZOOM_OUT"
   x = 1
  end
 until  x == 1
 set_led (8,1)
 sleep (10)
 set_led (8,0)
end

function tabToStr()
    output=table.concat(word)
end

function input()

    abc_lower = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p",
                                "q","r","s","t","u","v","w","x","y","z"}
    abc_upper = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P",
                                "Q","R","S","T","U","V","W","X","Y","Z"}
    abc_spec = {"0","1","2","3","4","5","6","7","8","9",",",".","-",";",":","_",
                            "/",".JPG",".CRW",".CR2",".THM",".WAV",".LUA",".BAS",".TXT"," "}
    word = {}
    a=0
    b=0
    actChar=""
    repeat
        print("[<-][->][SET] [+/-][MENU]")
        print("[ZOOM in/out]  [UP][DOWN]")
        button()
    cls()
    if key == "RIGHT" then a=a+1 end
    if key == "LEFT" then a=a-1 end
    if key == "UP" then b=b+1 end
    if key == "DOWN" then a=1 end
    if key == "ZOOM_IN" then a=a+5 end
    if key == "ZOOM_OUT" then a=a-5 end
    if a >= 27 then a=1 end
    if a <= 0  then a=26 end
    if b>=3 then b=0 end
    if b==0 then
            actChar=abc_lower[a]
            char_info="lower case"
        end
        if b==1 then
            actChar=abc_upper[a]
            char_info="upper case"
        end
        if b==2 then
            actChar=abc_spec[a]
            char_info="special char"
        end
        print(char_info..": "..actChar)
    if key == "SET" then table.insert(word,actChar) end
    if key == "ERASE" then table.remove(word) end
    tabToStr()
    print("input: "..output)
    print (" ")
  until key == "MENU"
end

function make_dir(dirname)
    os.mkdir(dirname)
end


x=0
repeat
  input()
  cls()
  print("INPUT: "..output)
  print("[SET]  new input")
  print("[DISP] make dir and stop")
  print("[MENU] stop")
  button()
  if key == "SET" then cls() end
  if key == "DISP." then
      dir = "A/"..output
      make_dir(dir)
      print "ready"
      sleep(3000)
      x=1
  end
  if key == "MENU" then
        print "ready"
      sleep(3000)
      x=1
  end
until x==1

--[[

***possible commands***

function make_dir(dirname)
    os.mkdir(dirname)
end

function delete_dir(dirname)
    os.remove(dirname)
end

function rename_file(old_filename, new_filename)
    os.rename(old_filename, new_filename)
end

function delete_file(filename)
    os.remove(filename)
end

***missing commands***

-os.list_dir

]]
Erstellt in 0.027 Sekunden, mit GeSHi 1.0.8.9


Viel Spaß beim Testen.

Gruß msl
Dateianhänge
input_1.lua
Texteingabe
(3.08 KiB) 948-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

Beitragvon PhyrePhoX » 25.10.2008, 02:22

hi, coole sache!
habs noch nicht getestet, aber is bestimmt n Knaller :)
Wäre auchn Kandidat fürs Autobuild - imo.
Vielleicht magst du deine tollen Skripte aus der letzten Zeit ja auch im englischen Forum&Wiki bekannt machen?

Grüsse aus Berlin
Benutzeravatar
PhyrePhoX
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 490
Registriert: 04.07.2008, 21:31

Beitragvon msl » 26.10.2008, 10:38

Ja, eine Veröffentlichung in der Wiki und auch im int. Forum kann ich machen.

Ich hätte aber erstmal ein Feedback, ob denn diese Skripte auch auf vielen Kameras stabil laufen. Bei einigen Kameras gab es ja bis zu den letzten Updates ab rev. 542 kleinere Probleme. In der CHDK-Wikia sollten doch nur Sachen veröffentlicht werden, die auch allgemeingültig funktionieren.

Mit neuen Sachen, auch wenn sie vorteilhafter sein könnten, tun sich viele schwer. Viele wissen wahrscheinlich garnicht, dass ein Lua-Skript genau so einfach aufzurufen und zu starten ist wie ein uBasic-Skript.

Für weiterführende Dinge wäre es schon vorteilhaft, wenn hier mal mehr Leute Feedbacks geben könnten. Es ist nur eine kleine Mühe, Skripte downloaden und testen, sowie eine Mitteilung machen, Skript abc läuft auf Kamera xyz. Dann kann man auch dazu schreiben, ob es eher nützlich oder nicht so wichtig ist. Hinweise auf allg. Tipfehler sind eher unwichtig. ;)

Das würde auch helfen, zukünftige CHDK-Versionen stabiler zu machen und Weiterentwicklungen in die richtige Richtung zu lenken.

Wir dürfen allerdings auch nicht verschweigen, dass die erweiterten Skript-Möglichkeiten mit Lua Gefahren mit sich bringen. Es stehen jetzt Operationen zur Verfügung, die bei unsachgemäßer Anwendung zu Datenverlusten führen können.

Auf der anderen Seite haben wir auch die Möglichkeit, Standardbibliotheken anzulegen. Dadurch wird es möglich, wiederholende Routinen einfach aus einer Bibliothek zu laden. Damit braucht man z.B. Dinge wie Tastaturabfragen, LCD ein/aus, get/set_prop Sachen, Ausgabe-Formatierungen und vieles mehr nicht laufend neu zu skripten.

Wenn mehr Lua-Skripte veröffentlicht werden, steigen auch mehr Leute hinter die Syntax und Idee von Lua. Lua läßt sich nun mal nicht so einfach in der Beschreibung zusammenfassen wie uBasic. Dazu sind die Möglichkeiten zu umfangreich. Die meisten haben doch auch uBasic durch Beispiele begriffen. Das wird auch so bei Lua sein.

Von den Entwicklern erwarte ich aber eine ausreichende und konzentrierte Dokumentatation zu den Unterschieden und Abweichungen bezüglich der Lua-Referenz (Ein Anfang ist ja in der Wiki gemacht worden.). Bisher ist es schon recht mühsam, herauszufinden, was wann wo wie funktioniert oder nicht. Wichtige wäre auch eine einheitliche Integration kameraspezifischer Funktionen, soll heißen uBasic- und Lua-Kamerafunktionen müssen einheitlich sein (z.B. get_mode, get_display_mode). Das wird nämlich viele davon abhalten, Lua zu verwenden.

Und allen Skeptikern möchte ich sagen, wer Skripte in uBasic erstellen kann, wird auch Skripte in Lua erstellen können. Ich habe auch bis vor einigen Wochen gedacht, dass Lua nur etwas für Leute mit umfangreichen Hochsprachen-Programmierkenntnissen ist - Fehlurlteil!

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 PhyrePhoX » 26.10.2008, 11:00

ich geb dir vollkommen recht.
hinweis: es kann sein dass die get_ befehle die mit propcases arbeiten in lua bald abgeschafft werden und eine andere syntax kriegen (die propcases sind dann in require modulen).

was auch sein kann - und das wäre eigentlich nur die logische konsequenz - ist, dass ubasic bald GANZ abgeschafft wird. lua ist einfach mächtiger.
eigentlich bin ich persönlich dagegen, bestehendes rauszuschmeissen, nach dem motto - never change a running system. aber die binary wird durch ubasic schon recht gross aufgebläht. wenn denn nur irgendwann die CHDK elf edition kommen würde...
Benutzeravatar
PhyrePhoX
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 490
Registriert: 04.07.2008, 21:31

Beitragvon msl » 26.10.2008, 11:35

[offtopic]

Noch ein kurzer Einwurf:

CHDK-Module die schon seit Anfang enthalten sind, sollten schon aus Respekt vor der Pionierleistung nicht entfernt werden. Es wird in dieser Beziehung ja nicht nur über uBasic diskutiert, sondern auch über die Spiele.

Anderseits sollte aber auch Lua mehr in den Mittelpunkt rücken, da es eine sehr großen teil der gegenwärtigen Kapazitäten beansprucht.

Bei eine evt. ELF-Version könnte man natürlich neue Wege gehen.

[/offtopic]
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 Paparazzi » 27.10.2008, 10:08

Fein!

Leider konnte ich das Skript noch nicht testen, doch (von der Theorie her) hatte ich mir eine Texteingabe genau so vorgestellt!
Sicherlich könnte man sie auch dafür benutzen, (sehr) kurze Text-Notizen in der Kamera (Text-Dateien) zu speichern.

Gruß
Der Paparazzi
A550 und SX10IS, beide mit aktuellen CHDK-Versionen
Paparazzi
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 70
Registriert: 11.04.2008, 08:35

Beitragvon Herr Nelius » 27.10.2008, 10:37

Hallo msl

Ich hab das Skript mit meiner A620 getestet und es funktioniert einwandfrei.

Wenn es später in einer CHDK Version etwas ähnliches geben wird, wäre es jedenfalls besser wenn man eine Art virtuelle
Tastatur hat auf der man sich dann mit den Tasten bewegen kann um einen Buchstaben auszuwählen.

Gruß
Herr Nelius
A620 + 40D
erste mit neuster CHDK Version
Herr Nelius
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 79
Registriert: 08.06.2008, 10:57
Wohnort: Stuttgart

Beitragvon S5andi » 27.10.2008, 19:22

Hallo msl

Kurzer Test auf meiner S5: Texteingabe funktioniert und auch ein entsprechendes Verzeichnis wird angelegt.

Gruß
S5andi
S5 IS 1.01a + SX230HS 1.01e CHDK-DE: akt. Version
S5andi
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 38
Registriert: 16.08.2008, 07:48

A550: es läuft!

Beitragvon Paparazzi » 29.10.2008, 09:40

Hallo msl,

nun habe ich das Skript auf meiner A550 getestet, warum es beim ersten Mal (im Aufnahmemodus) abgestürzt ist, weiß ich nicht, danach lief es in allen Versuchen stabil und die Verzeichnisse wurden korrekt angelegt.

Für den vollen Funktionsumfang war jedoch eine kleine Änderung nötig:
Da die A550 keine [+/-] Taste hat, habe ich sie durch die nicht benötigte [DISP.] Taste ersetzt.

Danke für die Arbeit und das Skript!

Gruß
Der Paparazzi
A550 und SX10IS, beide mit aktuellen CHDK-Versionen
Paparazzi
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 70
Registriert: 11.04.2008, 08:35

Re: A550: es läuft!

Beitragvon msl » 29.10.2008, 10:15

Paparazzi hat geschrieben:Da die A550 keine [+/-] Taste hat, habe ich sie durch die nicht benötigte [DISP.] Taste ersetzt.


Sehr gut. Ich sehe, Du hast das Prinzip verstanden. Es ist immer etwas problematisch, den Funktionsumfang aller Kameras zu beachten. Deshalb sind auch solche Rückmeldungen wichtig.

Ich denke, es wird zukünftig immer mehr allgemeine Module geben, aus denen man sich einfach Skripte für individuelle Aufgaben zusammenstellen kann. Gegenwärtig werden dazu die Grundlagen geschaffen.

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

Re: A550: es läuft!

Beitragvon Paparazzi » 29.10.2008, 12:19

Ich denke schon, daß ich das Prinzip verstanden habe ;) und wie wichtig Rückmeldungen sind.
Soweit ich die nötige Zeit habe, werde ich solche Sachen auch zukünftig gerne auf der A550 testen.

Mit solchen Modulen ist es - großes Lob! - viel einfacher, schnell mal eben eigene Skripts zu schreiben, eben weil man auf die vorhandenen Module zurückgreifen kann. Die Entwicklung gefällt mir! (Und vielleicht kann ich zukünftig auch mehr einbringen.)

Gruß
Der Paparazzi
A550 und SX10IS, beide mit aktuellen CHDK-Versionen
Paparazzi
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 70
Registriert: 11.04.2008, 08:35

Beitragvon silas » 29.10.2008, 19:27

Auf der meine kamera (a550) gecht es nicht einen ordner mit dehm zeichen ; zu benuzen (glaube es war das zeichen).
Dann wird nach dem folder ??? angezeigt.
Falls du magst könnte ich alle zeichen testen und dann hier schreiben welche nicht funckzionieren.
Sonst funkzioniert alles perfekt. :D
a550,IXUS 80IS (1.01a)
aktuelle version
Flickr
Benutzeravatar
silas
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 150
Registriert: 23.04.2008, 13:11
Wohnort: Schweden

Beitragvon msl » 29.10.2008, 20:12

Hallo silas,

Danke für Deinen Test. Die anderen Zeichen brauchst Du nicht zu testen.

Du darfst hier genau wie am PC solche Zeichen in Ordnernamen nicht verwenden. Sonst kommt es zu Fehlern.

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 pterozaurus » 29.10.2008, 23:24

erstmal Danke für die tolle Arbeit!

Mit dem aktuellen CHDK: CHDK 0.7.1-548 ixus55_sd450 100c und meiner Ixus55
habe ich nun folgende LUA Skripte mal kurz angetestet:

beli_uni.lua
funktioniert auch mit verschiedenen Einstellungen

tv_uni.lua
funktionert, auch die verschiedenen Tasten wie zoom, auslösen etc.

iv_uni.lua
funktioniert leider nicht, bleibt nach dem 1. Bild stehen Display bleibt an. (Display sollte nach 1. Bild abschalten. Ich konnte nicht weiter testen da der Akku leer ist :-(
das geänderte uBasic Intervallscript mit LED Abschaltung ( shoot / shoot_half shoot_full Problematik) funktionierte.

Viele Grüße

Stephan
SX220 HS; Fw. 101b; CHDK_DE 1.2.8 Rev. 2099
Ixus55:chdk ixus55_sd450-100c-1.0.0-DE
Benutzeravatar
pterozaurus
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 65
Bilder: 0
Registriert: 18.06.2008, 10:41
Kamera(s): SX220 HS
Ixus 55

Beitragvon msl » 30.10.2008, 09:39

Danke für die Infos.

Das war doch mal eine Auswertung. =D>

Nun wissen wir auch, dass die Shoot-Problematik der "kleinen" Ixus Kameras scheinbar auch unter Lua wirkt. Das war eigentlich zu erwarten, da Lua-Skripte ja schneller abgearbeitet werden.

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 15 Gäste

cron