Countdown Balken auf Display

Gast #1281998
Moin

Ich möchte für meine Anwendung beim Start zunächst einen Balken auf dem 
Display darstellen der immer kleiner wird und wenn er ganz weg ist soll 
das eigentliche Programm starten.
Irgendwie bekomme ich keinen Balken hin wenn ich eine Schleife einsetze 
die Rückwärts von 10 bis 1 zählen soll; der Balken bleibt immer 10 
Zeichen lang.
Wenn ich eine Schleife einbaue die Vorwärts von 1 bis 10 zählt 
funktioniert es, d.h der Balken wird immer größer.

Sieht jemand meinen Fehler? Ich kann mir da irgendwie keinen Reim drauf 
machen...
1
// Countdown
2
// Balken ####### darstellen und kleiner werden lassen
3
 uint8_t schleife;
4
 char str1[11]="";
5
 char str2[10]="##########";
6
 
7
 for (schleife=10; schleife>0; schleife--){   //rückwärts Schleife
8
//for (schleife=1; schleife<10; schleife++){   //vorwärts Schleife
9
   strncpy(str1, str2, schleife);
10

11
   str1[11]='\0'; //String abschließen
12
   lcd_string(str1);
13
   _delay_ms(500); //500ms warten
14
   _delay_ms(500); //500ms warten
15
   set_cursor(0,1);
16
   lcd_clear();
17
  } //for schleife1

Gruß
Michael
Gast
Hallo Johann

Danke für die Info. Nach kurzem Nachdenken scheint die Lösung recht 
simpel...

Ich habe es so umgesetzt:
1
  lcd_clear();
2
  const char balken[] = "########## ";
3
  for (i=10; i>0; i--){  //rückwärts Schleife
4
  //for (i=0; i<10; i++){     //vorwärts Schleife
5
     lcd_string(balken[i]);
6
     _delay_ms(500); //500ms warten
7
     _delay_ms(500); //500ms warten
8
    }

Das für mich im Moment unverständliche ist, daß sowohl bei der rückwärts 
Schleife, als auch bei der vorwärts Schleife der Balken auf dem Display 
immer länger wird. Nicht wie ich es beabsichtigt habe bei 10 Zeichen 
anfängt und dann bis auf ein Zeichen runtergeht.

Wenn ich das richtig interpretiere sollte z.B. bei 
lcd_string(balken[10]) auch 10 Zeichen ausgegeben werden, oder habe ich 
das mißverstanden??

Gruß
Michael
Gast
Es wir bei jedem Aufruf von

lcd_string(balken[i]);

ein Zeichen dem Display hinzugefügt. Hierbei ist es egal wie deine 
Schleife aussieht.

Ich glaubr das sollte gehen:
  char balken[] = "          ";
  for (i=0; i<10; i++)
  {
     balken[i] = "#"
     for (j=0; j<10; j++)     lcd_string(balken[j]);
  }
  _delay_ms(500); //500ms warten
  _delay_ms(500); //500ms warten

Un rückwärts
  char balken[] = "##########";
  for (i=10; i>0; i--)
  {
     balken[i] = " "
     for (j=0; j<10; j++)     lcd_string(balken[j]);
  }
  _delay_ms(500); //500ms warten
  _delay_ms(500); //500ms warten
Gast
Es funktioniert jetzt. Danke an alle. :-)
Ich habe es jetzt so umgesetzt:

1
  lcd_clear();
2
  set_cursor(0,1);
3
  char balken[] = "##########";
4
  lcd_string(balken);
5
  for (i=10; i>0; i--){
6
     balken[i] = " ";
7
     for (j=0; j<10; j++){
8
       set_cursor(j,1);
9
       lcd_string(balken[j]);
10
       }
11
     _delay_ms(500); //500ms warten
12
     _delay_ms(500); //500ms warten
13
     }
14
  lcd_clear();

Noch einen schönen Sonntag Abend
Michael

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.