Vraag:
Knopstatus verandert willekeurig
sachleen
2014-02-14 07:01:05 UTC
view on stackexchange narkive permalink

Ik heb een drukknop aangesloten op mijn Arduino, maar deze lijkt willekeurig te worden geactiveerd.

Ik heb een pin van de knop aangesloten op pin 2 op de Arduino en de andere op aarde.

  void setup () {Serial.begin (9600); pinMode (2, INPUT);} void loop () {Serial.println (digitalRead (2));}  

Ik verwacht dat het continu 1 afdrukt en naar 0 gaat als ik op de knop ingedrukt, maar soms wordt 0 weergegeven, zelfs als ik het niet aanraak.

Een antwoord:
#1
+17
sachleen
2014-02-14 07:01:05 UTC
view on stackexchange narkive permalink

Wanneer een knop in die configuratie is aangesloten, is de invoer wat zwevend wordt genoemd, wat betekent dat het geen 0 of een 1 is. Wanneer de knop wordt ingedrukt, is deze verbonden met aarde, dus dat is zeker een 0, maar als deze niet is ingedrukt, weten we de waarde van de pin niet.

Pull Up Resistor

We moeten een zogenaamde "pull-up" toevoegen weerstand om het signaal naar een logische 1 te trekken wanneer de knop niet wordt ingedrukt.

pull up resistor

Afbeelding van Sparkfun

Wat dit betekent is dat wanneer de knop niet wordt ingedrukt, de Arduino een logische 1 leest. Wanneer de knop wordt ingedrukt, loopt de stroom door de weerstand naar aarde en leest de Arduino een logische 0.

Interne trekkracht Up Resistor

De Arduino heeft ook interne pull-up weerstanden zodat je niet per se een extra component aan je schakeling hoeft toe te voegen. Er zijn een aantal manieren om dit te gebruiken.

Vroeger moest je het zo doen:

  pinMode (pin, INPUT); // stel pin in op inputdigitalWrite (pin, HIGH); // zet pullup-weerstanden aan  

Nu kunnen we het eenvoudig op één regel doen:

  pinMode (pin, INPUT_PULLUP);  

Hierdoor wordt de 20k pull-up weerstand op die pin ingeschakeld. De invoer zal niet langer zweven als de knop niet wordt ingedrukt.

Opmerking: dit werkt alleen als het andere uiteinde is verbonden met aarde.

Het is vermeldenswaard dat hetzelfde idee ook werkt voor pull-down-weerstanden; d.w.z. de weerstand trekt de pin normaal naar beneden, maar door op de knop te drukken, wordt deze hoog. Het moet natuurlijk wel extern zijn, want er is geen interne pull-down op standaard Arduino's.


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...