Zähler Beispiel

Gast #309113
Lesenswert?
• ▲
▼
hi! hab da ein kleines problem, muss ein Bsp schreiben welchen durch
Drücken von Taste 1 einen Zähler um 1 erhöht und durch drücken von
Taste2 den Zähler wieder um 1 verringert, wobei diese nur im Bereich
von 0 -10 möglich sein darf! Sodass wenn der Zähler bei 10 oder 0
angekommen ist nicht mehr weiterzählt.Bis auf die Grenzen hab ichs
schon , nur mit den Grenzen weiß ich nicht wie das funktionieren soll,

while (1){
        if(!Key1 && buffer == 0)

         {
                counter++;
                buffer = 1;
                delay(1);
                WriteVal(counter);


         }

        if(!Key2 && buffer == 0)

        {
                counter--;
                buffer = 1;
                delay(1);
                WriteVal(counter);
        }



        if (Key1)
        buffer = 0;

        if (Key2)
        buffer = 0;

das ist nur mal der Zählvorgang, der klappt auch! Weiß jemand wie ich
da nun die Grenzen einbaue??

m.f.G Frank
Gast #309115
Lesenswert?
• ▲
▼
while (1){
        if(!Key1 && buffer == 0)

         {
                if ( counter < 10 )
                  counter++;
                buffer = 1;
                delay(1);
                WriteVal(counter);


         }

        if(!Key2 && buffer == 0)

        {
                if ( counter > 0 )
                  counter--;
                buffer = 1;
                delay(1);
                WriteVal(counter);
        }
Gast #309122
Lesenswert?
• ▲
▼
@Michael:
Erlaubt ists immer, aber:

"if (counter>10) counter--;"
Wozu soll das gut sein? Logisch zwar richtig, kostet aber mehr Zeit und
Programmspeicher, bringt also gar nichts

if (counter<0) counter++;
erstmal siehe oben, ausserdem funktioniert es nur bei signed-Variablen.
Und die setzt man normalerweise nur ein, wenn man sie auch braucht.
Also beides keine sonderlich guten Vorschläge :-)
Gast #309123
Lesenswert?
• ▲
▼
Des Menschen Wille ist ein Himmelreich :-)
Anormalerweise nehme ich lieber signed, und würde letztlich auch die
Begrenzung in der Form machen: if(count > POS_LIMIT) count = POS_LIMIT;
und: if(count < NEG_LIMIT) count = NEG_LIMIT;

Das hat den Vorteil, daß diese Begrenzung einmalig vor der Verwendung
von count ausgeführt wird und einen größeren, unzulässigen Bereich
eingrenzt. Es könnte ja auch sein, daß count an anderen Stellen um +/-2
verändert wird, oder count bei der 1. Verwendung undefiniert sein kann
(z.B. no_init Bereich mit Pufferbatterie).
Ich weiß, wird hier alles nicht gebraucht; aber ein bißchen weiter zu
sehen, schadet nicht.

Und noch einmal auf das signed/unsigned zu kommen. Wird ja nur bei
Bytes so hoch gelobt (Compiler default). Bei int hingegen nimmt man
nicht unsigned int als default. Aber jeder, wie er mag.
#309124
Lesenswert?
• ▲
▼
Wenn ich auch noch probieren darf:

while (1){
        if(!Key1 &&
           buffer == 0 &&
           counter < 10)

         {
                counter++;
                buffer = 1;
                delay(1);
                WriteVal(counter);


         }

        if(!Key2 &&
           buffer == 0 &&
           counter > 0)

        {
                counter--;
                buffer = 1;
                delay(1);
                WriteVal(counter);
        }

Hat den Vorteil, dass auch der Rest nur dann gemacht
wird, wenn auch wirklich gezählt wurde. Und so wie
ich das sehe ist der Rest ganz einfach: den veränderten
Counter augeben. Wozu aber einen Counter ausgeben, der
sich gar nicht geaendert hat?

Antwort schreiben

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.

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.