Fråga:
Knapptillstånd ändras slumpmässigt
sachleen
2014-02-14 07:01:05 UTC
view on stackexchange narkive permalink

Jag har en tryckknapp ansluten till min Arduino men den verkar utlösa slumpmässigt.

Jag har en stift på knappen ansluten till stift 2 på arduino och den andra ansluten till marken.

  ogiltig inställning () {Serial.begin (9600); pinMode (2, INPUT);} void loop () {Serial.println (digitalRead (2));}  

Jag förväntar mig att den skriver ut 1 kontinuerligt och går till 0 när jag trycker på knappen ned men ibland visar den 0 även när jag inte rör vid den.

Ett svar:
sachleen
2014-02-14 07:01:05 UTC
view on stackexchange narkive permalink

När en knapp är ansluten i den konfigurationen är ingången det som kallas flytande vilket betyder att det inte är 0 eller 1. När du trycker på knappen är den ansluten till marken, så det är definitivt a 0, men när den inte trycks ner vet vi inte värdet på stiftet.

Pull Up Resistor

Vi måste inkludera det som kallas en "pull-up" motstånd för att dra upp signalen till en logik 1 när du inte trycker på knappen.

pull up resistor

Bild från Sparkfun

Vad detta betyder är när man inte trycker på knappen, läser Arduino en logik 1. När man trycker på knappen strömmar strömmen genom motståndet till jord och Arduino läser en logik 0.

Intern drag Uppmotstånd

Arduino har också interna pull up-motstånd så att du inte nödvändigtvis behöver lägga till en extra komponent i din krets. Det finns ett par sätt att använda detta.

Du måste göra det så här:

  pinMode (pin, INPUT); // ställ in pin till inputdigitalWrite (pin, HIGH); // sätt på pullup-motstånd  

Nu kan vi göra det helt enkelt i en rad:

  pinMode (pin, INPUT_PULLUP);  

Detta möjliggör 20k pull up resistor på den stiftet. Ingången kommer inte längre att flyta när knappen inte trycks ned.

Obs! Detta fungerar bara när den andra änden är ansluten till marken.

Det är värt att notera att samma idé fungerar även för neddragbara motstånd; dvs motståndet drar normalt stiftet lågt, men genom att trycka på knappen kommer det högt. Uppenbarligen måste det dock vara externt, eftersom det inte finns någon intern nedrullning på standard Arduinos.


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...