Pages: 1 [2]   Go Down
Author Topic: Bouncer-Problem  (Read 3365 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Edison Member
*
Karma: 137
Posts: 1551
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nun, da spricht dann doch vieles für ein Hardware Problem. Der Taster sollte ja einen Pin gegen Masse kurzschließen. Vielleicht gibt es ja da ein Kontakt Problem.

Oliver

Logged

Traunstein, Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Kurz offtopic:
Das klingt für mich nach einem Panbot-Projekt. Liege ich hier richtig?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


olikraus,
Aber es ging doch bei meinem Programm problemlos..?!

derHerrKohler,
da liegst Du genau richtig! - Das Ding ist fast fertig nur die Benutzerfreundlichkeit wird nun durch ein Display und ein paar Tastern verbessert..bzw soll verbessert werden smiley-wink
Logged

Germany
Offline Offline
Edison Member
*
Karma: 137
Posts: 1551
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sim0n,
Erklären kann ich es mir nicht. Ich fasse mal zusammen, was ich jetzt von Dir mitbekommen habe:
Das Beispiel mit M2tklib funktioniert nicht. Auch die Examples mit M2tklib funktionieren nicht.
Es äußert sich so, dass zwar der Select Taster funktioniert, aber nicht der Next Taster.

Fragen:
1) Passiert gar nichts mit dem Next Taster? Oder funktioniert er manchmal?
2) Wie genau sind deine Taster angeschlossen? Kurzschluss nach Masse, wenn gedrückt?
3) Was passiert, wenn Select und Next Pins vertauscht werden?
4) Kannst Du den Pegel am Pin messen, an dem der Taster angeschlossen ist? 5V, wenn nicht gedrück? 0V, wenn gedrückt? Oder irgendetwas anderes?

Oliver
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

1) Es passiert rein gar nichts.

2) Jap 5V zu GND also Kurzschluss zu Masse...ist genauso angeschlossen wie der Select Button.. Der eine ist ein Next ist ein Doppeltaster, der wie 2 einer Taster funktioniert..ein GND und 2 5V sozusagen.
Der Select hat 150kOhm der Next jeweils 50kOhm. (Spannungsteiler wurde benutzt)

3) Select funktioniert und Next wieder nicht  smiley-confuse

4) Ja 5 Volt kommen ja raus (müssen ja auch, da das andere Programm beim "Next'en" auch funktioniert...
Logged

Germany
Offline Offline
Edison Member
*
Karma: 137
Posts: 1551
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

zu 3)
Das hab ich nicht verstanden. Sowohl vor dem Tauschen der Pins (in der Software, nicht am Arduino), als auch nach dem Tauschen funktioniert der Select nicht?

zu 4)
Nun vielleicht liegt es daran. Es sind keine Widerstände notwendig.
Der Taster sollte so beschaltet sein, wie hier der Pin 10 (S2, links vom ATMEGA):


Sozusagen, einfach den Pin gegen Masse kurzschließen. Hintergrund ist auch, dass M2tklib den internen Pull-Up-Widerstand des ATMEGA aktiviert. Möglicherweise kollidiert dieser mit der Schaltung deiner Taster.

Vielleicht kannst Du mir die Beschaltung mit deinen Tastern aufzeichnen. Oder aber Du probierst es mal völlig ohne Widerstände, so wie in dem Schaltplan oben: Der Taster schließt den Pin nach Masse kurz.

Oliver
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

zu 3)
Das hab ich nicht verstanden. Sowohl vor dem Tauschen der Pins (in der Software, nicht am Arduino), als auch nach dem Tauschen funktioniert der Select nicht?

Wenn ich den Pin am MC vertausche..funktioniert das Selecten nur mit dem Taster, der nun umgesteckt wurde. Next'en kann man mit dem umgesteckten Taster nicht.
Wenn ich in der Software den Pin vertausche geht auch nur der Select Taster..der Next Taster zeigt sich unbeeindruckt und funktioniert nicht.

zu 4)
Nun vielleicht liegt es daran. Es sind keine Widerstände notwendig.
Der Taster sollte so beschaltet sein, wie hier der Pin 10 (S2, links vom ATMEGA):


Sozusagen, einfach den Pin gegen Masse kurzschließen. Hintergrund ist auch, dass M2tklib den internen Pull-Up-Widerstand des ATMEGA aktiviert. Möglicherweise kollidiert dieser mit der Schaltung deiner Taster.

Vielleicht kannst Du mir die Beschaltung mit deinen Tastern aufzeichnen. Oder aber Du probierst es mal völlig ohne Widerstände, so wie in dem Schaltplan oben: Der Taster schließt den Pin nach Masse kurz.

Oliver


Ich habs ungefähr so wie im Video gemacht:


Aber ich kanns auch mal ohne Widerstände versuchen.

Danke für Deine Beteiligung und die Hilfe!
Logged

Germany
Offline Offline
Edison Member
*
Karma: 137
Posts: 1551
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi

Hast Du es genau so gemacht, wie im Video? Also 100k gegen 0Volt und Taster schaltet nach 5V kurz?
Wenn ja, dann wird es tatsächlich nicht funktionieren, denn der Atmel Controller hat ebenfalls einen Widerstand eingebaut, jedoch genau umgekehrt: ca. 100k gegen 5V. Tatsächlich kollidiert dann deine Schaltung mit der des Microcontrollers.

Es sieht in etwa so aus (Bild vom Englischen Wiki). Der Widerstand ist jedoch eingebaut.

Man braucht nur einen Taster nach Masse schalten, fertig.

Ich halte das Video für recht unglücklich. Hätte der Autor das so beschaltet wie im Bild oben, dann hätte es auch mit M2tklib funktioniert. Anders gesagt: Zwei parallele Widerstände (ein interner und ein externen) hätten nichts ausgemacht.

Meine Empfehlung wäre eine Beschaltung des Tasters, wie im obigen Bild. Wie gesagt: Widerstand bitte weglassen, der ist im Uno eingebaut.

Oliver
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey smiley
Gute Neuigkeiten - der Taster funktioniert nun und wir sind somit ein großes Stück weiter.
Der Widerstand war das Problem  smiley-zipper

So jetzt bin ich dabei, den Quellcode zu verstehen..

Quote
#define BW_70           0
#define BW_100           1
#define BW_135           2
#define BW_200           3
#define BW_300           4
#define BW_TOTAL        5

Du schreibst ja, "Definitionen"..heißt das, man braucht für jeden "Scroll-Block" so eine Definition?

Quote
M2_EXTERN_VLIST(el_menu);

Quote
M2tk m2(&el_menu, m2_es_arduino, m2_eh_2bs, m2_gh_lc);

Setzt man das immer ein, oder inwiefern benutzt man das?

Quote
uint8_t el_bw_first = 0;
uint8_t el_bw_cnt = BW_TOTAL;

Ich verstehe was Du meinst, aber wenn ich ein Programm schreiben würde, wüsste ich jetzt nicht, wann und warum und wie, bzw. in welcher Schreibweise ich das einsetzten müsste.

Quote
const char *el_bw_getstr(uint8_t idx, uint8_t msg) {
  const char *s = "";

Das wird ein character gebildet..oder? Wie und waum bildet man diesen? Was passiert da genau? Hab noch nie mit characters gearbeitet.

Quote
 if ( msg == M2_STRLIST_MSG_SELECT ) {
    brennweite = idx; (...)

Sowas muss man also immer bei Eingaben und die dazugehörige Speicherung der Eingabe machen, oder? Sonst kommt diese ewige Schleife..richtig?

Quote
M2_STRLIST(el_bw, "l4w12", &el_bw_first, &el_bw_cnt, el_bw_getstr);
M2_SPACE(el_space, "w1h1");
M2_VSB(el_bw_vsb, "l4w1r1", &el_bw_first, &el_bw_cnt);
M2_LIST(list_bw) = { &el_bw, &el_space, &el_bw_vsb };
M2_HLIST(el_bw_hlist, NULL, list_bw);

Die M2_XXXXX Variablen sind vorgegeben, oder wo wurden die definiert?
Man legt hier also fest, wie der "Scroll-Block" aussehen soll, oder?
Oder wird hier das ganze Layout definiert?
Kannst Du mir den gesamten Block und dessen Variablen erläutern? - Ich bin damit sehr überfordert und denke das dieses Element sehr wichtig ist / sein wird  smiley-confuse
Was bewirkt "NULL" ?

In Moment zappt man ziemlich schnell durch die Auswahlmöglichkeiten, wenn man einen Taster drückt.
Oft wird sogar ein Menüpunkt übersprungen..ich wollte ein delay(50) oder (100) einbauen..aber ich habe jetzt keine Ahnung wo.
Wahrscheinlich in der void loop.
Aber wo da?

Quote
void loop() {
  m2.checkKey();
  m2.checkKey();
  if ( m2.handleKey() )
    m2.draw();
  m2.checkKey();

im if, oder nach dem ersten checkKey?

Es wäre super toll, wenn Du mir da helfen könntest, deinen Quellcode zu verstehen!
« Last Edit: April 02, 2012, 03:02:45 am by Sim0n » Logged

Germany
Offline Offline
Edison Member
*
Karma: 137
Posts: 1551
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Gute Neuigkeiten - der Taster funktioniert nun und wir sind somit ein großes Stück weiter.

Na, da bin ich aber auch erleichtert.

Quote
In Moment zappt man ziemlich schnell durch die Auswahlmöglichkeiten, wenn man einen Taster drückt.
Oft wird sogar ein Menüpunkt übersprungen..ich wollte ein delay(50) oder (100) einbauen..aber ich habe jetzt keine Ahnung wo.

Das kann mehrere Ursachen haben. Zunächst mal betone ich, dass der Schalter am einen Ende mit Masse (0Volt) verbunden sein muss (siehe Bild weiter oben). Andernfalls ist die Polarität umgedreht und der debounce Alogorithmus könnte nicht mehr funktionieren.

Wenn das nichts hilft, könntest Du den debounce-Algorithmus etwas anpassen: Im Verzeichnis utility liegt die datei m2_key.c. Ändere dort den Wert des defines M2_DEBOUNCE_CNT von 3 auf 5 oder 7:

Code:
#define M2_DEBOUNCE_CNT 3

Noch eine Daumenregel: Verwende NIEMALS delay(). Es gibt hier im Forum viele Diskussionen in denen es darum geht Verzögerungen ohne dalay() zu implementieren. Anstelle des delay()'s könnte man auch Zustandsautomaten erstellen, wie sie beispielsweise hier auch von mir beschrieben sind:
http://code.google.com/p/m2tklib/wiki/t05

Quote
Du schreibst ja, "Definitionen"..heißt das, man braucht für jeden "Scroll-Block" so eine Definition?
Nein. So eine Definition verbessert nur die Lesbarkeit deines Programms. Du darfst gerne auch direkt mit den Zahlen 0 bis irgendwas arbeiten. Auf der anderen Seite (wie wir gerade bei Daumenregeln sind): Verwende niemals "magic numbers" in deinem Code.
Es ist doch besser zu schreiben
Code:
if ( bw == BW_135 )
als
Code:
if ( bw == 2 )
oder? BW_135 läßt sich viel besser merken als 2. Beides ist aber gleich, weil der Compiler einfach BW_135 durch 2 ersetzt.

Code:
M2tk m2(&el_menu, m2_es_arduino, m2_eh_2bs, m2_gh_lc);

Das ist der sogenannte C++ Constructor von M2tk lib. Der initalisiert die Lib. Damit werden auch ein  paar grundlegende Dinge festgelegt.

Die Beschreibung ist hier: http://code.google.com/p/m2tklib/wiki/fnref#M2tk
Als ersten parameter bekommt M2tklib das erste Menü das dargestellt werden soll.

Code:
M2_EXTERN_VLIST(el_menu);

Das wird vor allem deshalb benötigt damit der C/C++ Compiler zufrieden ist. Der beschwert sich nämlich wenn etwas unbekannt ist. Folgendes Beispiel:

Menü A: Hat einen Button der zu Menü B springt

Menü B: Hat einen Button der zu Menü A springt.

Wenn ich Menü A definiere, muss ich eigentlich Menü B schon kennen. Das geht aber nicht, weil Menü B erst später kommt. Auch das Vertauschen von Menü A und B  nützt nichts, dann hab ich das Problem halt mit dem anderen Button.

Die Lösung sieht so aus:

1. Wir sagen dem Compiler, dass Menü B erst später definiert wird (M2_EXTERN...)
2. Menü A: Hat einen Button der zu Menü B springt
3. Menü B: Hat einen Button der zu Menü A springt.

Quote
Das wird ein character gebildet..oder? Wie und waum bildet man diesen? 

Es muss ein pointer auf einen String zurückgegeben werden. Das ist Standard C/C++

Quote
Wie und waum bildet man diesen? Was passiert da genau? Hab noch nie mit characters gearbeitet.

Warum: Weil ich das so festgelegt habe und glaube, dass es ganz effizient ist.
Genaue Beschreibung ist hier:
http://code.google.com/p/m2tklib/wiki/elref#STRLIST

Muss leider mal unterbrechen, bis später...
Oliver
« Last Edit: April 02, 2012, 05:10:52 am by olikraus » Logged

Germany
Offline Offline
Edison Member
*
Karma: 137
Posts: 1551
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Hab noch nie mit characters gearbeitet.

Also, im Prinzip setze ich ein paar C/C++ Gundlagen voraus. Auf der anderen Seite, könnte man sich das auch aus den Beispielen erschießen, die ich in der M2tklib Referenz angeben haben. Speziell für die STRLIST:
http://code.google.com/p/m2tklib/wiki/elref#STRLIST. Anders ausgedrückt: Entweder gar nicht darüber nachdenken und das Beispiel aus der Referenz übernehmen oder aber ein gutes C (Betonung liegt auf C und  nicht auf C++) Lernbuch zur Hand nehmen und dort nachlesen.

Ich hab' mal nach "c tutorial" gegoogled und u.a.folgendes gefunden
http://www.c-howto.de/tutorial-strings-zeichenketten.html

Quote
Was passiert da genau?
Die Frage bezog sich ja auf das STRLIST element. Um es etwas allgemeiner zu formulieren. Das STRLIST Element sorgt für die Darstellung einer Liste von Strings. Damit man das wiederverwenden kann, muss die STRLIST einige Informationen kennen:
1. Wie viele Elemente gibt es denn insgesamt?
2. Wie viele Elemente sollen denn sichtbar sein?
3. Welches ist das erste sichtbare element? (wird teilweise automatisch berechnet)
4. Wie lauten denn die einzelnen Zeilen?

Punkt 4 ist wie folgt gelöst. STRLIST benutzt eine sogenannte Callback-Procedure (Rückruf oder Hilfs-Funktion). Die muss vom Benutzer der Lib (sprich von Dir) bereitgestellt werden und ermöglicht es der Lib zu einer gegebenen Zeilennummer den String zu ermitteln.

Diese Callback-Procedure wird aber für einen zweiten Zweck benutzt, deshalb schickt STRLIST eine Nachricht (erster Parameter der Callback-Procedure) über die STRLIST der CB-Procedure mitteilt, was es denn genau haben will.
Ist msg ==  M2_STRLIST_MSG_GET_STR, dann hält der zweite Parameter die Nummer der Zeile, zu der STRLIST gerne den String hätte. Siehe auch das Referenz-Handbuch:
http://code.google.com/p/m2tklib/wiki/elref#STRLIST

Code:
uint8_t el_bw_first = 0;
uint8_t el_bw_cnt = BW_TOTAL;

Darüber werden die Informationen
1. Wie viele Elemente gibt es denn insgesamt?
3. Welches ist das erste sichtbare element?
angegeben. Beides sind Variablen im Hauptspeicher, die sich jederzeit manuell ändern lassen bzw von STRLIST auch selbst aktualisiert werden. Man kann so beispielsweise in el_bw_first immer nachlesen welches das erste sichtbare Element ist (Achtung: Das ist nicht das Element, auf dem gerade der Cursor steht!). Man kann durch Änderung von el_bw_cnt auch die Liste dynamisch vergrößern (das ist aber nur selten sinnvoll...)

Code:
if ( msg == M2_STRLIST_MSG_SELECT ) {
    brennweite = idx; (...)
Quote
Sowas muss man also immer bei Eingaben und die dazugehörige Speicherung der Eingabe machen, oder? Sonst kommt diese ewige Schleife..richtig?

Zunächst mal: Das ist die zweite Aufgabe der Callback-Funktion: Die bekommt mitgeteilt, dass der Benutzer eine bestimmte Zeile angeklickt hat. In diesem Falle enthält der zweite Parameter die Nummer der angeklickten Zeile (beginnend mit 0, die erste Zeile hat also die Nummer 0).

Wenn Du die Nachricht von STRLIST ignorierst, passiert gar nichts. Aber in diesem Falle speichern wir einfach die vom  Benutzer ausgewählte Brennweite ab.

Code:
M2_STRLIST(el_bw, "l4w12", &el_bw_first, &el_bw_cnt, el_bw_getstr);
M2_SPACE(el_space, "w1h1");
M2_VSB(el_bw_vsb, "l4w1r1", &el_bw_first, &el_bw_cnt);
M2_LIST(list_bw) = { &el_bw, &el_space, &el_bw_vsb };
M2_HLIST(el_bw_hlist, NULL, list_bw);

Diese Variablen sind die sogenannten Elemente von M2tk. Die sind (wie auch die Funktionen) in M2tk.h (bzw m2.h) definiert. Alle Elemente sind hier:
http://code.google.com/p/m2tklib/wiki/elref
definiert. Meist auch mit einem Beispiel

Es wird hier das gesamte Layout und das Verhalten des Menüs definiert.

Hier ist das entsprechende Tutorial:
http://code.google.com/p/m2tklib/wiki/t02lc


Grüße,
Oliver
« Last Edit: April 02, 2012, 11:42:51 am by olikraus » Logged

Germany
Offline Offline
Edison Member
*
Karma: 137
Posts: 1551
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich glaube eine Frage bezüglich dieses Codes war noch offen.
Code:
M2_STRLIST(el_bw, "l4w12", &el_bw_first, &el_bw_cnt, el_bw_getstr);
M2_SPACE(el_space, "w1h1");
M2_VSB(el_bw_vsb, "l4w1r1", &el_bw_first, &el_bw_cnt);
M2_LIST(list_bw) = { &el_bw, &el_space, &el_bw_vsb };
M2_HLIST(el_bw_hlist, NULL, list_bw);

Zunächste einmal: Es gibt Listen und Elemente.
Alles was "M2_LIST" heisst, sind Listen, alles andere sind Elemente.

Die ersten beiden Argumente der Elemente sind immer gleich:
1. Name des Elementes
2. Ein Format String

Über den Namen kann das Element später referenziert werden. Achtung: Elemente werden immer über &Name referenziert. (Bei Listen ist es nur der Name!)

Der Format String enthält zusätzliche Angaben in der Form "Buchstabe" + "Zahl"
Beispielsweise bedeutet
"w1": Breite (Width) von einem Zeichen
"l4": Anzahl der Zeilen (Lines) von 4
"r1": Read-Only
Die genaue Bedeutung steht jeweils bei der Elementbeschreibung

Hier nochmals die Beschreibung des STRLIST Elements:
http://code.google.com/p/m2tklib/wiki/elref#STRLIST
Dort steht beispielsweise, dass der "l" Parameter notwendig (required) ist. Man muss das also angeben. Klar, sonst weiss nämlich m2tklib nicht, wie viele Zeilen dargestellt werden sollen.

Der Format-String selbst, ist hier beschrieben:
http://code.google.com/p/m2tklib/wiki/elref#Element_Format_String

Betrachten wir nochmal kurz das Ergebnis:


Ganz rechts ist eine Spalte mit dem Scrollbalken. Das Ding heisst VSB (vertical scroll bar) und ist hier dokumentiert:
http://code.google.com/p/m2tklib/wiki/elref#VSB

Die ersten beiden Parameter sind die üblichen:
Code:
M2_VSB(el_bw_vsb, "l4w1r1", &el_bw_first, &el_bw_cnt);
Er ist 4 Zeichen hoch ("l4") ein Zeichen breit ("w1") und soll nicht veränderbar durch den User sein ("r1").
Über die beiden folgenden Parameter drei und vier kommuniziert die VSB mit der STRLIST. Sozusagen ist die Scrollbar über diese beiden Variablen mit der Liste verknüpft und die VSB zeigt den passenden Ausschnitt am Display an.

Links neben der VSB befindet sich eine leere Spalte. Diese wurde mit M2_SPACE erzeugt. SPACE bekommt nur die bekannten zwei parameter. Wiederum definiert der Format-String "w1h1" die Größe des Leerraums.
Über "w1" ist also festgelegt, dass eine Spalte belegt ist.

Ganz links ist die STRLIST, die hier den größten Raum beansprucht. Auf meinem 16x4 Display sind das 14 Spalten.
Code:
M2_STRLIST(el_bw, "l4w12", &el_bw_first, &el_bw_cnt, el_bw_getstr);
Die Breitenangabe "w12" gibt übrigens die Netto-Breite an, also ohne den Platz für den Cursor (die eckigen Klammern). Die Breite der STRLIST ist also tatsächlich 12+2= 14 Spalten. An dritter und vierter Parameterstelle folgen wieder die beiden Variablen, über die die STRLIST mit der VSB kommuniziert (wenn denn eine VSB da ist. Wenn keine VSB da ist, braucht die STRLIST aber die Parameter trotzdem) Auch hier wird über & die Adresse der Variablen übergeben und nicht der Inhalt der Variablen. Als fünfter und letzter Parameter wird dann die Callback-Prozedur übergeben (siehe oben).

Jetzt müssen noch diese drei Elemente gelayoutet werden. Dazu bietet M2tk diverse Kontainer-Elemente an. Dies sind derzeit:
- XYLIST --> Manuelles Plazieren der Elemente per (x,y) Koordinate
- VLIST --> Automatisches Plazieren vertikal
- HLIST --> Automatisches Plazieren horizontal
- GRIDLIST --> Automatisches Plazieren als Matrix

Damit die Kontainer arbeiten können, muss ihnen eine Liste der Elemente übergeben werden. Das ist die angesprochene M2_LIST.
- M2_LIST klammert mehrere Elemente
- Die Reihenfolge der Elemente in der M2_LIST kann wichtig sein (für VLIST, HLIST und GRIDLIST)
- M2_LIST selbst ist KEIN Element.

Nochmal der Code:
Code:
M2_LIST(list_bw) = { &el_bw, &el_space, &el_bw_vsb };
M2_HLIST(el_bw_hlist, NULL, list_bw);

Die Liste bekommt einen Namen "list_bw". Die Elemente stehen (wie in C üblich) zwischen { und }. Die Elemente werden über den & Operator referenziert. Da später die HLIST verwendet wird, ist die Reihenfolge wichtig: Zuerst (ganz links) die STRLIST (el_bw), dann das SPACE und am Schluß die VSB.

Schließlich wird am Schluss das Kontainer-Element selbst definiert: Eine HLIST ordnet das ganze horizontal (von links nach rechts) an. Einen Format-String bekommt die HLIST nicht, deshalb wird NULL übergeben, was soviel heisst wie: "Es gibt keinen Format String". Als dritter Parameter muss die Liste angegeben werden: Achtung: KEIN & für die Listen.

So, das war mein Versuch Deine Fragen zu beantworten. Wer auch immer es bisher mit dem Lesen geschafft hat: Vielen Dank und viel Spass mit M2tklib

Oliver


Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielen Dank Oliver!

Ich finds sehr kompliziert..ich habs versucht nachzuvollziehen, aber es fällt mir sehr schwer.
Andere Möglichkeiten gibt es nicht - oder?

Mh... Tut mir Leid das ich so "schwer vom Begriff" bin - aber glaub mir, ich habs versucht es zu verstehen und habe auch lange zum verstehen gebraucht - aber es hat nichts genützt.
Ich versteh einigermaßen was du programmiert hast, könnte es aber nicht nachprogrammieren.  smiley-confuse
Logged

Pages: 1 [2]   Go Up
Jump to: