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
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); }
statt
1 | counter++; |
machst Du
1 | if (counter < maximum) counter++; |
Beim dekrementieren dann entsprechend andersrum. Rick
if (counter>10) counter--; if (counter<0) counter++; Wenn's denn noch erlaubt ist.
danke danke! für die schnelle hilfe!!! werd gleich mal testen obs funktioniert!!!
@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 :-)
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.
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?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.