mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Countdown Balken auf Display


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...
// Countdown
// Balken ####### darstellen und kleiner werden lassen
 uint8_t schleife;
 char str1[11]="";
 char str2[10]="##########";
 
 for (schleife=10; schleife>0; schleife--){   //rückwärts Schleife
//for (schleife=1; schleife<10; schleife++){   //vorwärts Schleife
   strncpy(str1, str2, schleife);

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

Gruß
Michael

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
str2 ist zu kurz

Einfach
const char balken[] = "########## ";

Und auf's LCD wird balken+i ausgegeben. strcpy ist überflüssig. Beachte 
das Leerzeichen am Ende von Balken, das das letzte # überschreibt.

Johann

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Johann

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

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

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

Autor: MichiB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: MichiB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so,

die delays müssen natürlich in die Schleifen und du musst das Doisplay 
löschen nach den delays.

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

oder so ...

set_cursor(0,1);
lcd_string("##########")
  for (i=10; i>0; i--)
  {
   set_cursor(0,i+1);
   lcd_string(" ");
   //pause
  }

Sascha

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es funktioniert jetzt. Danke an alle. :-)
Ich habe es jetzt so umgesetzt:

  lcd_clear();
  set_cursor(0,1);
  char balken[] = "##########";
  lcd_string(balken);
  for (i=10; i>0; i--){
     balken[i] = " ";
     for (j=0; j<10; j++){
       set_cursor(j,1);
       lcd_string(balken[j]);
       }
     _delay_ms(500); //500ms warten
     _delay_ms(500); //500ms warten
     }
  lcd_clear();

Noch einen schönen Sonntag Abend
Michael

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.