Stap 3: Lezen van toetsaanslagen op AVR
Ik koos PD [2..7] en PB [0..1] voor mijn verbindingen. Uit de weg PD [0..1] als u wilt gebruik maken van de seriële communicatie op uw arduino of andere kloon. Ik had ook problemen met mijn pinnen zweven, dus ik vier gebruikte 10 k weerstanden te trekken van de kolom pinnen op grond. Uw AVR heeft waarschijnlijk interne pull-ups, maar de logica die ik al in mijn hoofd bedacht had werkte goed mee. U zult merken dat er is geen pin of aansluiting voor macht op het toetsenblok, in tegenstelling tot de binaire draaischijf switch ik sprak over in een vorige instructable.
Hier is het basisidee. Trek de pinnen van de vier kolom tot 0V. Stel de pinnen als input. Uw rij-pinnen als uitgang met eerste logica 0 waarden instellen Doorlopen van elke rij, een logica 1 te sturen naar de rij en de kolom pinnen te lezen. Als er een daar is, dan heb je een druk op de toets. Ook is van nota de kwestie van de belangrijkste ontdendering. Via experimenten vond ik een werkbare vertraging tarief, anders krijg je vele vele ToetsIndrukken (KeyPress) meldingen voor elke één ToetsIndrukken (KeyPress). Afhankelijk van de snelheid van uw MCU wellicht u tweek het een beetje, ook.
Ik heb een bestand dat ik schreef voor deze sectie om directe verbinding en lezing van het toetsenbord te tonen onderaan toegevoegd. Als u ervoor kiest om het te gebruiken zul je om het te wijzigen als ik naslagbibliotheken die ik schreef voor seriële communicatie. Anders dan dat, ik denk dat het moet over het algemeen goed. Hier is een pseudocode om te laten zien van de stroom:
ROWS set INPUT COLS set OUTPUT for (ever) { for each ROW from 0 to 3 { Set ROW HIGH if COL1 HIGH number pressed is ( 4 * ROW) else if COL2 HIGH number pressed is ( (4 * ROW) + 1) if COL3 HIGH number pressed is ( 4 * ROW) + 3) if COL4 HIGH number pressed is ( (4 * ROW) + 3) delay for debounce Set ROW LOW } }
N.B. De nummers zijn hun logische getallen van 0 tot 15, niet het werkelijke aantal op de toets waarop is gedrukt. Om dit te doen, moet u meer logica in uw "nummer ingedrukt is..."-sectie toe te voegen, of het toewijzen aan een matrix, die is slechts een paar stappen weg. Ten eerste, laten we eens kijken hoe te verminderen van het aantal I/O pinnen dit toetsenbord op onze microcontroller neemt.