🛠 Souris USB : déplacer le curseur avec la bibliothèque Mouse
Objetivos
Llevar más lejos el USB nativo de la Leonardo utilizándola como ratón HID: un potenciómetro en A0 controla el desplazamiento horizontal del cursor del ordenador, y un botón envía un clic izquierdo. Comprenderás el principio de los informes HID periódicos (Mouse.move = desplazamiento relativo) y la trampa del pin A6 compartido con el pin digital 4.
Material
- 1 Arduino Leonardo + cable micro-USB
- 1 potenciómetro en A0 (5V/GND)
- 1 botón pulsador entre el pin 4 y GND (pull-up interno)
Código completo
#include <Mouse.h>
const uint8_t POT_PIN = A0; // A0-A5 : entrees 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
}
Verificación esperada
Tras los 3 s de espera, gira el potenciómetro: el cursor del ordenador se desplaza más rápido cuanto más nos alejamos del punto muerto (valor medio ~512). El botón envía un clic izquierdo mantenido/soltado. Mantén la vista en la zona del punto muerto para no perseguir el cursor sin fin.
Errores frecuentes
- Cursor infernal (runaway HID): si el código se ejecuta en bucle sin punto muerto, el cursor atraviesa la pantalla permanentemente y reprogramar la placa se vuelve difícil. Arduino recomienda probar primero con
Serial.printy mantener un botón de parada; en caso de pérdida de control, pulsa reset (el bootloader Caterina permanece activo ~8 s) y luego desenchufa. - Pin 4 usado también en analógico: A6 está multiplexado en el pin 4; no uses ambos a la vez.
- Confundir
Mouse.movecon un desplazamiento absoluto: es un delta relativo; el punto muerto del potenciómetro es indispensable. - Confundir
Serial(USB) ySerial1(pines 0/1) para la depuración: en la Leonardo, el monitor serie pasa por el puerto CDC, a veces ausente en un descriptor puramente HID.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinoclavier-auto-tape.inoArduinosouris-cercle.inoArduinotelecommande-media.inoArduinobouton-clic-souris.inoArduino