Hallo zusammen und noch ein frohes Neues. :)
Ich wollte mich mal ein bisschen mit Menüprogrammierung beschäftigen und
hab mir mal die Seite zu Gemüte geführt:
http://www.mikrocontroller.net/articles/Funktionszeiger_in_C
( Unten der Beitrag: Menüs mit Funktionszeigern )
erste Frage: In der Funktion DoMenu... Warum soll Auswahl mit 1
subtrahiert werden.? Ergibt für mich keinen Sinn.
Zweite Frage: Ist es überhaupt sinnvoll, die Tasterabfrage so und an
diesen Ort zu schreiben.?
Dritte Frage: Wenn ich nun ein Taster betätige, ruft es die Funktion
auf. Das funktioniert schon mal.
Mein Problem ist jetzt, dass die Funktion DoMenu weiter ausgeführt wird,
und die Hauptmenüstruktur weiter angezeigt wird. In meinen Funktionen
wie:
void HandleEdit (int arg)
kann ich es aber nicht löschen auf dem LCD. Ist auch logisch dass er es
so macht. Aber wie kann ich es ändern.?
danke schon mal
mit freundlichem Gruß
nj schrieb:> erste Frage: In der Funktion DoMenu... Warum soll Auswahl mit 1> subtrahiert werden.? Ergibt für mich keinen Sinn.
Weil der erste Menüpunkt den Wert 1 hat aber Arrays in C das erste
Element den Index 0 hat.
nj schrieb:> Zweite Frage: Ist es überhaupt sinnvoll, die Tasterabfrage so und an> diesen Ort zu schreiben.?
Prinzipiell schon. Ich würde aber nicht 5mal fast den gleichen Code
schreiben sondern das über eine Schleife lösen. Etwa so:
1
int taster[] = {1<<T1, 1<<T2, 1<<T3, 1<<T4, 1<<T5};
2
Auswahl = -1;
3
while(Auswahl == -1)
4
{
5
for(int i = 0; i < 5; ++i)
6
{
7
if(get_key_short(taster[i]))
8
Auswahl = i;
9
}
10
}
nj schrieb:> Dritte Frage: Wenn ich nun ein Taster betätige, ruft es die Funktion> auf. Das funktioniert schon mal.> Mein Problem ist jetzt, dass die Funktion DoMenu weiter ausgeführt wird,> und die Hauptmenüstruktur weiter angezeigt wird. In meinen Funktionen> wie:> void HandleEdit (int arg)> kann ich es aber nicht löschen auf dem LCD. Ist auch logisch dass er es> so macht. Aber wie kann ich es ändern.?
Die Frage ist mir nicht ganz klar. Wenn du nicht willst das die
Menüstruktur danach weiter angezeigt wird musst du dafür sorgen, dass
die Funktion HandleEdit erst returned wenn die komplette Aktion
abgeschlossen ist und zum Menü zurückgekehrt werden soll.
Sebastian V. O. schrieb:> Ich würde aber nicht 5mal fast den gleichen Code> schreiben
ja :D das war bloß zum probieren.
...
jetzt hatte ich ein Denkfehler. Stimmt, ich muss eine eine neue Struktur
bilden
Ich habe mal noch eine andere Frage. Dürfte auch zum Thema Menü
erstellen passen.
Durch Tasterbetätigung will ich nun Ausgänge setzen und rücksetzen.
Zusätzlich auch auf dem LCD anzeigen, ob AN oder nicht. Funktioniert
auch alles. Mein Problem ist jetzt, wenn ich aus diesem Menüpunkt
rausgeh, später diesen wieder öffne, dann sind zwar die Ausgänge noch
gesetzt(logisch, weil sie ja nie zurückgesetzt worden), aber den Zustand
zeigt es nicht mehr an, ob AN oder nicht.
Was macht man da am besten.?
Man könnte jetzt für jede Spannung noch eine Variable erstellen(die es
speichert) und dann beim Öffnen des Menüpunktes abfragen.
Aber das sollte doch einfacher und mit weniger Code gehen oder.?
danke