Stap 1: Het Thinking Through
Dus, laten we denken dit door.
Als je kijkt naar de tutorial hierboven gegeven, ziet u dat de brute kracht oplossing is voor elke knop moeten we één macht pin, één afvoer door middel van een 10 KOhm weerstand en één invoer pin. De pin van de macht en afvoer kunnen worden gedeeld met alle knoppen, maar in het circuit komt er te staan, wij niet krijgen rond het feit dat we een afzonderlijke invoer pin nodig voor elke individuele knop. Als onze toepassing 10 knoppen vereist, moeten we 10 Arduino pinnen. Ouch.
Als ik gaf de zaak nadenken, echter het bij me opgekomen dat dit vergelijkbaar met een probleem in een ander project dat ik had gewerkt was, namelijk het aanpakken van meerdere LED display cijfers, iets we overal uit magnetrons aan wekkers zien. Zo gelieve te hebben geduld met me terwijl ik dwaal af in LED-land voor een moment.
In de meeste circuits die bestaan uit meerdere LED cijfers, is elk cijfer niet geactiveerd met een constante stroom. Integendeel, de controller ingesteld van het segment-patroon voor een bepaald doel-cijfer (bijvoorbeeld het patroon waardoor het aantal "5"), en uitgangen tegelijk dat patroon aan alle cijfers in het display. Vervolgens stelt het patroon voor het volgende cijfer, uitgangen, enz., fietsen door alle cijfers en voor altijd herhalen.
Maar, je kunt je afvragen, hoe is het mogelijk, dan, om te zien van verschillende nummers op elk cijfer? Dit is mogelijk omdat de controller maakt gebruik van transistoren het cijfer doel inschakelen en uitschakelen alle anderen vóór het uitvoeren van het patroon.
Bijvoorbeeld, laten we zeggen we hebben een 4-cijferige LED display (elk cijfer genoemd van A, B, C en D), en we willen de nummers "5678" Toon op dit scherm. Hier is wat er gebeurt:
- de controller A ingeschakeld en draait cijfers B, C en D af
- het output het patroon voor het nummer "5" aan alle cijfers
- het blijkt op B en A, C, D af
- uitgangen patroon voor nummer "6"
- draait op C en A, B, D af
- uitgangen "7"
- draait op D en A, B, C van
- uitgangen "8"
- herhalingen uit stap 1
Hierdoor kan de elektronica betrokken veel eenvoudiger en goedkoper. En het werkt alleen omdat de controller en de transistors annuleertekenzwenking cijfers op en af zo ongelooflijk snel dat elk afzonderlijk segment op elk cijfer tijd eigenlijk niet hoeft te verdwijnen voordat het wordt vernieuwd weer. Dit proces staat bekend als "multiplexing" of "knipperen", en u kunt rijden, theoretisch, een willekeurig aantal cijfers van de LED. (In werkelijkheid is er echter een limiet: als u meer en meer cijfers toevoegt, zult u opmerken dat zij beginnen te flikkeren, omdat de controller kan ze niet snel genoeg vernieuwen. Uiteindelijk, wordt deze flikkering zo slecht dat je bent niet meer kunnen herkennen van de getallen.)
OK, terug naar knop land.
Ik zag een verbinding tussen de LED multiplexing boven en dit meerdere knoppen probleem: wat als wij kon het multiplexen van de knoppen op een bepaalde manier? In plaats van de uitvoer multiplexing, zouden we de input multiplex: Dit betekent dat wij zou al maar één knop uitschakelen, die knop omhoog/omlaag staat detecteren, opslaan en vervolgens doe hetzelfde voor de knop volgende, enz., fietsen door alle knoppen zeer, zeer snel. Aangezien slechts één knop actief op een gegeven moment is, en de controller weet welke één het is, kunnen we de dezelfde, één invoer pin gebruiken voor een willekeurig aantal knoppen.
Klinkt goed, maar houden op: we moeten nog steeds om elke knop, één filter tegelijk te activeren. Zo, nog niet wij net draaide het probleem rond, aangezien nu we moeten X output pinnen voor X knoppen?
Nou, is dit waar we brengen in shift registers. Het shift register is een IC die een patroon van 8 bits ontvangt na elkaar (dat wil zeggen, serieel), en, toen gebood, zal rijden dat patroon naar 8 output pinnen tegelijk (dat wil zeggen, parallel). Gewoon zoeken Instructables naar "shift register" en u vindt veel tutorials. Shift registers zijn snel, makkelijk te gebruiken, zeer goedkoop en enorm krachtig. Maar we hoeven nog tot bevelhebber van het shift register, en duurt 3 pinnen van de Arduino te doen. Echter, de prachtige deel is dat u kunt meerdere shift registers met elkaar in een keten verbinden, en nog steeds de hele keten met dezelfde 3 pins Arduino rijden!
OK, dus waar komt alles wat dit ons krijg? Als we hoe de knop ingangen multiplex achterhalen kunnen, kunnen we één invoer pin gebruiken, en als we shift registers hefboomeffect kunnen, we hoeven alleen maar 3 output pinnen. Hey! We hebben het probleem tot het vereisen van slechts 4 pins totale om te rijden een (theoretisch) onbeperkt aantal knoppen gebracht. Het breekpunt is 4: als u 4 moet of minder knoppen, gewoon brute kracht het: gebruik 4 input pinnen, aangezien deze aanpak onnodig complex is en u iets niet winnen. Als, echter, moet u 5 of, met name veel meer, wint u als u de volgende circuit en de code gebruiken.