Hur Man Kan Bli Av Med Kontaktstopp När Man Ansluter En Knapp Till Arduino

Innehållsförteckning:

Hur Man Kan Bli Av Med Kontaktstopp När Man Ansluter En Knapp Till Arduino
Hur Man Kan Bli Av Med Kontaktstopp När Man Ansluter En Knapp Till Arduino

Video: Hur Man Kan Bli Av Med Kontaktstopp När Man Ansluter En Knapp Till Arduino

Video: Hur Man Kan Bli Av Med Kontaktstopp När Man Ansluter En Knapp Till Arduino
Video: 🔧 Как быстро установить и настроить Arduino IDE. Проверка соединения. Уроки Arduino для начинающих 2024, April
Anonim

Vi har redan tittat på att ansluta en knapp till Arduino och berört frågan om "studsande" kontakter. Detta är ett mycket irriterande fenomen som orsakar upprepade knapptryckningar och gör det svårt att programmera hantera knappklick. Låt oss prata om hur du kan bli av med kontaktstopp.

Kontakt studsande effekt
Kontakt studsande effekt

Nödvändig

  • - Arduino;
  • - taktknapp;
  • - motstånd med ett nominellt värde på 10 kOhm;
  • - Ljusdiod;
  • - anslutande ledningar.

Instruktioner

Steg 1

Kontaktstopp är ett vanligt fenomen i mekaniska omkopplare, tryckknappar, växlar och reläer. På grund av att kontakterna vanligtvis är gjorda av metaller och legeringar som har elasticitet, när de är fysiskt stängda, skapar de inte omedelbart en tillförlitlig anslutning. Inom kort tid stängs kontakterna flera gånger och stöter varandra. Som ett resultat får den elektriska strömmen ett steady-state-värde inte direkt, utan efter en serie upp-och nedgångar. Varaktigheten av denna övergående effekt beror på kontaktmaterial, storlek och design. Bilden visar ett typiskt oscillogram när kontaktknapparna på taktknappen är stängda. Det kan ses att tiden från att byta till steady state är flera millisekunder. Detta kallas "studsa".

Denna effekt märks inte i elektriska kretsar för att styra belysning, motorer eller andra tröghetssensorer och -anordningar. Men i kretsar där det finns snabb läsning och bearbetning av information (där frekvenserna är i samma ordning som "studsande" pulser eller högre) är detta ett problem. I synnerhet är Arduino UNO, som arbetar vid 16 MHz, utmärkt för att fånga kontaktstopp genom att acceptera en sekvens av enor och nollor istället för en enda 0 till 1-omkopplare.

Kontakta studs när du trycker på en knapp
Kontakta studs när du trycker på en knapp

Steg 2

Låt oss se hur kontaktstopp påverkar kretsens korrekta funktion. Låt oss ansluta klockknappen till Arduino med hjälp av en neddragbar motståndskrets. Genom att trycka på knappen tänder vi lysdioden och låter den lysa tills knappen trycks in igen. För tydlighetens skull ansluter vi en extern lysdiod till den digitala stiftet 13, även om den inbyggda kan släppas.

Ansluta en knapp till en Arduino med hjälp av en uppdragbar motståndskrets
Ansluta en knapp till en Arduino med hjälp av en uppdragbar motståndskrets

Steg 3

För att utföra denna uppgift, det första som kommer att tänka på:

- kom ihåg det tidigare tillståndet för knappen;

- jämför med nuvarande tillstånd;

- om tillståndet har förändrats ändrar vi lysdioden.

Låt oss skriva en sådan skiss och ladda den i Arduino-minnet.

När kretsen slås på syns effekten av kontaktsprång omedelbart. Det manifesterar sig i det faktum att lysdioden inte tänds omedelbart efter att du tryckt på knappen, eller tänds och sedan slocknar eller inte släcks omedelbart efter att du har tryckt på knappen utan förblir på. I allmänhet fungerar inte kretsen stabilt. Och om detta inte är så viktigt för en uppgift med att tända lysdioden, är det helt enkelt oacceptabelt för andra mer allvarliga uppgifter.

Skiss av bearbetningsknapp genom att trycka på utan att ta hänsyn till kontaktstopp
Skiss av bearbetningsknapp genom att trycka på utan att ta hänsyn till kontaktstopp

Steg 4

Vi kommer att försöka fixa situationen. Vi vet att kontaktstopp sker inom några millisekunder efter en kontaktstängning. Låt oss vänta, säg, 5 ms efter att vi ändrat knappens tillstånd. Den här tiden för en person är nästan ett ögonblick, och att trycka på en knapp av en person tar vanligtvis mycket längre tid - flera tiotals millisekunder. Och Arduino fungerar bra med så korta tidsperioder, och dessa 5ms gör att den kan avbryta studsningen av kontakter från att trycka på en knapp.

I denna skiss kommer vi att förklara debounce () -proceduren ("bounce" på engelska är bara "bounce", prefixet "de" betyder omvänd process), till vilken ingång vi tillhandahåller det tidigare tillståndet för knappen. Om en knapptryckning varar mer än 5 ms, är det verkligen ett tryck.

Genom att upptäcka pressen ändrar vi statusen för lysdioden.

Ladda upp skissen till Arduino-kortet. Allt är mycket bättre nu! Knappen fungerar utan att misslyckas, när den trycks in ändras lysdioden som vi ville.

Skiss av bearbetning av en knapptryckning, med hänsyn till kontaktstopp
Skiss av bearbetning av en knapptryckning, med hänsyn till kontaktstopp

Steg 5

Liknande funktioner tillhandahålls av specialbibliotek som Bounce2-biblioteket. Du kan ladda ner den från länken i avsnittet "Källor" eller på webbplatsen https://github.com/thomasfredericks/Bounce2. För att installera biblioteket placerar du det i bibliotekets katalog i Arduino-utvecklingsmiljön och startar om IDE.

Biblioteket "Bounce2" innehåller följande metoder:

Bounce () - initialisering av "Bounce" -objektet;

tomrumsintervall (ms) - ställer in fördröjningstiden i millisekunder;

void attach (pin number) - ställer in stiftet som knappen är ansluten till;

int-uppdatering () - uppdaterar objektet och returnerar true om pin-tillståndet har ändrats, och falskt annars;

int read () - läser det nya tillståndet för stiftet.

Låt oss skriva om vår skiss med hjälp av biblioteket. Du kan också komma ihåg och jämföra knappens tidigare tillstånd med den nuvarande, men låt oss förenkla algoritmen. När du trycker på knappen räknar vi pressarna, och varje udda tryck tänds lysdioden och varje jämn tryck stänger av den. Denna skiss ser kortfattad ut, lätt att läsa och lätt att använda.

Rekommenderad: