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