Loading...
  Show Posts
Pages: 1 ... 33 34 [35] 36 37 ... 54
511  International / Deutsch / Re: Projektvorstellung Holzvergaser on: April 06, 2012, 03:52:24 pm
wow, das gefällt mir.

Nebenbei (weil ich mir auch den Quellcode angeschaut hatte): Man sollte keine float variablen via == vergleichen.

Oliver
512  Using Arduino / Displays / Re: MENWIZ: yet another character lcd menu wizard library on: April 06, 2012, 03:27:55 pm
I recently failed to support a user. It turned out that M2tklib is still too complicated (will i win the price for the most complicated lib?).

I would like to make M2tklib more simple. So I try to understand other approaches. And I like to see fresh libs like yours. For me a comparison about the programming interfaces would be useful (not about features). What would be the most easy approach for a beginner? What do others think about these different approches regading the programming API?

If we find something common which can be implemented by each of the libs, then i think i could get a better understanding of each programming model. And maybe other users can rate the programming effort for each API.

My idea was something about this: On a 16x4 (or 20x4) display 4 selectable lines. The user selects one line and the display shows the line number (0-3). No scrolling, just a cursor which is used to select one of four lines. Is this possible with MENWIZ?

Oliver
 
513  Using Arduino / Programming Questions / Re: Simultaneous SPI Devices on: April 05, 2012, 05:53:52 pm
Indeed the LCD (16x2, doglcd lib) uses Software SPI (something like shiftout). But SdFat makes use of the HW SPI. On the board both devices are connected to the same SPI pins (with different chip select signals). To use the doglcd lib, I had to disable the SPI subsystem. To use SdFat I had to restore the HW SPI .


Oliver


 
514  International / Deutsch / Re: Etwas genau eine Minute Programieren on: April 05, 2012, 05:33:15 pm
Das war ein Wortwitz mit dem Titel dieses Threads: Jemand sollte etwas genau eine Minute programmieren (mit kleinem p). Ich habe aber 90 Sekunden gebraucht um das Codefragment zu programmieren (hab' s gestoppt)  smiley-wink

Tatsächlich hatte ich den Titel falsch verstanden. Ich hab mich nämlich gefragt, wieso hier jemand gesucht wird, der eine Minute lang programmiert.

Oliver

515  Using Arduino / Programming Questions / Re: Simultaneous SPI Devices on: April 05, 2012, 03:07:52 pm
When I recently attached two SPI devices (SD Card and LCD) i noticed, that the chip select is not the only problem. Both devices (i mean their libs) did use a different and incompatible SPI setup. And both libs did this setup only during their lib startup phase. This forces me to save the SPI state of both libs and restore the settings, depending which device i want to access next.

Oliver
516  International / Deutsch / Re: UNO per Linux und bash mit Sketch versorgen on: April 05, 2012, 02:47:59 pm
Ich verwende praktisch ausschließlich Makefiles für meinen "Uno".
Mit make -n ausgegeben lauten bei mir das Upload Kommando:

stty -F /dev/ttyACM0 hupcl
avrdude -V -F -C /home/kraus/prg/arduino-0022//hardware/tools/avrdude.conf  -p atmega328p -P /dev/ttyACM0 -c stk500v1  -b 115200 -U flash:w:tmp/HelloWorld.hex

ok, ob das jetzt ttyACM0 oder ACM1 heisst, hängt von der Anzahl der angeschlossenen UNO's ab. Manchmal kommt Linux auch durcheinander, wenn die Arduino IDE noch aktiv ist.

Was mir aber noch aufgefallen ist: Du verwendest das conf file unter /etc. Ich hab mir angewöhnt das conf file aus der Arduini IDE zu benutzen. Auf jedenfall falsch ist das baud-raten Kommando (-b). Der Uno erwartet die Daten wesentlich schneller. Grundsätzlich sollte das Makefile das boards.txt auslesen.

Meine Makefiles für Uno mit 0022 bzw Uno mit 1.00 liegen u.a. hier:
http://code.google.com/p/u8glib/source/browse/#hg%2Fsys%2Farduino%2FHelloWorld

Sehr empfehlen kann ich auch das Makefile hier:
http://arduino.cc/forum/index.php/topic,88989.0.html
Vor allem die Idee mit dem screen Befehl ist sehr nett (simuliert den Serial Monitor der Arduino IDE)

Oliver

Edit: Wollte noch anmerken, dass es bei dem eingangs genannten Fehler zuweilen notwendig ist, den Uno zu reseten und unmittelbar danach den Upload zu starten. Das hilft oft.
517  International / Deutsch / Re: Etwas genau eine Minute Programieren on: April 05, 2012, 02:31:50 pm
Also, es spricht nichts dagegen, dieses Code-Fragment irgendwo mitten im Code zu benutzen. Das mit dem "flushen" hab ich aber nicht verstanden.

Das "L" ist an sich in diesem Fall nicht notwendig. Es handelt sich hier um den Zahlen-Anhängsel, der aus der Zahl eine "long" Zahl macht. Aber genauer müsste es eigentlich "UL" für unsigned long heissen:

Code:
unsigned long ziel_zeit;
ziel_zeit = millis() + 1000UL*60UL;
while( ziel_zeit >= millis() )
{
  // frage sensor ab
}

Mit anderen worten "1000" wäre eine vorzeichenbehaftete 16 Bit Zahl, jedoch "1000UL" ist eine vorzeichenlose 32 Bit Zahl. Es ist an sich sicherer alle Terme eines Ausdrucks vom selben Datentyp zu haben. Da "millis()" einen unsigned long zurückgibt, sollte man auch einen unsigned long dazuaddieren.

Quelle: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
Abschnitt 6.4.4.1 (Seite 54, bzw 66 im PDF)

Oliver
518  International / Deutsch / Re: Etwas genau eine Minute Programieren on: April 05, 2012, 12:09:04 pm
Code:
unsigned long ziel_zeit;
ziel_zeit = millis() + 1000L*60L;
while( ziel_zeit >= millis() )
{
  // frage sensor ab
}

das code Fragmet oben zu schreiben dauerte leider 1 1/2 Minuten. Somit habe ich leider etwas länger als eine Minute programmiert. Ich hoffe das macht nichts.  smiley-wink

Oliver
519  Using Arduino / Displays / Re: MENWIZ: yet another character lcd menu wizard library on: April 05, 2012, 11:09:21 am
Quote
MENWIZ requires LiquidCrystal_I2C
Will there be support for the standard Arduino LiquidCrytal lib?

Oliver
520  Using Arduino / Displays / Re: MENWIZ: yet another character lcd menu wizard library on: April 04, 2012, 05:18:41 pm
Hi liudr and brunialti

Very interessting discussion. I have learned a lot today. I never thought of a dynamic menu system. Indeed, i never thought it could be possible. My own menu system (m2tklib) uses a complete static approch...

It would be interesseting to analyse these differences more closely. Something like this: Define a task which could be implemented by any of the menu libs and compare the results. Occupied flash, ram. Execution  speed. Lib maintenance, usability, learning curve.

Unfortunately, github seems to be down at the moment... so its just a thought...

Oliver


 



 
521  International / Deutsch / Re: projekt | arduino game controller on: April 03, 2012, 05:23:32 pm
Hi
Ich glaube die c't hatte da mal einen Artikel über einen 3D Controller:
http://www.heise.de/ct/projekte/machmit/processing/wiki/AufbauArduino

Der verwendete Sensor ADXL330 auf einem Adapterboard wird einzeln und im Bausatz angeboten.

Über 3D Darstellung denke ich selbst schon seit längerem nach, aber ich befürchte, dass die Rechenleistung nicht so wirklich ausreicht. 2D wäre am Anfang sicher erfolgversprechender. Wie soll denn die Ausgabe erfolgen? Auf ein Graphik-Display?

Realistisch für Echtzeitanwendungen sind Monochrome Graphik-Displays bis ca. 128x64. Ausserdem sollte es eine passende Lib geben (d.h. der Display-Controller sollte unterstützt werden). Übersicht beispielsweise hier:
http://code.google.com/p/u8glib/wiki/device

Oliver
522  Using Arduino / Displays / Re: Select option from LCD screen on: April 03, 2012, 06:51:45 am
Similar discussion seems to be here:
http://arduino.cc/forum/index.php/topic,98875.15.html
523  Using Arduino / Displays / Re: 2.4 TFT Color LCD with Arduino Uno Rev 3 on: April 03, 2012, 06:44:32 am
At least the Controller is supported by this lib:
http://henningkarlsen.com/electronics/library.php

Oliver
524  International / Deutsch / Re: Bouncer-Problem on: April 02, 2012, 12:19:42 pm
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


525  International / Deutsch / Re: Bouncer-Problem on: April 02, 2012, 05:38:59 am
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
Pages: 1 ... 33 34 [35] 36 37 ... 54