Köra massor av knappar (1 / 4 steg)
Steg 1: Tänka det
Så, låt oss tänka detta igenom.
Om man tittar på den handledning som anges ovan, kan du se att den dyre-styrka lösningen är att vi behöver en driver pin, ett avlopp genom en 10 KOhm motstånd och en ingångsstift för varje knapp. Den makt pin och avlopp kan delas mellan alla knappar, men i den krets som visat det, vi kan inte komma runt det faktum att vi behöver en separat ingångsstift för varje enskild knapp. Om vår ansökan kräver 10 knappar, behöver vi 10 Arduino stift. AJ.
Så jag gav detta en tanke, men slog det mig att detta var liknande till ett problem som jag i ett annat projekt jag hade arbetat med, nämligen att ta itu med flera LED display siffror, något vi ser överallt från mikrovågsugnar till väckarklockor. Så snälla ha tålamod med mig medan jag avvika in LED landet för ett ögonblick.
I de flesta kretsar som omfattar flera LED siffror, är varje siffra inte aktiverat med konstant ström. Snarare registeransvarige ställer in segmentet-mönstret för ett visst mål siffra (säga, mönstret som gör upp hur många "5"), och detta mönster till alla siffror i displayen samtidigt. Det sedan sätter upp mönstret för nästa siffra, utgångar, etc., cykling genom alla siffror och upprepa för evigt.
Men, du får fråga, hur är det möjligt, att se olika nummer på varje siffra? Detta är möjligt eftersom registeransvarige använder transistorer för att slå på target siffran och stäng av alla andra innan utskrift av mönstret.
Till exempel, låt oss säga att vi har en 4 siffrig LED display (varje siffra som heter A, B, C och D), och vi vill visa numren "5678" på den här skärmen. Här är vad som händer:
- registeransvarige vänder A och vänder siffror B, C och D av
- det utgångar mönstret för nummer "5" och alla siffror
- Det visar B och A, C, D av
- utgångar mönster för nummer "6"
- C och A, B, D av
- utgångar "7"
- blir D på och A, B, C off
- utgångar "8"
- upprepa från steg 1
Detta gör att elektroniken inblandade att vara mycket enklare och billigare. Och det fungerar bara eftersom registeransvarige och transistorerna kan sätta siffror på och bort så otroligt snabbt att varje enskilt segment på varje siffra egentligen inte har tid att blekna innan det uppdateras igen. Denna process kallas "multiplexing" eller "blinkande", och det tillåter dig att köra, teoretiskt, valfritt antal LED siffror. (I verkligheten, men det finns en gräns: när du lägger till fler och fler siffror, kommer du att märka att de börjar flimra, eftersom registeransvarige inte kan uppdatera dem tillräckligt snabbt. Slutligen, blir detta flimmer så dålig att du inte längre kan känna igen siffrorna.)
OK, tillbaka till knappen mark.
Jag såg ett samband mellan LED multiplexing ovan och problemet flera knappar: Tänk om vi kunde multiplex knapparna på något sätt? I stället för multiplexing utdata, skulle vi multiplex input: Detta innebär att vi skulle stänga av alla utom en knapp, upptäcka att knappen upp/ned-läge, lagra den och sedan göra samma sak för knappen Nästa etc., cykling genom alla knappar mycket, mycket snabbt. Eftersom endast en knapp är verksam vid varje givet ögonblick, och registeransvarige vet vilken en den er, kan vi använda det samma, enda ingångsstiftet för valfritt antal knappar.
Låter bra, men behålla: vi måste fortfarande aktivera varje knapp, en i taget. Så, har inte vi bara vände problemet runt, sedan nu vi behöver X utgångsstift för X knappar?
Ja, är detta där vi tar in SKIFT register. Skiftregister är en IC som får ett mönster av 8 bitar efter varandra (dvs, seriellt), och, när befallt, kommer att driva det mönstret till 8 utgångsstift samtidigt (dvs parallellt). Bara söka Instructables efter "skiftregister" och du hittar många tutorials. Skift register är snabb, lätt att använda, mycket billig och oerhört kraftfull. Men vi behöver fortfarande att kommandot skiftregister, och det tar 3 Arduino stift att göra så. Men är det underbara att du kan ansluta flera SKIFT register tillsammans i en kedja, och fortfarande köra hela kedjan med samma 3 Arduino stiften!
OK, så där gör allt detta får oss? Om vi kan lista ut hur man multiplex knappen ingångarna, kan vi använda en ingångsstift, och om vi kan utnyttja SKIFT register, vi behöver bara 3 utgångsstift. Hallå! Vi har tagit problemet ner till som kräver endast 4 stift totala att köra ett (teoretiskt) obegränsade antal knappar. Brytpunkten är 4: behöver du 4 eller mindre knappar, bara dyre-styrka det: Använd 4 input stift, eftersom denna strategi är onödigt komplicerade och inte vinna du något. Om du däremot behöver 5 eller, särskilt många fler, vinner du om du använder följande krets och kod.