mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Menu pointer Auf Funktion


Autor: asuronewcommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!
Ich habe den ASURO-Roboter mit einem ATMEGA2560 und einem 4x20 LCD 
display erweitert.

Die Grundfunktionen (Vorwärtsfahren, Linie folgen,...) funktionieren 
alle einwandfrei.

Nun bin ich an einem Menu, in welchem man das Programm anwählen kann.

Den Menubaum habe ich einmal gemacht und die Navigation funktioniert. 
Jedoch will ich jetzt, dass unter den einzelnen Menupunkten eine 
Funktion (zB folge Line) ausgeführt wird.
Soweit ich mich in das Thema eingelesen habe, muss es mit einem 
Funktionspointer geschen, jedoch dort happert es ein bisschen. (Das 
ganze ist noch relativ primitiv aber soll zu Verständingung dienen.)



Hier die Code-Schnipsel




struct FSM_TAG { char * menutext; int up, right, left, down, south, 
north;};

struct FSM_TAG watchmenu[20] = {
{"ASURO", 2,  1,  0,  14,  0,  0},
{"Version 2.0",  1,  1,  0,  1,  1,   1, },
{"Follow Line",  5,  3,  2,  0,  2,  2},
{"Press Up\nfor Start",  3,  3,  2,  3,  3,4},
{"Follow Line\n running",  4,  4,  4,  4,  3,4},
{"Make Square",  8,  6,  5,  2,  5,  5},
{"Press Up \nfor Start",  6,  6,  5,  6,  6,7},
{"MakeSquare is running",  7,  7,  7,  7,  6,7},
{"Go Distance",  11,  9,  8,  5,  8,  8},
{"Press Up for Start",9,  9,  8,  9,  9,  10},
{"GoDist\nis running",  10,  10,  10,  10,  9,10},
............
};


Meine Frage ist nun: wie kann ich den Code erweitern, dass meine 
Funktionen (folloLine(), goDist()) beim Anwählen des jeweiligen Menus 
ausgeführt werden?
Zb Untermenupunkt "Follow Line" soll die Funktion followLine(intspeed); 
ausgefürt werden. Oder "goDist" soll die Funktion goDist(int speed, int 
length) ausgeführt werden.

grüsse
stibe

Autor: Michael Appelt (micha54)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe so was ähnliches programmiert, dabei habe ich alle Funktionen 
so normalisiert, daß sie alle z.b. zwei Referenzen auf unsigned integers 
als Parameter bekommen.

struct {
....
int (*execfunction)(unsigned int *, unsigned int *);
unsigned int * param1;
unsigned int * param2;
....
}

Funktionen mit keinem oder nur 1 Parameter bekommen halt einfach 0 in 
der Tabelle, fehlt die Funktion, so wird auch der Funktionspointer 0.

Bei mir ist es z.B. so:

1) eine Funktion show_Menu bekommt einen Pointer auf ein Untermenü (im 
Code, d.h. typecast erforderlich) sowie 0 als 2. Parameter und springt 
dann in ein neues Menü. Der Rückgabewert ist dann der letzte Tastencode, 
mit dem ich 1 Ebene (Back) oder bis zum Anfang (Top) springen kann.

2) eine Funktion e2p_Write bekommt einen Zeiger auf eine Variable im 
eeprom sowie einen weiteren auf die aktuelle Zahl in der Eingabe 
(umgewandelt als unsigned int). Der Rückgabewert ist dann 0 oder 
irgendein Fehlercode.

Usw....halfs ein wenig ?

Gruss,

Michael

Autor: asuronewcommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!


Der Ansatz mit allgemein 2 Übergabeparameter werde ich einmal 
ausprobieren.

Kannst du nicht einmal dein Projekt posten, damit das Ganze einmal zu 
sehen ist?

Danke&Gruss

Stibe

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schonmal die Suche hier benutzt?
Das Thema wurde x-mal durchgekaut. Oder bist Du zu faul zum Lesen?

Hier die Suche:
http://www.mikrocontroller.net/search?query=%2Bmen...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.