Usar codificador rotatorio como raton

Estoy probando el codificador rotatorio y se me ha ocurrido usarlo como ratón así que estoy combinado códigos y probando pero si le activo el modo ratón parece que no hace caso al resto y comprobación del comprobador...

Seguro que es problema de sintaxis, pongo codigo:

#include "Mouse.h"    // incluye libreria Mouse

#define IZQUIERDA 4    // constante para identificar pulsador izquierdo en pin 4
#define DERECHA 5    // constante para identificar pulsador derecho en pin 5

#define RANGO 5        // rango para cantidad de movimiento
#define DEMORA 10    // constante para demora entre lecturas de pulsadores

int A = 2;             //variable A a pin digital 2 (DT en modulo)
int B = 3;              //variable B a pin digital 3 (CLK en modulo)

int ANTERIOR = 50;        // almacena valor anterior de la variable POSICION

volatile int POSICION = 50;    // variable POSICION con valor inicial de 50 y definida
                // como global al ser usada en loop e ISR (encoder)
void setup() {
  pinMode(IZQUIERDA, INPUT_PULLUP);    // pin 4 como entrada con resistencia de pull-up
  pinMode(DERECHA, INPUT_PULLUP);    // pin 5 como entrada con resistencia de pull-up
  Mouse.begin();            // inicio de emulacion de mouse
  pinMode(A, INPUT);        // A como entrada
  pinMode(B, INPUT);        // B como entrada

  Serial.begin(9600);        // incializacion de comunicacion serie a 9600 bps

  attachInterrupt(digitalPinToInterrupt(A), encoder, LOW);// interrupcion sobre pin A con
                              // funcion ISR encoder y modo LOW
  Serial.println("Listo");    // imprime en monitor serial Listo
}

void loop() {
  if (digitalRead(IZQUIERDA) == LOW) {    // si se ha presionado el pulsador izquierdo
    Mouse.move(-RANGO, 0, 0);        // funcion para desplazar a izquierda valor de rango
  }
  
  if (digitalRead(DERECHA) == LOW) {    // si se ha presionado el pulsador derecho
    Mouse.move(RANGO, 0, 0);        // funcion para desplazar a derecha valor de rango
  }

  delay(DEMORA);            // demora de 10 mseg.
  if (POSICION != ANTERIOR) {    // si el valor de POSICION es distinto de ANTERIOR
    Serial.println(POSICION);    // imprime valor de POSICION
    ANTERIOR = POSICION ;    // asigna a ANTERIOR el valor actualizado de POSICION
  }
}

void encoder()  {
  static unsigned long ultimaInterrupcion = 0;    // variable static con ultimo valor de
                        // tiempo de interrupcion
  unsigned long tiempoInterrupcion = millis();    // variable almacena valor de func. millis

  if (tiempoInterrupcion - ultimaInterrupcion > 5) {    // rutina antirebote desestima
                            // pulsos menores a 5 mseg.
    if (digitalRead(B) == HIGH)            // si B es HIGH, sentido horario
    {
      POSICION++ ;                // incrementa POSICION en 1
    }
    else {                    // si B es LOW, senti anti horario
      POSICION-- ;                // decrementa POSICION en 1
    }

    POSICION = min(100, max(0, POSICION));    // establece limite inferior de 0 y
                        // superior de 100 para POSICION
    ultimaInterrupcion = tiempoInterrupcion;    // guarda valor actualizado del tiempo
  }                        // de la interrupcion en variable static
}

Decir que es un ATmega32U4 y que el código es pegado de dos distintos...
si se ha hablado de esto ya poned una URL porfa

Moderador
Por favor edita tu post usando etiquetas de código.

Normas del foro

ok, editando...

Lo que me pasa es que el pc lo reconoce como ratón, si quito la parte del ratón y dejo la prueba del rotatorio va perfe, pero si le añado el ratón la ignora totalmente, y no sé el orden que tiene que llevar y si una cosa anula a la otra, por ejemplo cargarle el modo ratón ya hace que el ATmega32U4 ya deje de serlo y se convierta en un ratón...

Con lo cual me lleva a mi siguiente pregunta: ¿como hago para que me interprete las señales de codificador como ejes de ratón? un codificador por eje mas uno para el scroll

Pregunto, porque no lo puedo probar ni lo he hecho ¿si está en modo mouse para que lo serial print? va a recibir órdenes por el puerto serie que no son compatibles, y no creo que si tienes el IDE abierto capturando el puerto serie otra cosa lo pueda leer.

No se demasiado sobre este aspecto, lo que sí sé es que para que mi máquina pueda capturar los serial print en un archivo para leerlos luego (un proceso que genera como 500 líneas en menos de un minuto y no puedo leerlas en el IDE), tuve que cerrar el IDE, o uno u otro

¿No será ese el caso?

entonces teoricamente el codificador rotatorio funciona pero no lo que no vá es lo que me muestra en pantalla...
probaré con un eje y si funciona paso a los otros dos

No estoy seguro, te digo lo que me ha pasado a mi, en otro ámbito