Hallo.
Ich versuche heute schon den ganzen Tag mit Bascom eine brauchbare,
stabil laufende Menüstruktur zu erstellen. Sie soll nur 2 Ebenen haben,
also Hauptmenüs und zu jeden Hauptmenü dann noch einige Untermenüs,
noch nichtmal unteruntermenüs :). Tja, es will einfach nicht so, wie
ich das will.
Mein Problem besteht darin, dass es nicht unmoeglich scheint, "restore
<variable> zu machen, drum frag ich jetz einfach mal ob jemand
zufaellig irgendwo eine aehnliche Menuestruktur herumliegen hat :).
danke & mfg
Hi
eine Menüstruktur würde ich unter C entweder mit einem Array aus
structs machen oder aus einer verketteten Liste aus structs. Bascom
sollte doch ähnliches beherschen.
Matthias
Genau da is der haken, wie?
ich habs ueber data versucht, also sowas wie eine Tabelle erstellt.
Aus der wollte ich dann mit restore die Menünamen auslesen, leider
scheiterte es daran, dass nach restore keine Variable stehen kann (
glaub ich zumindest, da es nicht funtionierte:
dim byte as string *2
....
restore test
>> error, label not found (test).
Es gibt ja noch die Moeglichkeit das ganze ueber case/if,then zu
machen, ist aber leider sehr langsam und aufwaendig.
mfg
Wenn du Arrays brauchst, geht das so:
Dim test(10) as integer
dim dummy as integer
dummy = 5
test(3) = dummy
Darüber kannst du vielleicht eine Menüstruktur erzeugen.
Gruß
Sebezahn
ich hab meine menuestruktur (bis jetz leider noch nich ganz fertig) mit
asm gemacht. allerdings brauche ich 3 ebenen mit haupt screen sinds 4.
RootScreen -> MainMenue -> SubMenue -> EditWert
habe das über 4 register gemacht (klar man könnte die
ineinanderfassen), weil ich die so überhab in meinem programm. das
erste register gibt an, welche ebene (root, main, sub) der mainmenue
und submenue zähler geben das jeweilige ausgewählte menue an und
EditWert (das ist der, der mir noch fehlt) gibt die position des zu
editierenden wertes an. das ganze habe ich über kaskadierte tabellen
gelöst -> sau gross geworden. wenn jemand also noch ne alternative idee
hat: sofort hier melden, bitte :)
editwert brauche ich dazu, um zB beim einstellen der uhrzeit zwischen
stunde minute und sekunde zu wechseln.
ich habe übrigens 4 tasten, die ich im menue verwende: ok, up, dn &
cancel
naja da aber alleine meine Tabellenstrukturen die ich brauche für die
- 1ste Zeile (konstanter Text)
- 2te Zeile im Display (generierter Text& Wert)
- den Ok Button (werte wollen gespeichert werden)
einen riesen platz verschleuder bin ich eigentlich noch nicht
glücklich. auch muss ich noch mit der Up und Dn funktion der Tasten
tricksen...
also nochmal: ich würde mich freuen, wenn mir jemand eine bessere idee
unterbreitet, das Menüproblem zu lösen. ich hab früher schon einmal im
forum nachgefragt wie man solch ein problem (menue allgemein) löst aber
damals keine antwort erhalten, die mir geholfen hat.
naja, die Tabellen variante ist schoneinmal klüger als mein erster
versuch.
für tips: danke im voraus!
Hi,
dieses Menueproblem habe ich selbst jetzt bald, aber in Gedanken habe
ich da auch schon eine Lösung. Da ich selbst, wie du im ersten Post
angegeben hast, BASCOM verwende, sollten wir uns da mal zusammen tun.
Ich bekomme nur noch nicht meinen ATMEGA ans laufen (
http://www.mikrocontroller.net/forum/read-1-61978.html ), sonst könnte
ich mich direkt darauf stürzen. Oder hast du heute Nacht was anderes
vor ;-)
Schreib mir mal an spamschutz01@beyl.de eine Mail, ich möchte ungerne
meine Adresse Plaintext hier rein stellen.
Gruß
Sebezahn
hmm, yoa. da können wir uns zusammentuen.
aber da wollen wir mal erst versuchen deinen avr ins rennen zu
bekommen.
ich hab an meiner heizungssteuerung (was lange währt...) ein 16x2
display mit 4bit steuerung und 4 tasten angeschlossen.
bis morgen dann - oder doch heute :-|
Eine Menüsteuerung möchte ich auch irgendwann mal machen.
Ich frage mich nur wie man das vernünftig mit einem 16x2 LCD machen
kann!?
Ich meine kann man da Zeichen invertieren oder geht das sowieso nur
nach dem Prinzip pro Zeile ein Menüpunkt?
MfG,
Thomas
Also ich wollte einen Pfeil als Zeichen definieren, du kannst ja bis zu
acht Zeichen selbst "malen". Und dann wollte ich das Menü in die
letzte Zeile legen und den Pfeil springen lassen. Ich habe allerdings
ein 16x4
Erste Zeile
Zweite Zeile
Dritte Zeile
mnu >mnu mnu
So in der Art. Oder man muss das Programm so schreiben, dass das
Display scrollt:
Menuepunkt 1
Menuepunkt 2
-- Menuepunkt 3
| Menuepunkt 4
| Menuepunkt 5
-- Menuepunkt 6
Menuepunkt 7
Beide Lösungen fände ich akzeptabel.
Gruß
Sebezahn
Hi,
also ich habe mal so ein Menu in Bascom geschrieben. Leider alles mehr
oder weniger ueber Variablen abfragen. Sprich die erste Variable zaehlt
die Position fuer den Pfeil usw. Leider fande ich das keine schoene
Loesung. Es waere nett wenn ihr eure Versuche nachher mal psotet.
Mfg
Dirk
<ot>
Erst mal meinen Mega zum Laufen bekommen, siehe andere Threads...
</ot>
Naja, irgendwie muss man ja mit Variablen arbeiten, die Frage ist nur,
wie sparend man damit umgehen kann.
Gruß
Sebezahn
ein menü implementiert man stets durch einen zustandsautomaten;
am besten zustandsdiagramm zeichnen, transitionsbedingung auswählen,
"switch" anwenden, fertig
Hi
und für ein Menü mit vielen Punkten muß man dann eine Zustandsmaschine
mit eben so vielen Zuständen machen. Das ist nicht sehr effektiv.
Üblicherweise macht man das, so wie ich es oben geschrieben habe, über
eine verkettete Liste von Strukturen. Eine einzelne Struktur enthält
dann einen Zeiger auf die nächst höhere Menüebene, ein Array aus
Zeigern für die Menütexte, ein Array aus Zeigern auf die Menüfunktionen
und ein Array aus Zeigern auf die nächst tieferliegende Ebene. Hört
sich jetzt komplitziert an ist aber ein sehr durchschaubres Prinzip.
Matthias
hi matt,
natürlich gebe ich dir recht, deine methode ist bestimmt eleganter;
andre hat jedoch ein relativ einfaches menü gemeint, und das noch unter
bascom (struktur?? hehehe! zeiger?? hehehe!); deswegen habe ich den
zustandsautomaten erwähnt
gruss,
emil
da ich ja assembler verwende und auch schon meine tabellen und zeiger
habe ist es für mich kein problem. in bascom müsste man das auch auf
die reihe bekommen, sonst würd ich´s als mangel (für bascom) bewerten.
was meint ihr mit zustandsautomat? eine case schleife in einer
endlosloop?
was ist mit struktur gemeint? vieleicht ne tabelle, array, oder das
verschachtelt?
ich denke mal es hängt nur an den begriffen bei mir...
ich habe in meinem display ein paar werte dargestellt.
drückt man die Menuetaste zeigt jeweils die 1ste zeile den namen des
menues (zB. einstellungen) und in der 2ten zeile werden weitere werte
dargestellt.
drückt man ok gelangt man in das submenue "einstellungen" und hat
dort den ersten eintrag. der heist wiederum "uhr stellen" in der 2ten
zeile steht die uhrzeit als wert.
drückt man wiederum die ok bleibt die erste Zeile stehen, die 2te zeile
bekommt einen pfeil und das erste feld der uhrzeit also die stunde kann
editiert werden.
mit ok schaltet man weiter über minute und sekunde zum speichern
zusätzlich habe ich (zur besseren orientierung) in den ersten beiden
zeichen der ersten zeile 2 ziffern angebracht, die ähnlich beim nokia
oder siemenshandy das aktuelle menue angeben.
finde das ist sehr übersichtlich, daher würd ich sagen, das 16x2
zeichen gerade knapp reichen für ein kleines menue mit nicht
allzuvielen ebenen.
hm, als LCD hatte ich ein 4*20 geplant Die idee mit den Arrays sieht
schonmal gut aus, koennte dazu vielleicht jemand mal ein konkretes
Beispiel bringen? Werd jetz auch noch n bisschen rumprobieren, aber obs
was wird. Is jedenfalls etwas, was eindeutig in der codesammlung fehlt
g
@sebezahn:
Menuepunkt 1
Menuepunkt 2
-- Menuepunkt 3
| Menuepunkt 4
| Menuepunkt 5
-- Menuepunkt 6
Menuepunkt 7
Auf die Idee bin ich auch schon gekommen, scheint aber eher noch
komplizierter zu sein.
mfg
Hi
eine Struktur ist ein zusammengesetzter Datentyp wie ihn jede höhere
Programmiersprache unterstützen sollte (Objekte in der OOP sind auch
nichts anderes als "etwas" komplexere Strukturen). So könnte eine
Struktur in C etwa so aussehen:
typedef struct{
unsigned char *text;
menuepunkt *up;
menuepunkt *down;
}menuepunkt;
Matthias
@matthias
hmm gut. als ich Deinen Beitrag gelesen hab is mir glatt die nächste
idee gekommen, wie ich das ganze noch verkleinern kann.
werd das mal ausprobieren, aber jetz muss ich erstmal weiter lernen
@andre
das durchschieben der Einträge dürfte sich über eine tabelle auch
simpel gestalten. man muss nur die gültigkeit des selektors prüfen und
unter 0 und über max umrechnen
noch ne frage: ich habe in meinem programm eine dauerschleife. die
ständig das display aktuallisiert. auch wenn sich nichts verändert hat.
bis auf den nachteil, das ich zB keine Blink-Cursor nutzen kann, binn
ich ganz zufrieden. ist das schädlich zB. für die ram zellen des
Displys? habe bis jetz noch kein argument gefunden das anders zu lösen.
"@andre
das durchschieben der Einträge dürfte sich über eine tabelle auch
simpel gestalten. man muss nur die gültigkeit des selektors prüfen und
unter 0 und über max umrechnen
"
Hmm, hab ich soweit auch verstanden. Mein Problem besteht nur darin
eine Tabelle zu erstellen und aus der dann die richtigen Elemente
auszulesen. Hab noch nicht soo viel mit bascom gemacht, dafuer frueher
aber n bisschen mit qb programmiert.
mfg
Ihr denkt viel zu kompliziert ! Kein Mensch braucht für ein kleines
Menü Structurvariablen, Submenüzähler und soweiter. Ein Blattl Papier
mit kleinem Flußdiagramm hilft hier mal am meisten.Eine kleine Routine
in welcher ich Zahlen eingeben kann reicht (zB 2.stellig). Für die
Zeit ruf ich diese 2 mal auf. Dieser Routine gebe ich noch Maximal und
Minimalwert bei jedem Aufruf mit.Diese Routine kann auch über ein
Timeout verlassen werden. Enter speichert die neue Zahl erst ab. Cursor
blinken usw. erledigt sie auch. Texte werden im Flash hinterlegt.
Schöne Grüße Josef
mit hilfe der tabellen lässt sich der programmumfang verkleinern. bei
grossen menüstrukturen halte ich das für äusserst hilfreich, da die
sache auch übersichtlicher wird.
ich will schließlich 4x4 + 3 + 8 Submenuepunkte sortiert unterbringen.
das sind immerhin 27 werte die ich anzeigen und auch einige die ich
editieren muss. da auch viel wiederholter code dabei ist bekommt man
das auf unserem weg kleiner.
ich währe ja froh, wenn du uns eine noch kleinere idee unterbreitest :)
Ich waer schon froh wenn jemand mal ein Beispiel bringen wuerde, damit
man das ein bisschen nachvollziehen kann g. Ich find die Idee mit den
Tabellen gut, weiss nur nicht wie das zu realisieren ist.
mfg
hmm, habs nun tatsaechlich irgendwie hinbekommen :).
Dim B1 As String * 20
Dim Av As Integer
Enable Interrupts
Enable Int0
Enable Int1
Av = 0
On Int1 Icr
On Int0 Dcr
Goto Gg
Icr:
Incr Av
If Av > 3 Then Av = 3
Return
Dcr:
Decr Av
If Av < 0 Then Av = 0
Return
Gg:
Do
B1 = Lookupstr(av , Dta)
Print B1
Loop
End
Dta:
Data "sfsdf" , "sfdfgdfhg" , "flkjh" , "mkfjhkj" , "dkjhg"
Weiss zufaellig jemand wie viele Ausdruecke hinter "Data" passen?
mfg
Hi,
wie angekündigt meine Lösung für das Menü. Lastet zusammen mit der
Tastatur-Auswertung Matrixtastatur den Speicher vom M128 zu etwa 2%
aus.
Der Code ist reichlich kommentiert. Je nach Konfiguration muss das
ganze noch auf die Pin-Belegung und Displaygröße angepasst werden.
Gruß
Sebezahn
Rofl... So gut ist es nun auch wieder nicht ;-) Ein wenig schnell
zusammen geschrieben, ich wollte nur mal demonstrieren, wie ich sowas
machen würde. Außerdem habe ich nicht alles voll ausgetestet. Also
bitte ich um Rückantwort, wenn was nicht funktioniert.
Das wichtigste, was noch geändert werden muss, ist die Position des
Cursors. Der aktive Menüpunkt ist immer der oberste, das ist bei einem
großen Display unschön. Kommt die Tage.
Gruß
sebezahn
Aehm, lang lang ists her.
Ich muss mal in den Tiefen meines PCs kramen, aber ich glaube, ich habe
den Cursor so gelassen. Oder nicht? Ich weiss es nicht mehr. Wenn ich
etwas finde, schicke ich es sofort zu bzw stelle es ins Forum.
Gruß
Sebezahn
Hi,
tut mir leid, ich habe das Menü bei meinem damaligen Projekt so
gelassen, wie es auch in der Download-Version hier ist. Du solltest das
aber eigentlich ohne Probleme einbauen können. Ich habe zwar noch einige
Variablen eingesetzt, um den Speicher zu schonen, aber damit auch ein
wenig "gefuscht" und Variablen aus meiner restlichen Anwendung
benutzt, wenn die nicht in Gebrauch waren. Das bringt euch herzlich
wenig.
@anfaenger: Ich denke aber, mit ein wenig Programmiererfahrung bekommst
du das auch selbst hin. Ansonsten ausprobieren, viel kapputt machen
kannst du an dieser Stelle nicht.
Gruß
Sebezahn
naja, da kann man nix machen. dann werd ichs einfach mal allein
versuchen. hab leider keine große programmiererfahrung, aber irgendwie
werd ich das schon hinkriegen :-)
also, teilweise hab ichs hinbekommen. hier ist der entscheidende
codefetzen:
'***********************************************************************
********
'***********************************************************************
********
Mnushow:
' Wenn dieser Punkt angesprungen wird, verlangt das System eine
Eingabe.
' Alle weiteren Aktionen, sofern nicht durch Interrupts
erzeugt, werden
' nicht weiter verarbeitet.
' Das alte Mnuselect wird gesichert
Mnuselectold = Mnuselect
' Der Zeiger wird auf den ersten Menüeintrag gestellt.
Mnuselectpointer = 1
' So lange das Menue nicht geaendert wurde, wird dies immer
fortgesetzt.
While Mnuselectold = Mnuselect
' Zuerst einmal muss nun auf dem Display etwas angezeigt
werden.
' Dies ist der Zaehler für die anzuzeigende Zeile
M = 1
' Mehr als die verfuegbaren Menuepunkte können nicht
angezeigt werden.
Hilf = 1
If Mnuselectpointer > Lcdrows Then
Hilf = Mnuselectpointer - Lcdrows
Incr Hilf
End If
N = Hilf + Lcdrows
Decr N
Cls
For I = Hilf To N
Locate M , 1
If I = Mnuselectpointer Then
Lcd "=> "
Else
Lcd " "
End If
Lcd Mnutext(i)
Incr M
Next
'***********************************************************************
********
'***********************************************************************
********
beim runterscrollen bewegt sich der erst nur der zeiger, bis er am rand
des dislpays angekommen ist. ab da bewegt sich dann die schrift. so wie
es sein soll. wenn man dann allerdings hochscrollt bewegt sich erst nur
die schrift und dann der zeiger. also genau in umgekehrter reihenfolge
wie beim runterscrollen. irgendwie hab ich jetzt aber keinen nerv mehr.
wenn jemand ganz nett ist und lust hat, kann er mir ja mal helfen.
achja, was auch noch nicht stimmt: wenn man ein menü zurück geht
bleiben die einträge aus dem vorherigen menü stehen, wenn sie nicht
überschrieben werden.
diesen codefetzen kann man einfach in den code von sebezahn an
entsprechender stelle einsetzen. hatte nur keine lust den ganzen code
zu posten, weils dann etwas viel geworden wär :-)
mfg, anfänger.
so, falls es noch jemanden interessiert, ich hab den spass noch zu ende
gebracht. kann sein, dass das auch einfacher geht, aber es funktioniert
:-)
'***********************************************************************
********
'***********************************************************************
********
Mnushow:
' Wenn dieser Punkt angesprungen wird, verlangt das System eine
Eingabe.
' Alle weiteren Aktionen, sofern nicht durch Interrupts
erzeugt, werden
' nicht weiter verarbeitet.
' Das alte Mnuselect wird gesichert
Mnuselectold = Mnuselect
' Der Zeiger wird auf den ersten Menüeintrag gestellt.
Mnuselectpointer = 1
' So lange das Menue nicht geaendert wurde, wird dies immer
fortgesetzt.
While Mnuselectold = Mnuselect
' Zuerst einmal muss nun auf dem Display etwas angezeigt
werden.
' Dies ist der Zaehler für die anzuzeigende Zeile
M = 1
Hilf = 1
If Mnuselectpointer < Hilf_alt Then
Hilf = Hilf_alt - 1
Else
If Mnuselectpointer > N_alt Then
Hilf = Hilf_alt + 1
Else
Hilf = Hilf_alt
End If
End If
N = Hilf + Mnuselectscount
Decr N
If N > Lcdrows Then
N = Lcdrows + Hilf
Decr N
End If
Cls
For I = Hilf To N
Locate M , 1
If I = Mnuselectpointer Then
Lcd "=> "
Else
Lcd " "
End If
Lcd Mnutext(i)
Incr M
Next
Hilf_alt = Hilf
N_alt = N
'***********************************************************************
********
'***********************************************************************
********
der code muss natürlich in das ursprüngliche file von sebezahn an der
entsprechenden stelle eingefügt werden. ausserdem müssen noch irgendwo
die variablen "Hilf", "Hilf_alt" und "N_alt" als Byte deklariert
werden.
mfg, euer anfänger
ach männo. ich habs nochmal verbessert... also wen das hier noch
interessiert, der soll einfach nochmal hier reinposten. bei bedarf kann
ich das fertige file dann hier posten oder zuschicken.
so, hier ist "mein" menü. ist fast komplett von sebezahn kopiert und
nur ein wenig angeändert. ich hab leider keine kommentare drin. wenn du
das alles verstehen willst, solltest du dir vielleicht auch noch das
menü von sebezahn angucken. das ist sehr gut kommentiert.
cool! noch ne lösung. würde es dir was ausmachen, mal den nicht zum menü
gehörenden kram da raus zu löschen? so find ichs nämlich ziemlich
unübersichtlich und ich blick auch noch nicht ganz durch :-)
Ok. Da ich inzwischen auch nicht alles ohne Einarbeitung sofort
durchblicke, nur prinzipiell, teilweise mit Syntaxfehlern. Kommt ja nur
auf das Prinzip an. Wie Du z.B. letztlich Tasten abfragst/entprellst ist
dem menü ja egal.
Ist natürlich so ein kurzes Beispiel, daß ein Wechsel der
Menüs/LCD-Inhalte net nötig wäre...aber möglich. Die Tabellen habe ich
inhaltlich net extra angepasst.
hoffe, nis vergessen/übersehen zu haben.
habe mir gerade mal das menü von sebezahn angeschaut, ist recht gut,
aber wie kann ich das menü wieder verlassen so das ich im hauptprogramm
bin, bzw wie kann ich im hauptprogramm sagen das ich ins menü möchte
Hi,
langlang ists her. Das Menü IST das Hauptprogramm. Wenn du nun eine
Routine ablaufen lassen willst, dann hängst du sie als Unterprogramm in
das Menü ein. Sobald die Routine beendet ist, geht es wieder zurück ins
Menü.
Ich glaube, das war damals die Logik dahinter.
Gruß
Sebezahn
ja hatte schon versucht dies zu ändern, aber so firm bin ich leider
darin noch nicht,
ich suche im endefekt so ein menü wie dies ist, was ich aber seperat
aufrufen kann z.b. über eine taste, aber dennoch die restlichen
programmteile ausgeführt werden.
wärend des menü aufrufs dürfen die anderen teile nicht oder nur sehr
kurz unterbrochen werden.
kennst du eine lösung dafür?
Achso... nein, das war mit diesem Menü nicht beabsichtigt. Du könntest
das ganze auf Interrupts umbauen, hier wird ja gepollt. Suche mal nach
"Unterschied zwischen Interrupt und Polling", da solltest du genug
finden. Und lasse dich nicht entmutigen!
Gruß
Sebezahn
Hallo
Ich hab ein kleines Menü angefertigt, das auch geht nur hab ich ein
Problem: Und zwar wenn ich eine Variable verändere, dann geht das aber
es geht nicht immer. d.h. die Variable1_decr kann ich 10 mal erhöhen und
dann man 11 mal springt das ganze Programm wieder zum Anfang zurück.
Falls jmd mein Problem verstanden hat und vieleicht eine Indee hat kann
er mir ja bescheid sagen.
Danke
Dim Menu_kugel As Byte
Dim Menu_pendel As Byte
Dim Schwingungen As Byte
Dim Leange As Byte
Locate 1 , 1
Lcd ; "Menu"
Schleife:
Do
Debounce Pinc.1 , 0 , Forward , Sub
Debounce Pinc.2 , 0 , Back , Sub
Debounce Pinc.3 , 0 , Variable1_incr , Sub
Debounce Pinc.4 , 0 , Variable2 , Sub
Debounce Pinc.5 , 0 , Variable1_decr , Sub
Loop
Variable1_decr:
Decr Leange
Goto Case_menu
Variable1_incr:
'Dieses Sprungziel dient zur Bestimmung der Länge bzw. Höhe.
Incr Leange
If Pinc.3 = 0 Then
Locate 1 , 1
Lcd "Leange"
Locate 1 , 8
Lcd Leange ; " "
Goto Variable1_incr
Else
Goto Case_menu
End If
Variable2:
'Dieses Sprungziel dient zur bestimmung der Anzahl Schwingungen.
Schwingungen = Schwingungen + 2
If Schwingungen > 30 Then Schwingungen = 0
Goto Case_menu
'-----Vorwärts----------------------------------------------------------
--------
Forward:
If Pinc.0 = 1 Then
Incr Menu_kugel
Else
Incr Menu_pendel
End If
If Menu_kugel = 3 Then Goto Stopp_uhr
If Menu_pendel = 4 Then Goto Stopp_uhr
Goto Case_menu
'-----Rückwärts---------------------------------------------------------
--------
Back:
If Pinc.0 = 1 Then
Decr Menu_kugel
Else
Decr Menu_pendel
End If
Goto Case_menu
'-----Case
Menü-----------------------------------------------------------------
Case_menu:
If Pinc.0 = 0 Then
Select Case Menu_pendel
Case 0
Goto Schleife
Case 1
Cls
Locate 1 , 1
Lcd "Anwendung:Pendel"
Case 2
Cls
Locate 1 , 1
Lcd "Leange"
Locate 1 , 8
Lcd Leange ; " "
Case 3
Cls
Locate 1 , 1
Lcd "Anzahl"
Locate 2 , 1
Lcd "Schwingungen"
Locate 2 , 13
Lcd Schwingungen ; " "
End Select
Goto Schleife
End If
If Pinc.0 = 1 Then
Select Case Menu_kugel
Case 0
Goto Schleife
Case 1
Cls
Locate 1 , 1
Lcd "Anwendung:"
Locate 2 , 1
Lcd "Freier Fall"
Case 2
Cls
Locate 1 , 1
Lcd "Leange"
Locate 1 , 8
Lcd Leange ; " "
End Select
Goto Schleife
End If
Hallo anfänger oder sebezahn
Habe mir das Menü von Sebezahn, und die verbesserung von anfänger mal
angesehen. Jetzt versuche ich schon seit 2 Tagen den Code von anfänger
so zu erweitern, das man weitere Untermenüs hat, aber ich bekomme es
einfach nicht hin. Leider ist die letzte Version von anfänger nicht
Dokumentiert ,so das ich nicht so wirklich durchsteige !
Wie bekomme ich es hin, das ich weitere Untermenüs mit mehr Einträgen in
den Code ergänzen kann ?
Wer kann mir helfen ? Bitte !
MfG
Alexander
PS Bin auch blutiger Anfänger
Habe das Codebeispiel von sebezahn benutzt und nur auf mein Display
angepasst. Menü funktoiniert super! Nur möchte ich jetzt z.B. etwas
ausgebe. Z.B. bei IP_Adresse gebe ich dann im Case 11 ein : LCD
"Testsystem", dann werden aber wenn ich das ganze Aufrufe am Display nur
immer jeweils 8 Zeichen dargestellt und der Rest un die zweitel Zeile
befördert. Das sieht dann so aus
Testsyst
em
Was hängt damit zusammen? Wie krieg ich das alles in die erste Zeile
(Die ja 16 Zeichen hat)
Die Initialisierung des LCD lauft offenbar nicht rund. Standard Typen
haben 8 Zeichen, erweiterte 16 oder mehr. Du solltest also in der
Richtung suchen
Ja Danke habs nach einer Stunde herumprobieren auch herausgefunden ;)
Man muss oben noch "Config LCD = 16 * 2 eingeben.
Der Cursor hat mich auch ein wenig gestört also auch noch "Cursor Off"
hinzugefügt.
Hi, also ich habe gerade mein 6+1 Kanal PC- Lüftersteuerungs- Projekt
quasi fertig, das hat ein Menü mit 3 Leveln: Level 1. MAIN > je 6x
2.Level > je 8x 3.Level
+ 1x 2.Level > 12x 3.Level
Am einfachsten gehts (imho) mit Select Case.
Select Case MENULEVEL
Case 0 ist MAIN
Case 1 - 7 2. Level
Case 10 - X0 3. Level
Case 11 - 1X Sublevel
Case 21 - 2X Sublevel
Case MENULEVEL > da drin dann noch jeweils die passende Touch X,Y
Auswertung (Nicht den Touch selbst, nur die X/Y Pos) ebenfalls über
Select Case, bei JEDEM Mainloop Durchlauf, LCD wird nur aktualisiert
wenn was geändert wurde, Eingabeauswertung nur wenn TOUCHed > 5( 6x ADC
Auswertungen selber Punkt berührt), wenn ausgeführt bis nach loslassen
nicht mehr, ausser wenn unter bestimmten Bedingungen, gewollt, ein
Interrupt nach 100ms die Variable zurücksetzt.
Das bedeutet, mein Programm tut in der MAINLOOP nichts anderes als Touch
Auswerten, LCD Anzeigen, Eingabe Auswerten und wieder von vorne, der
ganze Rest ist Interrupt gesteuert.
der Nachteil: Anzeige und Touch Bestimmung am Stück, laaang ( viele
Bildschirmseiten), zig Select Case verwirrend ineinander verschachtelt.
Bei diesem Projekt ca. 80%, der Rest ist 7 verschiede DS18S20 Abfragen
und ziemlich viele Berechnungen, aber nur alle 5s - 100s.
Vorteil: meist schnell in der Abarbeitung, da der µC oft nur 2
Bedingungen prüfen muss, >>> was neues Anzuzeigen?, Eingabe erfolgt?
NEIN? Fertig.