Clavier 4x4 : test simple lignes/colonnes¶
Schéma électrique¶
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 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. Il en résulte
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