void loop()
{
if (digitalRead(TasterPin) == HIGH)
{
// diese Stelle wird zigtausendmal pro Sekunde durchlaufen,
// solange der Taster gedrückt ist ( bzw. bei INPUT_PULLUP losgelassen ist )
}
}
Natürlich kannst du für ein erstes Erfolgserlebnis da drin erstmal ein delay(1000) einbauen:
Dann zählt er im Sekundentakt entweder rauf oder runter.
Einen "Tastendruck" erkennt man aber am Wechsel zwischen LOW und HIGH.
Dazu musst du dir merken, was vorher war.
s. AlterZustand im code unten.
Und dann kommt das ominöse Prellen in Spiel.
Wenn du den Taster drückst, wechselt er innerhalb weniger Millisekunden einige Male zwischen LOW und HIGH, bis er dann im neuen Zustand bleibt. Kann übrigens auch beim Loslassen passieren !
Leute die Spass dran haben, Zauber-Software zu verwenden, freuen sich über die debounce Library, die das Problem löst.
Das einfachste Entprellen ist ein delay(5), sobald ein erster Wechsel erkannt wurde.
const int TasterUpPin = A0;
const int TasterDnPin = A1;
boolean alterZustandUp;
boolean alterZustandDn;
int variable;
void setup()
{
// Die beiden Taster verbinden den Pin mit GND, das spart externe Widerstände ein.
pinMode(TasterUpPin, INPUT_PULLUP); // LOW wenn gedrückt
pinMode(TasterDnPin, INPUT_PULLUP);
}
void loop()
{
boolean neuerZustand = digitalRead(TasterUpPin);
if ( neuerZustand != alterZustandUp )
{
delay(5); // entprellen
alterZustandUp = neuerZustand;
if (neuerZustand == LOW) variable ++;
}
neuerZustand = digitalRead(TasterDnPin);
if ( neuerZustand != alterZustandDn )
{
delay(5); // entprellen
alterZustandDn = neuerZustand;
if (neuerZustand == LOW) variable --;
}
lcdAusgabe(variable);
}