Es gibt ja schon einige Beiträge hier die sich mit LCD Menü
beschäftigen.
Dank dieser konnte ich mir eine ungefähre Struktur zurechtbasteln.
Jetzt wollte ich fragen wie ihr eure Menüs so designed habt.
Wie erfolgt die Auswahl?
Ich habe eine 16x2 LCD zur Verfügung.
Da es ja nun nicht Sinnvoll ist immer nur einen Eintrag anzuzeigen und
die zweite Zeile dann leer bleibt, dachte ich mir man könnte das ganze
mittels eines Cursors am linken Rand des Displays selektieren und mit
einer Taste Auswählen. Das Menü scrollt dann mit dem Cursor nach oben
oder unten mit.
Oder wie würdet ihr das gestalten?
Genau so ....
oder anders ;o)
Also, das hängt ja auch von der Applikation ab. Wenn es Sinn macht auch
während der Menü-Auswahl Status-Information auszugeben (z.B.
Betriebsspannung .. Stromverbrauch .. irgendwelche Sensor Messwerte ...
weiß der Geier), dann kann es natürlich auch mehr Sinn machen nur eine
Zeile für das Menü zu benutzen und die andere für diese Informationen
frei zu halten. Dann wiederum fände ich es persönlich schöner, wenn das
Menü nach rechts und links scrollt. Die andere Frage ist dann, ob sich
die Mühe auch lohnt.
> Genau so ....>> oder anders ;o)>> Also, das hängt ja auch von der Applikation ab. Wenn es Sinn macht auch> während der Menü-Auswahl Status-Information auszugeben (z.B.> Betriebsspannung .. Stromverbrauch .. irgendwelche Sensor Messwerte ...> weiß der Geier), dann kann es natürlich auch mehr Sinn machen nur eine> Zeile für das Menü zu benutzen und die andere für diese Informationen> frei zu halten. Dann wiederum fände ich es persönlich schöner, wenn das> Menü nach rechts und links scrollt. Die andere Frage ist dann, ob sich> die Mühe auch lohnt.
Drehencoder ist für diese Zwecke oversized.
Es handelt sich grad mal um max 4 Menüeinstellungen die jeweils als
einen Untermenüpunkt haben sollen.
Links/rechts wäre natürlich auch schön. Und in der oberen Zeile wird
dann der Übergeordnete Menüpunkt angezeigt.
Der Phantasie sind keine Grenzen gesetzt ....
man kann auch die übergeordneten Menüpunkte als Grafik am Rand
darstellen ;o) Gibt ja schließlich 8 user defined characters.
(noch nicht getestet obs funktioniert)
jetzt hätte ich mir vorgestellt am Anfang bzw. Ende des Textes einen <
oder > anzuzeigen wenn das Menü noch weiter geht.
Soll ich das am besten gleich in die Textvariable schreiben oder als
zusätzliche String zum Text anfügen?
Wie mach ich das am besten?
@Chris M.
Danke, den Link hätte ich jetzt auch gepostet, denn das ist meine eigene
Homepage. Freut mich, dass auch jemand das Zeugs liest was ich auf die
Homepage stelle.
Der Code ist nicht besonders optimiert, aber zumindest lauffähig. Für
Diskussion und Verbesserung bin ich immer offen, auch wenn ich aktuell
wenig Zeit habe für die Atmels wegen den Klausuren.
Gruß Paddy
Hallo Manfred,
genau so ein Menü habe ich auch auf einem 2x16 Display von DOGM
aufgesetzt.
Per Drehencoder wird vertikal durch das Menü gesteuert.
Mit OK wechselt man in den Menü Punkt als geht eine Ebene tiefer.
Mit BACK kann man in der Menü Hierachie wieder eine Ebene aufsteigen.
Mittels LEFT und RIGHT kann innerhalb eines Eingabescreens (z.b.
Frequenz Eingabe für PWM) die Dezimalstelle ausgewählt werden, ansonsten
kann auch hier der Wert per Drehencoder inkrementiert / dekrementiert
werden...
Eigentlich hätte man auf LEFT / RIGHT auch verzichten können...
auch die OK Taste ist unnötig, weil der Drehencoder selbst auch als
Taster dient... bzw. dieser hat bei Druck eine Tasterleitung zum uC...
Ahja, ein Video zu dem Menü findest du hier:
http://www.youtube.com/watch?v=GhUI7uQmt_c
Ich muss allerdings zugeben, dass ich hier leider nichts kommentiert
habe und die Qualtität auch nicht so der Hit ist, aber zumindest das
Prinzip wird klar ;-)
Kurz zu dem was ich da auf dem Video mache (vermutlich erkennt man es
nicht):
1. Zunächst navigiere ich durchs Menü, wähle PWM1 und stelle dort eine
Frequenz von 900 Hz ein.
2. Ich wähle einen RECORD Modus, bei dem ich am Analog Eingang eine
Spannung sample... ich drehe zur Stimulation des Analogeingang ein paar
mal wirklich an einem Poti ;-)
3. Danach spiele ich die aufgenommene Sequenz am Analogausgang wieder
ab... am Oszi sieht man dann den Verlauf, den ich zuvor per Stimulation
aufgenommen habe...
4. Ich wechsle in den Menüpunkt System --> Beleuchtung und verstelle die
Display Helligkeit ;-) Kleine Spielerei, die Helligkeit ist per PWM
geregelt (und einer KSQ)... hier wird eigentlich nur der Tastgrad von 0%
- 100 % verändert...
viele Grüße
Grüß dich!
Über dieses Video bin ich vor einigen Tagen gestolpert.
Sieht sehr professionell aus das ganze.
Das mit dem Encoder ist eine feine Sache, aber wie gesagt für meine
Zwecke etwas unpraktisch.
Im Prinzip reichen mir 2 Tasten.
Wird eine der tasten länger gedrückt gelangt man ins Menü. Wo man dann
mittels links/rechts durch die Menüpunkte navigiert.
Oder dort wird mit einem längerem Tastendruck ins Untermenü gewechselt
wo ebenfalls wieder links/rechts - langer tastendruck die Option gewählt
wird.
Über "Beenden" kommt man dann wieder aus dem Menü.
Ich freunde mich gerade mit den LCD Funktionen von Volker Oth's an:
http://homepage.hispeed.ch/peterfleury/group__pfleury__lcd.html#gd7760569f1a160fca1a29af711cab47b
Ich hänge momentan nur bei der lcd_puts_p Funktion.
Wenn ich hier mit Variablen arbeiten möchte funktioniert das nicht so
richtig:
1
lcd_puts_p(menu_text[menu_index]);
AVR Studio zeigt mir zwar keinen Fehler, allerdings bekomme ich nur
kryptische Zeichen am Display.
spess53 schrieb:
> Hi>>>Ich hänge momentan nur bei der lcd_puts_p Funktion.>> Kann lcd_puts_p Text aus dem Flash ausgeben?>> MfG Spess
Ja, genau dafür ist er gemacht:
hab noch was herausgefunden:
Selbst so funtkioniert es nicht:
1
lcd_puts_p(menu_index);
Fehler:
../main.c:251: warning: passing argument 1 of 'lcd_puts' makes pointer
from integer without a cast
Wenn ich das ganze ohne PROGMEM und mit dem "lcd_puts" mache gehts.
Seltsam...
dann schnell eine lcd_puts_P per copy und paste erstellen
die lcd_puts kopieren umbenennen
in diese _P den eintrag pgm_read_byte ( ... ) an die richtige stelle
setzen ... und trallala es geht
für LCDs lassen sich prima strukturen machen
1
struct
2
{
3
unsignedcharlevel;
4
char*text;
5
void(*f_pointer)(void);// funktion die aufgerufen werden soll
da in dem menüarray nur pointer auf texte sind kann man da auch mit
mehreren sprachen arbeiten
wer funktionen mit übergabewert will
baut sich die sturctur etwas um
void (*f_pointer) ( unsigned char wert);
Bräuchte mal hilfe.
../main.c:137: warning: initialization discards qualifiers from pointer
target type
../main.c:137: warning: initialization makes pointer from integer
without a cast