Problem GLCD Menu

Gast #3451262
Lesenswert?

Hallo zusammen.

In meiner Funktion "auswahl" besteht folgendes Problem:

int x = 0;
void auswahl(void){

  SetFont(FONT_8_norm);
  LCDSoftText("Relais 0",7,0,BLACK);
  LCDSoftText("Relais 1",7,9,BLACK);
  LCDSoftText("Relais 2",7,18,BLACK);
  LCDSoftText("-",0,x,BLACK);

  switch(x){       //der - nur auf den 3 zeilen
    case -9:  x = 18; break;
    case 27:  x = 0; LCDSoftText("   ",0,27,BLACK); break;
  }

  if (get_key_short (1<<S0)){
    LCDSoftText("   ",0,x,BLACK);   //lösche den - auf der zeile
    x = x+9;                        //zeichne den - auf nächster zeile
  }
  else if (get_key_short (1<<S1)){
    LCDSoftText("   ",0,x,BLACK);   //lösche den - auf der zeile
    x = x-9;                        //zeichne den - auf vorheriger zeile
  }
  else if(x==0){                    //wenn - auf erster zeile
    if (get_key_short(1<<S2)){      //und S2 betätigt wird
      //ClearScreen();              //lösche lcd
      LCDSoftText("AN",0,0,BLACK);  //schreibe
      LCDSoftText("AUS",0,9,BLACK); //schreibe
    }
  }


  LCD_refresh();//sende an lcd
}

Mein Problem ist jetzt, wenn:

else if(x==0){
if (get_key_short(1<<S2))

die beiden erfüllt sind, wird mir das AN und AUS zwar angezeigt, aber 
der Rest bleibt auch noch stehen.
Was kann ich da machen.?


danke
MfG
Gast #3451268
Lesenswert?

Wie wäre es, wenn du die Zeile
>     //ClearScreen();              //lösche lcd
entkommentierst ?

Wenn du nicht das ganze LCD löschen willst, sondern nur Teile davon, 
dann musst du das halt entsprechend hinschreiben.

Oliver
Gast #3451282
Lesenswert?

Oliver schrieb:
> Wie wäre es, wenn du die Zeile
>>     //ClearScreen();              //lösche lcd

auch wenn es da steht. Das selbe Problem.


habe aber gerade eine lösung gefunden:

int x = 0;
int z = 0;
void auswahl(void){
  SetFont(FONT_8_norm);
  switch(z){
    case 0: LCDSoftText("   ",0,0,BLACK);
            LCDSoftText("   ",0,9,BLACK);
            LCDSoftText("   ",0,18,BLACK);
            LCDSoftText("Relais 0",7,0,BLACK);
            LCDSoftText("Relais 1",7,9,BLACK);
            LCDSoftText("Relais 2",7,18,BLACK);
            LCDSoftText("-",0,x,BLACK);

        switch(x){
          case -9:  x = 18; break;
          case 27:  x = 0; LCDSoftText("   ",0,27,BLACK); break;
        }

        if (get_key_short (1<<S0)){
          LCDSoftText("   ",0,x,BLACK);
          x = x+9;
        }
        else if (get_key_short (1<<S1)){
          LCDSoftText("   ",0,x,BLACK);
          x = x-9;
        }
        break;
    case 1: LCDSoftText("               ",0,0,BLACK);
            LCDSoftText("               ",0,9,BLACK);
            LCDSoftText("               ",0,18,BLACK);
            LCDSoftText("AN",0,0,BLACK);
            LCDSoftText("AUS",0,9,BLACK);
            break;
  }

  if(x==0){
    if (get_key_short(1<<S2)){
      z = 1;
    }
    if (get_key_short(1<<S3)){
      z = 0;
    }
  }


  LCD_refresh();
}


jetzt ist nur noch das problem, wenn AN und AUS dasteht, flakkert es ein 
wenig. wie kann man das beheben.?
Gast #3451365
Lesenswert?

das war das problem....danke

case 1: //LCDSoftText("               ",0,0,BLACK);
  //LCDSoftText("               ",0,9,BLACK);
  LCDSoftText("               ",0,18,BLACK);
  LCDSoftText("AN             ",0,0,BLACK);
  LCDSoftText("AUS            ",0,9,BLACK);
  break;

so geht es.

aber wie bekomm ich das flakkern bei -Re weg.?

- Relais 1
  Relais 2
  Relais 3

geht das auch so einfach:?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren