Kurs Arduino #13: Obsługa klawiatury matrycowej

kurs13Jak wiadomo, każde dzisiejsze urządzenie elektroniczne posiada przynajmniej klawiaturę przy pomocy, której możemy wprowadzać pewne informacje, dane. W dzisiejszym poradniku przedstawię jak wykorzystywać klawiaturę matrycową w połączeniu z Arduino, oraz pokażę przykłady jej wykorzystania. Zapraszam !

 

 

 

 

Spis treści:
1.Jak działa klawiatura matrycowa ?
2.Podstawowe funkcje
3. Przykładowy program
4.Przykład wykorzystania klawiatury

Co będziemy potrzebować:

  • Klawiatura matrycowa (możesz zrobić taką jak ja wersja THT : wersja SMD)
  • Arduino
  • 1x dioda RGB
  • 1x rezystor 220 ohm
  • 1x zestaw przewodów połączeniowych
  • biblioteka Keyboard

1.Jak działa klawiatura matrycowa ?

KBD

Jak popatrzymy na powyższe zdjęcie to możemy zauważyć że tego typu klawiatura ma połączone przyciski w rzędy i kolumny, w taki sposób że przyciśnięcie jednego przycisku spowoduje zwarcie dwóch linii- pionowej (kolumny) i poziomowej (rzędy). Od razu narzuca nam się wada takiej klawiatury- nie można wcisnąć w jednym momencie więcej niż jednego przycisku ponieważ program nie rozpozna które dokładnie zostały wciśnięte. Następnie te kolumny i rzędy podłączamy do Arduino. I to jest cała zasada działania klawiatury matrycowej ;)

2.Podstawowe funkcje

Jak w każdym programie używającym biblioteki musimy dodać ją do programu

Następie podajemy informacje jakie wymiary ma nasza klawiatura (ile kolumn na ile rzędów) w postaci stałej, liczby całkowitej:

W następnym kroku tworzymy tablicę dwuwymiarową, w której zawieramy informacje na temat, pod jakim przyciskiem kryje się jaki znak. Do tej tablicy wpisujemy jakie ona ma wymiary w postaci liczbowej czyli np.  char klawiatura[4][4] co oznacza, że ma 4 wiersze i 4 kolumny (dokładnie w tej kolejności). Możemy równie dobrze zamiast cyfr wpisać stałe. Zatem char klawiatura [wiersze][kolumny], będzie również poprawne i wtedy informacje o wielkości klawiatury są zaciągane z wyżej wymienionych stałych. Zatem nasza klawiatura wygląda następująco:

Ze względu na to, że posiadam klawiaturę 4×4 to dokładnie taki rozkład klawiszy sobie przyjąłem. Między apostrofami wstawiłem znaki jakie klawiatura ma zwracać po wciśnięciu danego przycisku. Zatem klikając lewy górny przycisk otrzymamy znak 1, a jak prawy dolny to D.

Następnie musimy ustawić pinout naszej klawiatury, czyli jej sposób podłączenia do Arduino:

Zatem pierwszy wiersz podłączamy do pinu 9., a 4. wiersz do pinu 6. Pierwsza kolumna do 5. pinu, a ostatnia kolumna do 2. pinu.
Teraz pozostało już nam „utworzyć” klawiaturę przy pomocy funkcji z biblioteki:

Teraz, gdy już nasza klawiatura jest skonfigurowana to musimy w jakiś sposób odczytać wciśnięty klawisz. Z pomocą idzie nam funkcja keypad.getKey():

Jak widać sama funkcja nic nie robi. Musimy jej przypisać jakąś zmienną. W tym przypadku musimy się posłużyć zmienną char, do której będzie zwracana wartość wciśniętego przycisku. Oprócz tej funkcji jest jeszcze parę innych:

Funkcja ta oczekuje na wciśnięcie określonego przycisku. Wadą tej funkcji jest to, że blokuje cały program, do momentu, aż ta funkcja zostanie spełniona.

Funkcja ta dodaje do programu ile czasu musi być wciśnięty przycisk, aby został on wykryty jako wciśnięty. zmienna czas musi być w postaci unsigned int. Funkcję tą umieszczamy w pętli startowej programu

Funkcja ta dodaje czas przez, który przycisk ma być wciśnięty, aby został on wykryty jako wciśnięty. Funkcja ta niweluje przypadek, w którym drgania mikrostyków powodują wykrycie przycisku jako wciśnięty. Tutaj również zmienna czas musi być wyrażona jako unsigned int. Funkcję tą umieszczamy w pętli startowej programu. Ta funkcja różni się od poprzedniej !

3. Przykładowy program

Program będzie prosty, bo będziemy chcieli wyświetlić w konsoli, jaki przycisk został wciśnięty.

kurs 13.1

Jak wcześniej opisywałem. Najpierw tworzymy dwie stałe, wiersze i kolumny, w których będzie przechowywana wartość kolumn i wierszy klawiatury. Następnie tworzymy mapę klawiatury przy pomocy tablicy dwuwymiarowej. Potem tworzymy pinout, przy pomocy którego podłączymy klawiaturę do Arduino i tworzymy klawiaturę. Teraz w pętli głównej programu, tworzymy zmienną char przyciski, w której będzie przechowywany znak wciśniętego przycisku. Przy pomocy funkcji warunkowej if() sprawdzamy czy do zmiennej char trafił jakiś znak z klawiatury. Jeżeli znak się pojawił to wyświetlamy go w terminalu.

Po wgraniu programu powinniśmy otrzymać taki efekt: