LCD Menu pointer Auf Funktion

Gast #1092935
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
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
Gast
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
Gast

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.