Le montage :
Port PS/2
Broche 1 (data) => Broche 4 de l’Arduino
Broche 2 (non connecté)
Broche 3 => GND de l’Arduino
Broche 4 => 5V de l’Arduino
Broche 5 (clock) => Broche 3 de l’Arduino
Broche 6 (non connecté)
Le code Arduino :
///////////////////////////////////////////////////////////////////
const int DATA_PIN = 4;
const int CLOCK_PIN = 3;
///////////////////////////////////////////////////////////////////
void setup() {
pinMode(DATA_PIN, INPUT);
// C'est le clavier qui génère l'horloge de synchronisation
pinMode(CLOCK_PIN, INPUT);
Serial.begin(9600);
}
///////////////////////////////////////////////////////////////////
void loop() {
Serial.println(dataRead(),HEX);
}
///////////////////////////////////////////////////////////////////
int dataRead() { // La trame est de 11 bits
/*
Si la pression est maintenue, le code est envoyé environ toutes
les 100 ms (make code). Quand la touche est relachée, le clavier
envoie le code F0 suivi du code de la touche relachée (break
code), sauf pour quelques touches particulières (voir le fichier
PDF correspondant ci-dessous).
*/
byte data = 0;
while (digitalRead(DATA_PIN) && digitalRead(CLOCK_PIN));
// 1 bit de start : La ligne de transmission des données est
// passée au niveau bas et un signal d'horloge est engendré :
while (digitalRead(CLOCK_PIN));
while (!digitalRead(CLOCK_PIN));
// 8 bits de données (bit de poids faible (LSB) en premier)
for (int d=0; d<=7; d++) {
// Les données sont valables sur le front descendant
// du signal d'horloge
while (digitalRead(CLOCK_PIN));
data = data | digitalRead(DATA_PIN) << d;
while (!digitalRead(CLOCK_PIN));
}
// 1 bit de parité
while (digitalRead(CLOCK_PIN));
while (!digitalRead(CLOCK_PIN));
// 1 bit de stop
while (digitalRead(CLOCK_PIN));
while (!digitalRead(CLOCK_PIN));
return data;
}
///////////////////////////////////////////////////////////////////
Les codes obtenus avec le programme Arduino ci-dessus :
Clavier PS/2 (fichier PDF)
