Oto produkt. Rozumiem pomysł: te 16 przycisków używa matrycy 4x4. 4 linie dla wierszy, 4 linie dla kolumn, a mamy 8 kabli.
Ale:
Jak to działa bez jakiegokolwiek multipleksera?
Czy to może dokładnie wykryć naciśnięcia wielu przycisków? Nawet jeśli przyciski używają tego samego wiersza lub tej samej kolumny? Przykład: przyciski w pozycji (2,2) (2,3), (3,2) i (3,3) naciśnięte jednocześnie.
Jak to działa?
Odpowiedzi:
Tak nie jest. Wygląda na to, że tablica klawiszy ma tylko przełączniki, a być może niektóre diody nie są widoczne. Jednak lewa płyta wygląda tak, jakby miała na sobie procesor. Niemal na pewno multipleksowanie odbywa się w oprogramowaniu układowym.
Algorytm multipleksowania działa mniej więcej tak:
Powyższy proces powtarza się na tyle szybko, że wszystkie przyciski są sprawdzane w czasie, który nadal wydaje się natychmiastowy dla ludzkiego obserwatora. Ludzki limit „chwilowej” w tym kontekście wynosi około 50 ms. Nawet mikrokontroler z niższej półki może zeskanować klawiaturę 4x4 w znacznie krótszym czasie.
Prawdopodobnie tak. Jednym ze sposobów jest połączenie szeregowe diody z każdym przyciskiem. Mogą znajdować się na dolnej stronie planszy, którą pokazujesz. W przypadku diod powyższy algorytm po prostu działa.
Innym sposobem jest szeregowanie rezystorów z liniami i mierzenie ich napięcia analogowego. Nawet jeśli wiele przycisków powoduje zwarcie wielu wierszy / kolumn razem, możesz ostatecznie dowiedzieć się, które przyciski są naciskane. Wymaga to wejść A / D w mikro, a nie tylko wejść cyfrowych, jak w przypadku używania diod.
źródło
Bez diod ... dostaniesz fantomowe prostokąty.
Na przykład w twoim przykładzie (2,2) (2,3), (3,2) i (3,3); wybrałeś ironiczny przykład, wybierając prostokąt. Jeśli faktycznie naciśniesz wszystkie cztery, zadziała. Ale jeśli naciśniesz dowolne trzy rogi prostokąta, czwarty róg również będzie wyglądał na wciśnięty, nawet jeśli tak nie jest.
Ta klawiatura jest wyraźnie przeznaczona do wprowadzania danych z klawiatury, gdzie konwencja użytkownika to jedno naciśnięcie klawisza na raz. Zauważ, że na klawiaturze karty kredytowej stacji benzynowej nie ma żadnych klawiszy „Shift”.
Jeśli jednak ustawisz S1 na klawisz Shift, a S3 na Alt-Shift, tak że użytkownicy mogą rozsądnie przytrzymać oba, jednocześnie naciskając S13, wtedy S15 również wydaje się być wciśnięty.
źródło
Oto jak to zrobić bez ciągłego skanowania:
źródło
Zrobiłem to z asemblerem na gołych mikrokontrolerach AVR Atmel.
Dla uproszczenia: Wiersze klawiatury: użyj pinów Arduino 4,5,6 i 7 (piny AVR PD4, PD5, PD6 i PD7) Kolumny klawiatury: użyj pinów Arduino 8, 9, 10 i 11 (piny AVR PB0, PB1, PB2 i PB3 ) Ustaw wejścia pinów Row z włączonymi podciągnięciami. Zrób szpilki kolumny Wyjściowe i wyjściowe zera do nich. Włącz przerwania zmiany pinów na wszystkich pinach wierszy i kolumn. http://playground.arduino.cc/Main/PinChangeInterrupt Naciśnięcie przycisku na klawiaturze spowoduje pociągnięcie szpilki Row w dół. Procedura przerwania musi odczytać styki rzędu i ustalić, który styk jest niski. Górne 4 bity powinny wynosić trzy i jeden zero. Jeśli używasz 8-bitowej zmiennej uint8_t, możesz podzielić ją przez 16 lub (var >> 4), aby umieścić 4 bity w dolnych bitach liczby. Możesz użyć bitowego LUB | operacja z 240, aby ustawić górne 4 bity na 1s, a bitowa NIE ~ operacja, aby odwrócić wszystkie bity, więc masz tylko jeden zestaw bitów reprezentujący wiersz, w którym naciśnięto przycisk. Zapisz ten numer jako 0, 1, 2 lub 3.
Przełącz konfigurację pinów:
Ustaw wejścia szpilek kolumny z włączonymi podciągnięciami. Twórz piny wierszy Wyjściowe i wyjściowe z nich. Przeczytaj styki kolumn i znajdź, który styk jest niski. Wykonaj podobną manipulację przy użyciu tej wartości, ale nie musisz przesuwać liczby w prawo. Po var ^ 240 i ^ var masz jeden bit reprezentujący kolumnę, w której naciśnięto klawisz. Pamiętaj o wyłączeniu przerwań przed ponowną konfiguracją portów, ponieważ prawdopodobnie spowoduje to niepożądane przerwania. Być może będziesz musiał wyczyścić flagi przerwania przy opuszczaniu procedury przerwania, aby zapobiec zduplikowanej obsłudze przerwań.
źródło