Hallo,
ich bin seit einiger Zeit mit einem Kollegen dabei einen
Funktionsgeneratorbausatz zu entwickeln mit eigener freier Firmware.
Da wir ein kleines Menü in unserem Display haben wollten habe ich ein
paar Funktionen geschrieben, die es ermöglichen sehr strukturiert
Menüseiten anzulegen und bestimmten Koordinaten funktionen zu geben,
sodass man später einfach nur noch einen Tastendruck abfangen muss um
die richtigen Funktionen auszuführen.
Da das ganze gut Funktioniert und das Hinzufügen von Menüseiten ein
Kinderspiel geworden ist habe ich das ganze mal als Archiv
zusammengepackt, ein kleines Beispiel gemacht, dass ich jedoch nocht
nicht testen konnte aber es zeigt glaube ich ganz gut, was man mit dem
Code machen kann.
Wer nicht zu viel erwartet ist sicher Glücklich damit ;)
Das Archiv: https://pleed.dynalias.net/liblcdmenu-0.1.tar.gz
Mein svn https://pleed.dynalias.net/websvn
hallo an alle, ich bin gerade dabei c zu lernen, und habe einige fragen
die lib betreffend. ich blicke bei manchen sachen garnicht durch, z.b.:
1
page->p_acts[page->cur_action]((void*)(page));
2
...
3
page_button(Page*page)
1.was bedeutet "->"
2 wofür steht "*", das habe ich in anderen quellcodes auch gesehen
3. und die "[]"
ich habe das avr tut. durchgelesen, aber das gibt mir nich die antworten
auf die hier gestellten fragen, oder ich raffe etwas nicht.
mfg kleber
p.s, das hier bereitgestellte proggie geht bei mir nicht, beim
compilieren, kommt "main.c:96: warning: passing argument 2 of
'page_init_screen' from incompatible pointer type"(die zeilennummer
dürfte von dem original abweichen da ich zeilen zugefügt habe).
ach ja, und die wichtigste frage: Wocher weiss das program welche taste
gedrückt wird?
mfg kleber
Kleber wrote:
> hallo an alle, ich bin gerade dabei c zu lernen, und habe einige fragen> die lib betreffend.
Deine Fragen sind keine Fragen bezüglich der Lib.
Das sind Fragen über C.
Um C zu lernen ist es praktisch unerlässlich ein Lehrbuch
durchzuarbeiten.
> ich habe das avr tut. durchgelesen, aber das gibt mir nich die antworten> auf die hier gestellten fragen, oder ich raffe etwas nicht.
Kein Wunder. Das AVR Tut beschäftigt sich hauptsächlich mit
den Besonderheiten, wenn man C mit einem AVR einsetzt. Es
setzt ein gewisses Grundvertändnis von C voraus.
PS: Das ist jetzt keine Gehässigkeit, dir nicht zu erklären
was es mit den -> und [] auf sich hat. Das würde einfach
zuweit führen und ich hab ehrlich gesagt keine Lust dir
in 30 Zeilen eine Zusammenfassung über Themen zu geben, die
in jedem halbwegs anständigem Lehrbuch 3 Kapitel füllen.
hmmmmm, veständlich....
Aber es würde mir sehr helfen wenn jemand (so wie bertie) tipps gibt um
was es sich dort dreht, um schneller die benötigten infos zu finden.
hier ging es nicht darum mir das komplete c zu eklären.
@Karl heinz: eine der fragen bezieht sich doch auf die lib (Wocher weiss
das program welche taste gedrückt wird/wurde?), und wenn du auch jetzt
der meinung bist, dass die frage nix mit der lib zutun hat, dann müssten
(fast) alle threads gleich mit "lerne c" beendet werden.
mfg
MicroMann wrote:
> Die Themen die du suchst lauten Pointer, Strukturen und cast.> Viel Erfolg.
Wobei es sich in diesem Fall um die 'hardcore' Version von
Pointern handelt: Funktionspointer.
http://www.mikrocontroller.net/articles/FAQ#Funktionszeiger
Kleber wrote:
> @Karl heinz: eine der fragen bezieht sich doch auf die lib (Wocher weiss> das program welche taste gedrückt wird/wurde?),
Ich hab mir die Lib nicht downgeloadet, drum hab ich auch nichts
dazu gesagt.
Welche Möglichkeiten gibt es denn prinzipiell:
* Die Lib fragt selber die entsprechenden Ports/Pins ab
In dem Fall wird sich wohl irgendwo eine Definition
der benutzen Portpins finden, die man anpassen muss
* Die Lib geht davon aus, dass der Anwendungsprogrammierer
eine Funktion zur Verfügung stellt, die sie aufrufen kann
und die die entsprechende Taste liefert.
In dem Fall wird sich an den relevanten Codestellen ein
Funktionsaufruf finden lassen, für den es innerhalb der
Lib keine Funktion gibt. Allerdings wird hächstwahrscheinlich
der Name dieser Funktion so gewählt sein, dass das auch ein
Blinder auf 20 Schritte Entfernung erkennen kann.
* Die Lib kümmmert sich überhaupt nicht um die Tasten, sondern
funktiniert nach dem Muster.
Anwenderprogramm wertet Tasten auf und ruft mit der Taste
immer wieder eine Funktion aus der Lib auf. Diese Funktion
bearbeitet den Aufruf und kehrt dann sofort zurück
* Irgendein anderer Mechanismus, der sich durch Studium des
Source Codes ergibt
ooooooooja, ich habe mir gerade das buch angeschaut (speziel pointer
kapitel) und, mein lieber schwager...... jetzt bin ich für eine weile
beschäftigt.
Benutzt eigentlich jemad die lib hier? ich würde gerne wiessen ob bei
den anderen alles reibungslos angelaufen ist den, bei mir will es nicht,
makefile auf cpu und osc. angepasst, das program lässt sich compilieren,
aber da kommen 2 warnungen: "main.c:96: warning: passing argument 2 of
'page_init_screen' from incompatible pointer type" und "main.c:73:
warning: 'digit' is used uninitialized in this function". Lcd wird init.
(schwarzer balken verschwindet) aber auf dem display ist nur ein
uterstrich zu sehen. ist es problematisch, dass ich 8mhz statt die
vorgegebenen 16mhz genohmen ghabe. und....ich weiss immer noch nicht wie
das mit den tasten funzt. einzig in der main steht etwas mit port und
pin....
1
intmain(void)
2
//{{{
3
{
4
5
6
DDRA=0x00;
7
uint8_tinput=PINA;
8
9
// At first we create our defined example page (look into create_pages())
10
create_pages();
11
12
// writes PAGE_EXAMPLE on lcd display
13
page_display(PAGE_EXAMPLE);
14
15
while(1){
16
if(input!=PINA)
17
page_button(&menu_pages[cur_page]);
18
}
19
20
return0;
21
}
die frage ist, wo werden die tasten ausgewertet? nirgendwo im code wird
etwsa mit "input" oder "PINA" gemacht, auser in main aber, das was da
steht reicht nnicht um die tasten auszuwerten, oder sehe ich das falsh.
mfg. kleber
Kleber wrote:
Jetzt hab ich mir die Lib doch mal geholt.
> Benutzt eigentlich jemad die lib hier?
Ich denke du erwartest zuviel von der Lib.
Das ganze ist eigentlich mehr eine Sammlung von Funktionen
die einem helfen bzw. zeigen sollen wie eine Datenstruktur
zum Aufbau von Menüs aussehen kann.
Wenn du da ein fertiges Menüsystem suchst, dann ist das nichts
für dich.
> aber da kommen 2 warnungen: "main.c:96: warning: passing argument 2 of> 'page_init_screen' from incompatible pointer type" und "main.c:73:> warning: 'digit' is used uninitialized in this function".
Beide Warnungen sind kritisch und müssten korrigiert werden.
> vorgegebenen 16mhz genohmen ghabe. und....ich weiss immer noch nicht wie> das mit den tasten funzt.
Ja. da kümmert sich die Lib nicht drum. Tastenauswertung
ist dein Bier. Im Grunde steckt dir Tastenauswertung in main()
drinnen und soll nur zeigen mit welchen Funktionen man dieses
Menüsystem ins Rollen bringen kann.
> einzig in der main steht etwas mit port und> pin....
Auch das ist nicht als endgültige Lösung gedacht.
Wie gesagt: Das ist keine Lib im Sinne von: hol ich mir,
binde sie in mein Projekt ein, compiliere sie und rufe
2, vielleicht 3 Funktionen auf und geht. Das ist mehr als
Anfang eines Baukastensystems zu sehen.
lol, ich bin also nicht der einzige der nicht schlafen kann.
ahaaaaaa, aha, aha.... in der tat suche ich ein menusystem das einfach
in ein kleines project anzubinden ist aber, ich bin froh dass ich dieses
gesehen habe, so bin ich auf sachen gestossen die aufklärung bedürfen.
ich habe mir die kapitel über pointer durch gelesen und jetzt ist alles
schlimmer geworden;) den begrüsungs satz habe ich verstanden,
danach.....nebel, nicht mal bahnhoff verstanden. so schlim ist es zum
glück nicht aber es wird heftig. kanst du mir ein menüsystem empfelen
(falls du welche kennst)?
mfg
Kleber wrote:
> glück nicht aber es wird heftig. kanst du mir ein menüsystem empfelen> (falls du welche kennst)?> mfg
Nicht wirklich.
Das Problem: So ein Meüsystem sieht anders aus, je nachdem ob man
ein 2 zeiliges oder ein 4 zeiliges LCD benutzt. Auch die Anzahl
der Zeichen pro Zeile kann einen Unterschied machen. Daher passe
ich meine Menüsysteme der Aufgabenstellung an und programmiere
sie meist speziell für die Anwendung. Sooo schlimm ist das auch
wieder nicht.
Ich kann es mir denken dass es nicht so schlimn ist aber, für anfänger
sind beispiele an die man sich orientieren kann wichtig. ich blicke
nicht durch wie ein menusystem zu bewerksteligen ist daher die bitte um
beispiele.
mfg
2 Voraussetzungen:
* Schaffst du es, auf dem LCD einen Text auszugeben?
* Schaffst du es einen/mehrere Taster zuverlässig und
ohne Prellen auszulesen?
Die beiden Voraussetzungen musst du zunächst mal erfüllen
können. Sonst hat es keinen Sinn mit dir ein Menüsystem
durchzugehen.
PS: Wir sollten uns von hier verziehen.
Das ist die Codesammlung. In der wird fertiger Code präsentiert.
Nach deiner nächsten Antwort, werde ich einige der vorstehenden
Einträge löschen.
definitiv, ja. Ich habe keine probleme damit. Kleinere programe habe ich
schon öfter geschrieben, lcd, taster pwm sind sachen die ich oft
benutze. Halt für ein menü reicht mein wissen nicht.
mfg
p.s. wo geht es jetzt weiter?
Hallo,
der Thread ist zwar schon etwas älter, aber sind die Links vom
Threadanfang sind allesamt tod. Auch bei Google finde ich nur zahlreiche
tote. Könnte jemand die Bibliothek hochladen oder neue Links
veröffentlichen? Danke.