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

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