Lire une souris d'ordinateur avec un Arduino, c'est tout à fait possible. Mais attention: il faut que ce soit une souris de type PS/2: il s'agit des anciens modèles munis d'un connecteur de forme circulaire à six pins:
![]() |
Connecteur PS/2 |
![]() |
Numéro des broches du connecteur mâle |
Pin 1: Données (data) → Arduino 5
Pin 2: Pas utilisée
Pin 3: GND → Arduino GND
Pin 4: Vcc → Arduino 5V
Pin 5: Horloge (clock) → Arduino 6
Pin 6: Pas utilisée
Ne disposant pas d'un connecteur PS/2 femelle, j'ai simplement coupé le câble de la souris pour me débarrasser de ce connecteur mâle et brancher les 4 fils conducteurs directement aux entrées/sorties de l'Arduino.
Ensuite on installe la bibliothèque PS2 mais attention: à moins que vous utilisiez une version vraiment très ancienne du logiciel (IDE) Arduino, vous devrez modifier le fichier "ps2.h" de façon à remplacer la mention "WProgram.h" par la mention "Arduino.h".
Le sketch ci-dessous est inspiré de l'exemple qui accompagne la bibliothèque. La position de la souris (coordonnées x et y) ainsi que l'état de ses deux boutons s'affiche dans le moniteur série (il ne semble pas possible de détecter une rotation de la molette, toutefois).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/********************************************************** | |
* | |
* Affiche la position et l'état des boutons d'une souris PS/2 | |
* branchée à l'Arduino. | |
* Nécessite la biblothèque ps2 disponible ici: | |
* http://playground.arduino.cc/ComponentLib/Ps2mouse#.Uy4yTajozE1 | |
* | |
* http://electroniqueamateur.blogspot.com/2014/03/arduino-et-souris-ps2.html | |
* | |
************************************************************/ | |
#include <ps2.h> | |
// Connexions: Data: pin 5 Clock: pin 6 | |
PS2 mouse(6, 5); | |
// variables globales: la position de la souris | |
int positionx = 0; | |
int positiony = 0; | |
// Initialisation de la souris. | |
void mouse_init() | |
{ | |
mouse.write(0xff); // reset | |
mouse.read(); // ack byte | |
mouse.read(); // blank | |
mouse.read(); // blank | |
mouse.write(0xf0); // remote mode | |
mouse.read(); // ack | |
} | |
void setup() | |
{ | |
Serial.begin(9600); // pour l'affichage au moniteur serie | |
mouse_init(); | |
} | |
void loop() | |
{ | |
char mstat; | |
char mx; | |
char my; | |
// échange de données avec la souris | |
mouse.write(0xeb); // on demande à la souris de nous envoyer les données | |
mouse.read(); // ignore ack | |
mstat = mouse.read(); // état de la souris | |
mx = mouse.read(); // variation de x | |
my = mouse.read(); // variation de y | |
// calcul de la position absolue | |
positionx = positionx + mx; | |
positiony = positiony + my; | |
// affichage des résultats dans le moniteur série | |
Serial.print("X= "); | |
Serial.print(positionx, DEC); | |
Serial.print(" Y= "); | |
Serial.print(positiony, DEC); | |
if ( mstat & (1 << 0)) // si le bouton gauche est enfoncé | |
{ | |
Serial.print(" Clic gauche!"); | |
} | |
if ( mstat & (1 << 1)) // si le bouton droit est enfoncé | |
{ | |
Serial.print(" Clic droit!"); | |
} | |
Serial.println(); | |
} |
Référence: Arduino Playground
Yves Pelletier (Twitter: @ElectroAmateur)