Keypad 3 x 4

Een numeriek toetsenbord kun je gebruiken om de Raspberry Pi verschillende acties uit te laten voeren. Je kunt bijvoorbeeld na het indrukken van de combinatie *99# een reboot forceren.

In dit stappenplan sluiten we een numeriek keypad 3×4 aan op de Raspberry Pi en lezen we het uit met behulp van een Python script.

De methode die we hiervoor gebruiken is erg basic. We gebruiken per rij/kolom van het keypad één GPIO poort, wat niet erg efficiënt is.

Een betere, maar zeker niet de eenvoudigste methode is gebruik te maken van een I/O Expander, zoals de MCP23008 (I2C). Het alternatief hiervoor is de MCP23S08 (SPI), waardoor er meer vrije GPIO’s beschikbaar blijven.  Voor nu gaan we voor de eenvoudige methode en gebruiken we 7 GPIO headers.

De matrix
De matrix van het toetsenbord is als volgt opgebouwd; er zijn 3 kolommen en 4 rijen. De kruising van beide wordt door een numerieke toets verbonden. De aansluitingen (1 – 7) komen overeen met de pinnen van het toetsenbord. De buitenste twee soldeereilanden zijn niet aangesloten, we beginnen de telling bij het tweede gat.

Onderstaande tabel geeft aan welke pinnen met elkaar verbonden worden indien een toets ingedrukt wordt.

Uit bovenstaande informatie kunnen we het volgende constateren:
– Kolommen 1, 2, 3 zijn resp. pinnen 3, 1, 5
– Rijen 1, 2, 3, 4, zijn resp. pinnen 2, 7, 6, 4

Aansluittabel
Het toetsenbord kun je volgens de onderstaande tabel aansluiten op de GPIO interface van de Raspberry Pi. Deze komt overeen zoals de GPIO pinnen in het Python script. De pinnen van het toetsenbord zijn genummerd van links naar rechts met de toetsen naar de voorzijde geplaatst.

Python Script

Je kunt het script dat de toetsen uitleest downloaden met behulp van het wget commando:

wget https://raspberrytips.nl/files/keypad.py

Start het Python script met:

python keypad.py

Nadat het Python script is gestart kun je op de toetsen van het bord drukken, in het scherm zal de bijbehorende waarde worden weergegeven.
De toets die op het bord wordt ingedrukt wordt in het script opgeslagen in de variabele digit na het uitvoeren van kp.getKey():

digit = kp.getKey()

Je kunt de variabele digit gebruiken om deze toe te voegen aan een nieuwe reeks en er daarna een controle op uitvoeren. In het voorbeeld script wordt alleen de waarde van de variabele digit via het print commando op het scherm weergegeven.

Veel succes!