Hi ich möchte gerne auf einem LCD-Display ein Menü darstellen. Beispiel 1: 1.1: 1.1.1: 1.1.1.1: 1.1.1.1.1 1.1.1.1.2 1.1.1.1.3 1.1.1.1.4 1.1.1.1.5 1.1.1.2: 1.1.1.2.1 1.1.1.2.2 1.1.1.2.3 1.1.1.2.4 1.1.1.2.5 1.1.1.3: 1.1.1.3.1 1.1.1.3.2 1.1.1.3.3 1.1.1.3.4 1.1.1.3.5 ............. 5.5.5.5.5 Ich wollte es erst nicht rekursiv machen, aber dies schluckt dermaßen viel Speicher, dass ich wohl nicht damit auskomme. Um zu hinterlegen, in welchem Menüpunkt ich bin, habe ich folgende Variablen deklariert: Dim Menue(5) As Integer ' <- bsp.: Menue(1)=1, Menue(2)=3, Menue(3)=5 Dim Aktmenue As Integer ' <- Aktuelles untermenü (=> bis Menue(aktmenue), bsp.: 3 also ist man in diesem Beispiel im Menue 1.3.5 Wie kann ich das Rekursiv lösen? Gibt es schon ein Beispielprojekt im Internet? Vielen Dank für eure Lösungen. PS: Ich benutze Bascon, jedoch kann man die Ideen ja auch generell Formulieren.
Wie kommst du auf rekursiv? Sowas kostet noch mehr Speicher. Und die meisten Rekursionen kann man auch iterativ darstellen.
...leider kann ich dir den code nicht stellen, aber: ich habe auch schon oft über die problematik nachgedacht... natürlich benötigst du mehr programmspeicher, als wenn du es (rekursiv löst)
hups... aber rekursuiv ist vielleicht auch nicht ganideal ... zudem benötigst du für unterschiedlich lange menüs immer wieder ein anderes abbruchkriterium und du willst sicher auch namen vergeben.. rekursiv läuft zudem auf dem stack und ist damit auch beschränkt... und der code ist meistens recht unübersichtlich... warum nicht ein schleife, eine funktion - soweit so gut, dann aber ein array mit menünamen und ein parameter für die menünummer, der gleichzeitig für das array als index funktioniert, dann vielleicht noch ein array mit den maximalwerten oder so..... nur so als gedankenansatz... damit sparst du vielleicht etwas programmspeicher... d.
Versuche ich auch grade nur ich hab das Problem, dass ich keine Mehrdemensionale Arrays deklarieren kann... Beitrag "Mehrdemensionales Array in Bascom"
>vielleicht hilft das: >y[a][b] entspricht *(*(y+a)+b) ja, genau...Einem Bascom-"Programmierer" mit C-Syntax kommen...
steht denn dort ein schild: bascom oder c!? d. ps.: deswegen ja auch vielleicht, irgentwie verstehe ich deinen einwand jetzt nicht!?
zudem der Hinweis...
>PS: Ich benutze Bascon, jedoch kann man die Ideen ja auch >>>generell<<<
Formulieren.
Leider bin ich "Out of SRAM" bleibt da noch normal ohne rekursiv..... :-( wahrscheinlich verbraucht das auch weniger RAM, aber am meisten Speicher
[OT]
>Ideen ja auch >>>generell<<< Formulieren.
C-Syntax ist (für mich) keine "generelle Formulierung"...
[/OT]
...ich schnall deine probleme ehrlich gesagt nicht... zudem solltest du dich etwas klarer ausdrücken! auch register im chip sind speicher, und RAM ist übrigens auch eine art von speicher. ein wasserturm übrigens auch. d.
Wozu soll das Menü dienen? Wieviele (per Menü veränderbare) Parameter musst Du vorhalten? Wie soll das Menü bedient werden? Text-LCD oder Grafik? Ich vermute nämlich, dass Du das Pferd von hinten aufzäumst und mehr Speicher verbrauchst als erforderlich ist. ...
Du willst wirklich ein Menu mit 3125 Einträgen aufbauen? Den Benutzer will ich sehen, der das bedienen will... Vor allem: Was willst dann mit den entsprechenden Menu-Einträgen steuern? Anzeigen mag ja noch Pippifax sein, aber 3125 Funktionen schreiben, wird interessant (man kann es vielleicht noch dadurch kürzen, dass die letzte Ziffer ein Parameter für die jeweilige Funktion ist, aber soll es das wirklich sein?). Nur so als Ergänzung.... Mal dir am besten mal dein Menu auf (Baumstruktur), damit du die reale Grösse feststellen kannst. Einfach nur zu schreiben, dass man eine riesiges Menu haben will, ist unpraktisch. Meist ist eine praxisnahe Lösung erweiterbar...
@Mats Marcus: Wenn wir Dir helfen sollen, solltest Du mal langsam meine Fragen beantworten. Denn es gibt mehrere Lösungen. Um die richtige für Deinen Fall zu finden, müsste man eben wissen, was per Menü gemacht werden soll. Das Anzeigen der Menütexte ist dabei nur die halbe Miete, es kommt auch darauf an, wie Du im Menü navigieren willst und was die einzelnen Menüpunkte tun sollen (Zusammenfassung gleichartiger Aufgaben an unterschiedlichen Objekten). Hier nochmal meine Fragen: > Wozu soll das Menü dienen? > Wieviele (per Menü veränderbare) Parameter musst Du vorhalten? > Wie soll das Menü bedient werden? > Text-LCD (wie groß?) oder Grafik? Dass Du hier etwas auf die Schippe genommen wirst hat nur damit zu tun, dass Deine Frage nicht konkret genug ist. Nimm's nicht persönlich. ...
also: Das Menü soll zur Steuerung einer Master-Slave-Steckdose mit div. Eingängen wie 3xZeitschaltuhr, 2xMaster, Eine Routine zur Kontrolle einer externen LED etc. dienen. Das Menü soll durch 3 Taster bedient werden: Up Down OK Durch up und down soll man im menü nach oben oder unten scrollen können, duchr OK ein Menüpunkt "vertiefen", bei Parameteranzeigen diese auch verändern. Das LCD-Display ist leider nur 2*16 groß, daher auch wenig "Platz". Die Grüße des Menüs soll (nach größerem probieren) ein Hauptmenü und zu jedem Menüpunkt max. 2 Untermenüpunkte (ein untermenü mit einem weiteren Untermenü) haben Hat das geholfen? :P
Mats Marcus wrote u.a.: > Das Menü soll zur Steuerung einer Master-Slave-Steckdose mit div. > Eingängen wie 3xZeitschaltuhr, 2xMaster, Eine Routine zur Kontrolle > einer externen LED etc. dienen. > > Das Menü soll durch 3 Taster bedient werden: > > Up > Down > OK Bei kleinen (zweizeiligen) LCDs verwende ich gern 4 Taster: - Nächster Menüpunkt - Plus (Parameter erhöhen) - Minus (Parameter vermindern) - Save (Parameter dauerhaft speichern) Angezeigt wird dann in der oberen Zeile der Menütext, in der unteren der Wert. > Durch up und down soll man im menü nach oben oder unten scrollen können, > duchr OK ein Menüpunkt "vertiefen", bei Parameteranzeigen diese auch > verändern. Da würde mir der "zurück"-Taster fehlen. Da die veränderbaren Parameter ja sinnvollerweise im EEPROM gespeichert werden, das EEP aber einer gewissen Abnutzung unterliegt, würde ich unnötige Schreibzugriffe vermeiden, also Parameteränderung und Speichern konsequent trennen. Dein Vorschlag würde ja bei jeder Parameteränderung sofort speichern. > > Das LCD-Display ist leider nur 2*16 groß, daher auch wenig "Platz". Das ist ok. Eine Zeile Menütext, die andere Zeile Parameterwert und Einheit. > > Die Grüße des Menüs soll (nach größerem probieren) ein Hauptmenü und zu > jedem Menüpunkt max. 2 Untermenüpunkte (ein untermenü mit einem weiteren > Untermenü) haben Du denkst an mehrdimensionale Matrix. Das kannst Du auf Rechnern machen, die üppig mit Ressourcen ausgestattet sind. Beim AVR ist Variablenspeicher aber knapp. Es wird Dir also nichts anderes übrig bleiben, als die Menüpunkte (die Liste der Menütexte) linear anzuordnen. Dazu solltest Du erstmal einen genauen Plan der benötigten Menüpunkte machen. Wenn dieser feststeht, dann kannst Du die Navigationsroutine so schreiben, dass in der (eigentlich nicht vorhandenen) Hauptebene in größeren Schritten (anhand einer Liste) geblättert wird. Bei größeren LCDs (z.B. 8x24 Zeichen) haben meine 4 Taster meist unterschiedliche Bedeutung, die durch den Menütext (Fußzeile) im Dialog angezeigt werden. Beispiele dazu findest Du hier: http://www.hanneslux.de/avr/stopuhr/index.html http://www.hanneslux.de/avr/zuenduhr/index.html > > > Hat das geholfen? :P Liegt hier ein Missverständnis vor? Du musst mir nicht helfen. Ich vermutete dass Du um Hilfe ersucht hast. Oder irre ich mich da jetzt? ...
>Hat das geholfen? :P
Es hätte vor allem geholfen, wenn Du genau diesen Text als Anfrage
genommen hättest, d.h. wenn Du Dir erst über Dein Vorhaben klar
geworden wärst und dann gefragt hättest.
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.