Arduino Programmcode für Taster zählt die ganze zeit hoch

Hallo,

ich habe einen Taster eingebaut, der jedoch nicht funktioniert. Heißt er zählt die ganze zeit hoch, obwohl ich nicht mal den Taster betätige und ich weiß echt nicht warum.

Hier ist mein Code:
// Taster Pin
#define BUTTON_PIN 3

// Variable für Tasterstatus
int buttonState = 0;
int previousButtonState = 0;
int buttonCounter = 0;

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}

void loop()
{
// Tasterstatus lesen
buttonState = digitalRead(BUTTON_PIN);
Serial.println(" Button Counter ");
Serial.print(buttonCounter);
// Wenn Taster gedrückt wird und vorheriger Tasterstatus ist LOW, den Tasterzähler erhöhen
if (buttonState == HIGH)
{
buttonCounter++;
}
}

Vielen Dank für die Hilfe

image

Wenn Du meinst, das jemand Deinen Code abschreibt, dann viel Glück.
Wenn Du das ändern willst, dann - BEARBEITEN - FÜR FORUM KOPIEREN - und anstelle des Bildes einfügen.

Tipp:
Deine Auswerteroutine fragt keine Flanke sondern einen Zustand ab.

Code hier als Foto reinsetzen ist ein ganz schlechter Zug.
Sollen wir den alle abtippen, um den zu testen.
Kopiere den aus deiner IDE, dazu gibt es einen Menüpunkt und füge ihn hier ein.
Auch die Fehlermeldung so ändern.

Ich rate mal, du hast einen Hardwarefehler in deinem Aufbau.

Pulldown vergessen

Alternativ, umstellen und den internen Pullup nutzen

Der Code macht nicht das, was der Komentar denken läßt.

So wird raufgezählt solange der Taste gedrückt ist, so ca 200 mal die Sekunde.
Grüße Uwe

Bei einem Schaltungsfehler (Taster falsch angeschlossen) schon.

Danke für die Nachricht und die Hilfe Uwe. Könntest du mir einen Tipp geben, wie ich das ganze so programmiere, das beim drücken des Tasters Gerät läuft und beim erneuten drücken das Gerät stoppt?

Danke dir

Hast du den Taster mal geprüft ?

such mal nach "Arduino button toggle"

Grüße Uwe

Ich bin leider echt nicht weitergekommen, hast du vlt noch nen Tipp?

Ja, du solltest auch andere Fragen beantworten bzw. auf Beiträge reagieren.

Hallo odegaard67

Hier kommt ein Praxistipp.

Stichwort INPUT_PULLUP. Hier ist der überarbeitete Code. Macht doch nicht immer so ein Geheimnis drum herum.

// Taster Pin
#define BUTTON_PIN 3

// Variable für Tasterstatus
int buttonState = 0;
int previousButtonState = 0;
int buttonCounter = 0;

void setup() {
  // Setze Taster-Pin als Eingang
  pinMode(BUTTON_PIN, INPUT_PULLUP);

  Serial.begin(9600);
}

void loop() {
  // Tasterstatus lesen
  buttonState = digitalRead(BUTTON_PIN);

  // Wenn Taster gedrückt wird und vorheriger Tasterstatus ist HIGH, erhöhe den Tasterzähler
  if (buttonState == LOW && previousButtonState == HIGH) {
    buttonCounter++;
    Serial.println("Button Counter: ");
    Serial.println(buttonCounter);
  }

  // Speichere den aktuellen Tasterstatus als vorherigen Tasterstatus
  previousButtonState = buttonState;
}

In deinem ursprünglichen Code hast du die Bedingung if (buttonState == HIGH) verwendet, um zu überprüfen, ob der Taster gedrückt ist. Das Problem dabei ist, dass der Taster normalerweise in einem HIGH-Zustand ist, wenn er nicht gedrückt wird, und nur in den LOW-Zustand wechselt, wenn er gedrückt wird. Daher würde die Bedingung if (buttonState == HIGH) wahr sein, solange der Taster nicht gedrückt wird, was zu einem kontinuierlichen Hochzählen des Tasterzählers führt.

Im überarbeiteten Code wurde die Bedingung korrigiert, um den korrekten Tasterzustand zu überprüfen. Hier wird die Bedingung if (buttonState == LOW && previousButtonState == HIGH) verwendet. Der Tasterzähler wird nur erhöht, wenn der aktuelle Tasterstatus LOW ist und der vorherige Tasterstatus HIGH ist. Dadurch wird sichergestellt, dass der Tasterzähler nur einmal pro Tastendruck erhöht wird.

Darüber hinaus wurde im überarbeiteten Code der interne Pull-Up-Widerstand für den Taster-Pin aktiviert, indem INPUT_PULLUP als Modus für den Taster-Pin verwendet wird. Dies ist eine gängige Praxis, um sicherzustellen, dass der Taster ordnungsgemäß funktioniert und keine externen Pull-Down-Widerstände erforderlich sind.

Es ist wichtig, den Taster richtig zu verkabeln und sicherzustellen, dass er den erwarteten HIGH- und LOW-Zustand hat. In den meisten Fällen ist es üblich, den Taster zwischen den Eingangspin und GND zu schalten und den internen Pull-Up-Widerstand zu aktivieren.

Ich hoffe, das klärt den Unterschied und erklärt den Fehler in deinem ursprünglichen Code. Wenn du weitere Fragen hast, stehe ich gerne zur Verfügung.

Das ist egal.
Egal ob der Taster jetzt richtig oder falsch abgefragt wird, die Programmierlogik ist falsch. Wenn nicht auf Zustandswechsel sondern auf Zustand kontrolliert wird dann zählt ein Zähler bei jeder Runde weiter, Egal ob das bei gedrückten oder losgelassenen Taster passiert.

kein #define verwenden.
wenn states nur 2 Zustände haben können, reicht bool
kann counter negativ werden? Wenn nicht, warum dann int?

Dein Code berücksichtigt nicht, das es prellt.
Die Ausgabe kannst mit dem F-Makro Platz sparender unterbringen.
Und warum machst die nicht auf einer Zeile, sondern schreibst zwei?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.