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++;
}
}
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.
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?
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?