Schaltflächenstatus wird zufällig geändert

14

Ich habe einen Druckknopf mit meinem Arduino verbunden, aber er scheint zufällig auszulösen.

Ich habe einen Pin der Taste mit Pin 2 auf dem Arduino verbunden und der andere mit Masse verbunden.

void setup() {
    Serial.begin(9600);

    pinMode(2, INPUT);
}

void loop() {
    Serial.println(digitalRead(2));
}

Ich erwarte, dass es kontinuierlich 1 druckt und auf 0 wechselt, wenn ich die Taste drücke, aber manchmal wird 0 angezeigt, auch wenn ich es nicht berühre.

Sachleen
quelle

Antworten:

17

Wenn ein Taster in dieser Konfiguration angeschlossen ist, wird der Eingang als schwebend bezeichnet , was bedeutet, dass er nicht 0 oder 1 ist. Wenn der Taster gedrückt wird, ist er mit Masse verbunden, das ist also definitiv 0, aber wenn er nicht gedrückt wird, Wir kennen den Wert des Pins nicht.

Widerstand hochziehen

Wir müssen einen sogenannten "Pull-Up" -Widerstand einfügen, um das Signal auf eine logische 1 zu bringen, wenn die Taste nicht gedrückt wird.

Widerstand hochziehen

Bild von Sparkfun

Dies bedeutet, wenn die Taste nicht gedrückt wird, liest der Arduino eine logische 1. Wenn die Taste gedrückt wird, fließt der Strom durch den Widerstand nach Masse und der Arduino liest eine logische 0.

Interner Pull-Up-Widerstand

Der Arduino verfügt auch über interne Pull-up-Widerstände, sodass Sie Ihrer Schaltung nicht unbedingt eine zusätzliche Komponente hinzufügen müssen. Es gibt verschiedene Möglichkeiten, dies zu nutzen.

Früher musstest du das so machen:

pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors

Jetzt können wir es einfach in einer Zeile tun:

pinMode(pin, INPUT_PULLUP);

Dadurch wird der 20k-Pullup-Widerstand an diesem Pin aktiviert. Der Eingang schwebt nicht mehr, wenn die Taste nicht gedrückt wird.

Hinweis: Dies funktioniert nur, wenn das andere Ende mit Masse verbunden ist.

Sachleen
quelle
1
Es ist erwähnenswert, dass die gleiche Idee auch für Pull-Down-Widerstände gilt. Das heißt, der Widerstand zieht normalerweise den Stift nach unten, aber das Drücken der Taste bringt ihn nach oben. Offensichtlich muss es jedoch extern sein, da es bei Standard-Arduinos kein internes Pulldown gibt.
Peter Bloomfield