Forum: Mikrocontroller und Digitale Elektronik Probleme mit Menüführung; switch-case


von Pat F. (breaker87)


Angehängte Dateien:

Lesenswert?

Hey Leute!

Ich habe ein kleines Problem mit meinem C-Code (CVAVR).
Im Anhang befindet sich der c-codes.
Das Problem liegt daran, dass mir das Programm immer in den 
case:Optionen einsteigt, egal, wie ich "Zustand" definiere...


lg Patrick

von Stefan K. (_sk_)


Lesenswert?

aus Deinem Code:
1
Zustand=Optionen; 
2
3
   switch (Zustand) 
4
   {
5
     case Optionen:
Wenn Du wirklich willst, dass nicht nur der case Optionen Zweig 
ausgeführt wird, solltest Du ev. die Zuweisung Zustand = Optionen 
weglassen.
Vielleicht gehört die ja in die Initialisierung und nicht in die 
while(1) Schleife ?!

Gruß, Stefan

von TheMason (Gast)


Lesenswert?

ist dir aufgefallen das du
"Zustand=Optionen; " in deiner while schleife stehen hast und deswegen 
auch nur optionen aufgerufen wird ?!?!

versuchs mal damit die zeile "Zustand=Optionen; " VOR deiner schleife 
stehen zu haben ...  könnte evtl klappen ... :-)

gruß
rene

von Pat F. (breaker87)


Lesenswert?

Danke für die Antworten!

Jetzt klappts...
Zumidest ohne Flankenerkennung --> dürfte dort nen Fehler drinnen 
haben...


lg Patrick

von Pat F. (breaker87)


Angehängte Dateien:

Lesenswert?

Ich hab jetzt ein neues Problem...

Wenn ich nun vom Zustand Optionen in einen Anderen wechsle, wird das 
display ständig aktualisiert...
Ich habe bereits versucht, mit einer einfachen if Anweisung das Problem 
zu lösen --> hat aber leider nicht geklappt...

Im Anhang befindet sich der neue Code...
Ich hoffe ihr könnt mir weiterhelfen...


lg Patrick

von Pat F. (breaker87)


Lesenswert?

up --> ist sehr dringend

von JoachimB (Gast)


Lesenswert?

Hallo Patrick,

das Display wird zu Anfang jeder case-Anweisung aktualisiert, wenn n=0 
ist.
Mit if(!n) fragst Du das ab.
Vor dem break jeder Case-Anweisung steht "n=0".
Damit endet jede case-Anweisung mit dem Auftrag, das Display mit dem 
Eintritt in die nächste case-Anweisung zu aktualisieren.

Gruß
Joachim

von Pat F. (breaker87)


Lesenswert?

Das n steht aber noch vor der geschungenen klammer...

Also sollte es nur 0 gesetzt werden, wenn die else if anweisung 
ausgeführt wird, oder?
Wie könnte ich das anders lösen?


lg Patrick

von Pat F. (breaker87)


Lesenswert?

Hab jetzt den Fehler nach stundenlangem Suchen noch selbst gefunden...
1
   
2
  case Sprache:
3
         if(!n){LCD_puts(M1[lang][4], M1[lang][2]);n=1;}    
4
...
5
         else if(Enter);
6
         {  delay(Time);
7
            lang = 0;
8
            n=0;}    //Sprache auf Deutsch --> "0" setzten
9
      break;

Hab aus versehen nen ";" nach "else if(Enter) gemacht...


lg Patrick

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.