🛠 Souris USB : déplacer le curseur avec la bibliothèque Mouse
Objectifs
Pousser plus loin le USB natif de la Leonardo en l'utilisant comme souris HID : un potentiomètre sur A0 pilote le déplacement horizontal du curseur de l'ordinateur, un bouton envoie un clic gauche. Vous comprendrez le principe des rapports HID périodiques (Mouse.move = déplacement relatif par rapport) et le piège du brochage A6 partagé avec la broche numérique 4.
Matériel
- 1 Arduino Leonardo + câble micro-USB
- 1 potentiomètre sur A0 (5V/GND)
- 1 bouton poussoir entre la broche 4 et GND (pull-up interne)
Code complet
#include <Mouse.h>
const uint8_t POT_PIN = A0; // A0-A5 : entrées analogiques classiques
const uint8_t CLICK_PIN = 4; // attention : A6 est aussi sur la broche 4
void setup {
pinMode(CLICK_PIN, INPUT_PULLUP);
Mouse.begin;
delay(3000); // fenetre de garde : reprendre la main sur la souris hote
}
void loop {
int pot = analogRead(POT_PIN); // 10 bits : 0..1023
int dx = map(pot, 0, 1023, -10, 10); // vitesse par rapport HID
if (dx != 0) {
Mouse.move(dx, 0, 0); // deplacement X (Y, molette = 0)
}
if (digitalRead(CLICK_PIN) == LOW) {
if (!Mouse.isPressed(MOUSE_LEFT)) Mouse.press(MOUSE_LEFT);
} else {
if (Mouse.isPressed(MOUSE_LEFT)) Mouse.release(MOUSE_LEFT);
}
delay(20); // cadence ~50 Hz, largement suffisante
}
Vérification attendue
Après les 3 s de garde, tournez le potentiomètre : le curseur de l'ordinateur se déplace d'autant plus vite qu'on s'éloigne du point mort (valeur médiane ~512). Le bouton envoie un clic gauche maintenu/relâché. Gardez un œil sur la zone de point mort pour ne pas poursuivre le curseur sans fin.
Erreurs fréquentes
- Curseur infernal (runaway HID) : si le code tourne en boucle sans point mort, le curseur traverse l'écran en permanence et reprogrammer la carte devient pénible. Arduino recommande de tester d'abord avec
Serial.printet de garder un bouton d'arrêt ; en cas de perte de contrôle, appuyez sur reset (le bootloader Caterina reste actif ~8 s) puis débranchez. - Broche 4 utilisée aussi en analogique : A6 est multiplexée sur la broche 4 ; ne pas faire les deux à la fois.
Mouse.movepris pour un déplacement absolu : c'est un delta relatif par rapport ; le point mort du potentiomètre est indispensable.- Confondre
Serial(USB) etSerial1(broches 0/1) pour le débogage : sur Leonardo, le moniteur série passe par le port CDC, parfois absent d'un descripteur purement HID.
Autres tutoriels pour cette carte
- Faire clignoter la LED intégrée (broche 13)
- Bouton et console série : Serial (USB) vs Serial1 (broches 0/1)
- Lire un capteur analogique : potentiomètre et ADC 10 bits
- Clavier USB : taper du texte avec la bibliothèque Keyboard
- Asservir un servo moteur avec un potentiomètre (PWM)
- Programmer aux registres : interruption Timer/Counter1
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinoclavier-auto-tape.inoArduinosouris-cercle.inoArduinotelecommande-media.inoArduinobouton-clic-souris.inoArduino