www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Menüsteuerung über Tastatur


Autor: Gast (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
habe an der RS232 des PC einen Atmega8. Jetzt soll der Atmega ein Menü 
an Hyper Terminal schicken und der User soll per Tastatureingabe 
verschiedene Untermenüs etc. auswählen. Das Menü wird noch aufgebaut, 
aber wenn ich j oder n drücke, tut sich nichts?

Jemand eine Idee?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal zuerst j drücken und dann Return

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, bringt leider nichts. Noch jemand eine Idee?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Woher weiß dein getchar() eigentlich, daß es die serielle Schnittstelle 
verwenden soll?


PS: Warum gibt's so viele Leute, die ihrem C-Code die Namens-Endung 
'.txt' oder gar '.TXT' geben?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast schrieb:
> Nein, bringt leider nichts. Noch jemand eine Idee?

Doku nachschauen, wie getchar in deiner Lib implementiert ist.
Normal ist es so, dass das I/O System Zeichen sammelt bis ein Return 
reinkommt.


Die (meiner Meinung nach bessere) Alternative ist es allerdings, auf 
getchar und Konsorten zu pfeifen und die UART direkt anzusprechen. Dann 
hast du alles in der Hand und hast die Probleme erst gar nicht.

Autor: Katherine J. (katherine)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin Moin,

getchar() sollte gehen - aber wie bereits zuvor erwähnt, bau dir die 
inputroutine besser selbst.
        /* receive the character */
        k=getchar();
puts("\r\nDEBUG OUTPUT 001");
        sprintf(buffer, "%d\r\n", k);
        puts(buffer);
        if (k=='j') 
Kannst du den Debug Output sehen?
Ist deine RX-Leitung Hardwareseitig, gestört?
Hast Du bereits jemals was zu deinem Aufbau gesendet und es hat 
funktioniert?

Gruß Katherine

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das ATMEL Evaluations Board und benutze CodeVision.
Wenn puts benutze, erhalte ich die Fehlermeldung: incompatible with its 
declaration.
Mit putsf wird zwar kompiliert, jedoch keine Ausgabe.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
printf funktioniert?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab den Fehler gefunden.
Bei Hyper Terminal hab ich die Flusssteuerung von Hardware auf keine 
gestellt. Jetzt gehts.
Besten Dank an alle.

Beitrag #2812209 wurde vom Autor gelöscht.
Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin K. schrieb im Beitrag #2812209:

> Mit der oben aufgezeigten Menüsteuerung hänge ich dann ja immer in dem
> UP Do_Menu fest, oder sehe ich das falsch. Und wenn ich in ein Untermenü
> wechsle, dann hänge ich in der Do_Menu - Routine des UP's fest, oder?

Ich weiß zwar jetzt nicht worauf du dich beziehst, aber ja, das ist eine 
mögliche Idee.
Jedes Menü ist ein UP und das 'Menü wird verlassen' in dem das UP einen 
Return ausführt. Geht es innerhalb eines Menüs in ein Submenü, dann ist 
das ein Funktionsaufruf der Funktion, die eben genau dieses Menü 
behandelt.

> Denn mir ist es wichtig, das die Menü - Programme universell sind. Das
> heißt für mich auch automatisch mit, das ich das Menü - Programm (was ja
> an sich nichts zeitkritisches ist) einfach in main() mit aufrufen kann.
> Also ich möchte mit der Menüsteuerung nicht den µc tot legen, sondern ab
> und zu noch was andres in main() machen können.

Dann musst du das anders aufziehen. Da funktioniert dann diese Technik 
nicht mehr.

Eine mögliche Technik ist es dann, die Menüs nicht dadurch zu 
schachteln, in dem jedes Menü durch eine Funktion repräsentiert wird, 
sondern eine Datenstruktur hochzuziehen, in der die Menüs und ihre 
Verkettung durch zb Indizes oder Pointer realisiert sind. Dies deshalb, 
damit zu jedem Zeitpunkt eindeutig klar ist, wie eine Operation 'nach 
Oben', 'nach Links' etc. zu realisieren ist bzw. was dabei zu tun ist. 
Die Information in der Datenstruktur verrät es dir. Eventuell sind dabei 
dann allerdings ein paar Hilfsvariablen notwendig (die man aber auch in 
die Datenstruktur packen kann) und in denen man sich zb merkt, welcher 
Menüpunkt aus einem Menü 'den Cursor hat', wenn die Kontrolle aus einem 
Submenü zurückgegeben wird.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.