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
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
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%C3%BC+%2Blcd&forums[]=1&forums[]=19&forums[]=9&forums[]=10&forums[]=2&forums[]=4&forums[]=3&forums[]=6&forums[]=17&forums[]=11&forums[]=8&forums[]=14&forums[]=12&forums[]=7&forums[]=5&forums[]=18&forums[]=15&forums[]=13&forums[]=16&max_age=-&sort_by_date=0#results
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.