Nous avons eu un tp sur l'arduino, le principe était de faire fonctionner ce clavier avec l'arduino :
1. Problématique
Comment faire fonctionner le clavier matriciel ?
2. Problèmes rencontrés
-
Déterminer les entrées/sorties du clavier matriciel (x0,x1,x2,x3,y0,y1,y2,y3)
-
Cela à été possible grâce aux fonctions :
-
PinMode(), pour déterminer si la pin est une entrée ou une sortie
-
DigitalWrite() pour modifier la valeur de la tension de la pin
-
DigitalRead() pour lire la valeur de la tension de la pin
-
PinMode(), pour déterminer si la pin est une entrée ou une sortie
-
Cela à été possible grâce aux fonctions :
-
Résistance de type "Pull-up" :
-
Lorsqu'on utilise une entrée numérique, il est important de
s'assurer que le potentiel de l'entrée « au repos » est bien celui
auquel on s'attend. En effet, si on laisse
l'entrée « libre », c'est-à-dire câblée à rien, le potentiel
qu'elle prendra ne sera pas nécessairement 0 V. On parle alors de
potentiel flottant car l'électricité statique
ambiante ou les perturbations électromagnétiques peuvent
faire apparaitre des valeurs très fluctuantes. Pour s'assurer du bon
fonctionnement, l'on utilise une liaison protégée par une
résistance qui va « tirer vers le haut » (5 V) ou « tirer
vers le bas » (0 V) le potentiel au repos, comme une sorte d'élastique.
On utilise en général une
résistance de 10 kOhms.
-
dans un montage « tiré vers le haut » ou « pull-up », le potentiel de l'entrée au repos est 5 V.
-
dans un montage « tiré vers le bas » ou « pull-down », le potentiel de l'entrée au repos est 0 V.
-
-
Si la broche est configurée en ENTREE, écrire un niveau HAUT sur cette broche a pour effet d'activer la résistance interne de 20K de "rappel au plus" (pullup) sur cette
broche.
-
Lorsqu'on utilise une entrée numérique, il est important de
s'assurer que le potentiel de l'entrée « au repos » est bien celui
auquel on s'attend. En effet, si on laisse
l'entrée « libre », c'est-à-dire câblée à rien, le potentiel
qu'elle prendra ne sera pas nécessairement 0 V. On parle alors de
potentiel flottant car l'électricité statique
ambiante ou les perturbations électromagnétiques peuvent
faire apparaitre des valeurs très fluctuantes. Pour s'assurer du bon
fonctionnement, l'on utilise une liaison protégée par une
résistance qui va « tirer vers le haut » (5 V) ou « tirer
vers le bas » (0 V) le potentiel au repos, comme une sorte d'élastique.
On utilise en général une
résistance de 10 kOhms.
-
Système anti-rebond :
-
Au niveau microscopique, lorsque l'on appuie sur le bouton
poussoir, le contact n'est pas immédiat et le bouton poussoir, avant de
se stabiliser, "rebondit".
-
La conséquence est une suite rapide de changement d'état (
"HAUT" / "BAS") que le programme considérera comme autant d'appuis
successifs. D'après mes essaies il faut environs 150ms pour
un "filtre anti rebond" efficace.
-
Au niveau microscopique, lorsque l'on appuie sur le bouton
poussoir, le contact n'est pas immédiat et le bouton poussoir, avant de
se stabiliser, "rebondit".
3. Code source
/*
* Clavier matriciel avec anti-rebond
* @File : Clavier_matriciel
* @Date : 02/12/11
*/
// Je met mes caractères en variables global
char chaine[4][4]={'A','0','B','C',
'7','8','9','D',
'4','5','6','E',
'1','2','3','F'};
void setup() {
// On initialise les pins
pinMode(11, OUTPUT); // y3
pinMode(10, OUTPUT); // y2
pinMode(9, OUTPUT); // y1
pinMode(8, OUTPUT); // y0
pinMode(7, INPUT); // x3
pinMode(6, INPUT); // x2
pinMode(5, INPUT); // x1
pinMode(4, INPUT); // x0
//On "active" la résistance interne
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
}
void loop() {
for (int Y = 8; Y <=11; Y++)
{
// On met les pin outpout à 5v
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
// On met la pin étudié à 0V
digitalWrite(Y, LOW);
for (int X = 4; X <=7; X++)
{
// Si j'appuie sur une touche
if(digitalRead(X) == LOW) {
Serial.println(chaine[X-4][Y-8]);
delay(200);
} //FSI
}// for X
} // For Y
}
Aucun commentaire:
Enregistrer un commentaire