Forum: Mikrocontroller und Digitale Elektronik Zweisprachiges Menü für ATmega8


von Pat F. (breaker87)


Lesenswert?

Hey Leute!

Ich brauche für meinen ATmega8 eine zweisprachige Menüführung. Leider 
habe ich aber überhaupt keine Ahnung wie ich das realisieren soll...

Das Menü besteht aus einigen Untermenüs in denen diverse Einstellungen 
vorgenommen werden können.

Ich hoffe ihr könnt mir weiterhelfen.


lg Patrick


PS: Programmiert soll das ganze in "CVAVR-C", bedient über 4 Tasten 
(links, rechts, zurück, enter) und auf einem 2x20 Zeichen Display 
angezeigt werden.

von Florian (Gast)


Lesenswert?

ah hallo,
Du speicherst die ganzen menüs in strings.
char hauptmenu_de[x]="blabladeutsch";
char hauptmenu_en[x]="blablaenglisch";
char *hmtext;


if(lang==de)
{
   hmtext = &hauptmenu_de;
   //weitere menus
}

else
{
   hmtext = &hauptmenu_en;
   //weitere
}

gruß
Florian

von Pat F. (breaker87)


Lesenswert?

Danke für die Antwort, aber ich komme jetzt auch nicht so ganz weiter... 
Bin leider noch Anfänger, daher brauche ich nocht etwas mehr hilfe...

Also muss ich jetzt für jeden Punkt des Menüs einen eigenen string 
anlgen?

...
char optionen_de[x]="blabladeutsch";
char optionen_en[x]="blablaenglisch";
...

Auf dem Display muss ich dann nur den hmtext und alle anderen texte 
ausgeben lassen, oder?


lg Patrick

von crazy horse (Gast)


Lesenswert?

oder so:

von Pat F. (breaker87)


Lesenswert?

crazy horse wrote:
> oder so:

???

Wie? =o)

lg

von crazy horse (Gast)


Angehängte Dateien:

Lesenswert?

Warum ist nach "Vorschau" die angehängte Datei weg??

von Sebastian A. (seba)


Lesenswert?

Schau dir doch mal das Menu vom AVR Butterfly an:
http://www.atmel.com/dyn/products/tools_card.asp?family_id=607&family_name=AVR+8%2DBit+RISC+&tool_id=3146
.. das ist eine Statemachine. Da könntest du einfach eine weitere 
"Spalte" in deine "menu_state[]" einfügen.

Viel Spaß Sebastian

von Pat F. (breaker87)


Lesenswert?

crazy horse wrote:
> Warum ist nach "Vorschau" die angehängte Datei weg??

Wie gebe ich dann den Text aus?


lg Patrick

von Rahul D. (rahul)


Lesenswert?

messages[2,29]

Deutsches Menu: messages[0,n]
Englisches Menu: messages[1,n]

mit n = Menunummer:

von Pat F. (breaker87)


Lesenswert?

Rahul Ghose wrote:
> messages[2,29]
>
> Deutsches Menu: messages[0,n]
> Englisches Menu: messages[1,n]
>
> mit n = Menunummer:

Danke für die Antwort!

Ich würde jetzt nur noch gerne wissen, wie ich dann z.B. messages[0,5] 
in einzelnen Zeichen ausgeben kann, da meine Displayroutine immer nur 
ein zeichen nach dem anderen aufs Display sendet...
Gibts 'ne funktion, mit der man ein array in einen String umwandeln 
kann?


lg Patrick

von crazy horse (Gast)


Lesenswert?

void write_messages (unsigned char x, unsigned char y, unsigned char 
msg_nr)
{lcd_gotoxy (x,y);
lcd_putsf (messages[sprache,msg_nr]);
}

von David F. (miyu)


Lesenswert?

Der Beitrag ist zwar schon Hundsalt -.- aber für die jenigen, die's mal 
brauchen.
Ich stand vor kurzem vor dem selben Problem.

So hab ich's gelöst (Muss vor dem Compiling eingestellt werden):


-Header-Datei msg.h angelegt und folgendes eingefügt:
1
#ifndef __MSG_H
2
#define __MSG_H
3
4
//0=deutsch, 1=englisch
5
#define LANG 0
6
7
#if LANG == 0
8
9
#define TEXT1 "Deutsch"
10
//...usw
11
#else
12
#define TEXT1 "Englisch"
13
//...usw
14
#endif

Im Programm selber kam dann z.B. sowas:
1
#include "msg.h"
2
//...[vorheriger Code]
3
lcd_puts(TEXT1);
4
//...[weiter geht's]


lg David

von Gast (Gast)


Lesenswert?

>So hab ich's gelöst (Muss vor dem Compiling eingestellt werden):

Das ist leider keine gute Lösung. Besser ist immer, wenn alle Sprachen 
im Gerät vorhanden sind und vom Benutzer eingestellt werden können.
Anderfalls müßtest Du immer neuen Code für jede andere Sprache 
erstellen. Ein hier produziertes Gerät kann damit ohne Änderung in alle 
Nachbarländer verkauft werden.
Ein mehrdimensionales Feld mit entsprechender (Quell-)Textformatierung 
ist zudem übersichtlicher. Beispiel bei einer mehrstelligen Anzeige soll 
ein Menü für die Uhr ausgegeben werden:

" beeldscherm ",  /* NL */
"    jaar     ",
"    maand    ",
"     dag     ",
"     uur     ",
"   minuut    ",
"   seconde   ",
"    save     ",
"  afbreken   ",

von David F. (miyu)


Lesenswert?

Gast schrieb:
> Ein mehrdimensionales Feld mit entsprechender (Quell-)Textformatierung
> ist zudem übersichtlicher.

Stimmt, da hätte ich auch selber drauf kommen können ^^
So etwas hatte ich mal in Delphi verwendet.
Den Wald vor lauter Bäumen[...] ...na, ja :D

Ich werde das mal in einem Zukünftigen Projekt ausprobieren.

lg David

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
Noch kein Account? Hier anmelden.