Clavier matriciel 4x4¶
Description¶
Un clavier matriciel est un dispositif d'entrée mécanique multi-voies.
Principe¶
Le principe est celui de boutons poussoirs répartis en lignes x colonnes.
Modèles¶
Plusieurs modèles possibles (peu importe) :
Le clavier à touches rigides avec connecteur à souder :
https://www.gotronic.fr/art-clavier-economique-kb16m-4379.htm
Le clavier souple avec connecteur femelle :
Le montage¶
On connecte :
clavier | Pi Pico |
---|---|
L1 | 9 |
L2 | 8 |
L3 | 7 |
L4 | 6 |
C1 | 13 |
C2 | 12 |
C3 | 11 |
C4 | 10 |
Débrouillages dans l'interpréteur¶
# dict
broches = {"L1": 9, "L2": 8, "L3": 7,"L4": 6, "C1": 13, "C2": 12, "C3": 11,"C4": 10}
data.get("L1") #9
# variables
L1,L2,L3,L4=9,8,7,6
C1,C2,C3,C4=13,12,11,10
lignes=[L1,L2,L3,L4]
colonnes=[C1,C2,C3,C4]
# équivalent en 1 fois
lignes=[9,8,7,6]
colonnes=[13,12,11,10]
touches=[['1','2','3','A'],['4','5','6','B'],['7','8','9','C'],['*','0','#','D']]
Le code¶
- Les 4 broches de colonnes sont en sortie.
- Les 4 broches de lignes sont en entrée avec le rappel au plus activé (PULLUP)
Le principe consiste à mettre au niveau HAUT
les broches de colonnes par défaut puis à en mettre une à BAS
isolément et tester toutes les lignes dans ce cas.
A l'aide d'un timer, on "scanne" à intervalle régulier les broches de la carte MicroPython :
from machine import Pin, Timer
# déclarations
lignes=[9,8,7,6]
colonnes=[13,12,11,10]
touches=[['1','2','3','A'],['4','5','6','B'],['7','8','9','C'],['*','0','#','D']]
saisie=""
appui=0 # appui sur niveau bas
timer=Timer()
# initialisations
for pin in lignes:
Pin(pin,Pin.IN, Pin.PULL_UP) # met les lignes en entrée avec pullup actif
for pin in colonnes:
Pin(pin,Pin.OUT) # met les colonnes en sortie
Pin(pin).on() # colonnes HIGH par defaut
## code exécuté en boucle
def loop(timer): # il faut que loop soit bcp plus court que période rappel
global saisie # variable de saisie
for idxc, colonne in enumerate(colonnes):
Pin(colonne).off() # colonne courante à LOW
for idxl, ligne in enumerate(lignes):
if Pin(ligne).value()==appui :
touche=touches[idxl][idxc]
print(touche)
saisie=saisie+touche
print (saisie)
Pin(colonne).on() # remet colonne courante à HIGH
timer.init(freq=4, callback=loop) # rappelle loop
# frequence pas trop élevée vaut anti-rebond
Librairies¶
- Une librairie micropython pour clavier matriciel (keypad matrix) ici : https://github.com/BrendanSimon/micropython_experiments/tree/master/keypad
Le code ci-dessus montre qu'un librairie est loin d'être indispensable !