Stap 7: Het toetsenbord...
Voor degenen die nog nooit een array type toetsenbord gebruikt is dit hoe ze werken.
In een poging om het verminderen van het aantal draden die uit een toetsenblok voortkomen, worden geleiders ingedeeld in rijen en kolommen. Dit type van toetsenbord neemt sommige Kung Fu te laten werken, maar het vermindert ook het aantal pinnen dat u wilt gebruiken.
In een standaard bedrade toetsenblok hebt u één gemeenschappelijke draad en één draad voor elke knop. Dat zou in dit geval een totaal van 17 draden.
Bedraad toetsenbord die je hebt slechts 8 in een array. Hier is de vangst. De micro controllers heeft 4 pinnen instellen als uitgangen (rijen) en 4 pinnen als ingangen (de kolommen) die u alleen 4 knoppen tegelijk lezen kunt instellen.
"Wat???!!! Wat goed is dat ik mij een 12 knop toetsenbord gekocht!"
Slechts één van de rij is ingeschakeld op een moment. Bijvoorbeeld die de eerste rij is ingeschakeld, geeft dit kracht aan de ene kant van elke knop in de bovenste rij (1,2,3, A) als 1 wordt ingedrukt, dan je macht is die voortvloeien uit de uitgang 1 weet naar ingang 1. Als 2 is ingedrukt, dan weet je dat vermogen van uitgang 1 ingang 2 loopt er door. Als 3 is ingedrukt dan macht is die voortvloeien uit de uitgang 1 3 invoeren en als A wordt ingedrukt dan macht is die voortvloeien uit uitgang 1 om input 4.
Als u zich wenden uitgang zou 2 daarover zetten macht aan één kant van elk van de knoppen op de tweede rij (4,5,6, B) als 4 elektriciteitstromen van uitgang 2 naar ingang 1 is ingedrukt. Als 5 wordt ingedrukt elektriciteitstromen van uitgang 2 op ingang 2. Als 6 ingedrukt dan macht stromen van uitgang 2 op ingang 3 is en tot slot als B elektriciteitstromen van uitgang 2 op ingang 4 wordt gedrukt.
Hoe lees ik het hele toetsenbord dat u vragen. Een andere goede vraag sprinkhaan. Hier is hoe het werkt. De micro controller denkt heel snel, dus wat er gebeurt dit is. Rij 1 is ingeschakeld die is verbonden met 1,2,3, A en alle vier de ingangen zijn keek. Als geen macht is gevonden in één van de ingangen dan die rij is uitgeschakeld en vervolgens rij 2 is ingeschakeld die is aangesloten op 4,5,6, B. Dan alle vier ingangen zijn weer keek. Als geen macht is opgemerkt bij de ingangen die rij is uitgeschakeld en rij drie is ingeschakeld die is gekoppeld aan 7,8,9, zijn C en de ingangen opnieuw gekeken. Als geen macht wordt opnieuw genoteerd op de ingangen dan dat rij af en de vierde rij is ingeschakeld die is verbonden met *, 0, #, D. en opnieuw de ingangen worden gekeken om de macht. Als geen macht wordt opgemerkt dan rij 4 is uitgeschakeld en de processen begint helemaal opnieuw met rij 1.
* Belangrijk onderdeel - als u meer dan één rij inschakelt en een knop is ingedrukt, dan kunnen er twee mogelijkheden welke knop is ingedrukt, aangezien er meer dan één bron macht vanuit twee verschillende rijen. Zeggen zet u rij 1 en rij 2. Als u 1 druk zal dan macht blijken op ingang 1. Als u druk op knop 4 vervolgens ziet ingang 1 macht weer. Snap het?
Hier is waar het wordt cool. De micro controller beweegt zo snel, dat maakt niet uit hoe snel u druk op de knop de scan uw vinger op een knop ziet een bos van tijden voordat kunt u uw vinger uit de knop. In het programma schrijft u een indien verklaring. "Als mijn vinger op een knop wordt gezien dan stoppen met de scan en wachten op de knop om te worden vrijgegeven (dit houdt u van het invoeren van 5000 knop drukt voordat u de vinger kan opstaan.) Zodra uw vinger loslaat het vervolgens met behulp van de rij en kolomdiagram stelt een variabele om na te denken welk nummer werd ingedrukt. Ga dan terug aan het scannen van het toetsenbord weer wachten op een andere knop drukt. Een indien verklaring moet worden geschreven voor elke combinatie van rij en kolom.
Ik hoor sommigen van u zeggen "Er is een bibliotheek voor dat al gedaan, de zogenaamde keypad.h" dat klopt, er is, maar ik wilde niet voortdurend scannen voor een druk op de knop, alleen op bepaalde tijden en op deze manier is het iets gemakkelijker voor mij te controleren, of ten minste in mijn hoofd is. De scan is geschreven in een aparte functie van de lus functie Op bepaalde momenten tijdens de lus als ik wil zoeken naar persen sleutel dan stuur ik het programma naar die functie die de scan vervolgens één keer uitgevoerd. Ik heb geschreven mijn lus om vooruitgang in stappen en al de rest negeren. Dus als de lus rond komt de en die stap is actief dan de scan wordt aangedrongen. Meestal gemakkelijk squeezy.