Joystick Mouse Control

Usando la biblioteca Mouse, puede controlar el cursor de la pantalla de un ordenador con un Arduino Leonardo, Micro, o Due. Este ejemplo particular utiliza un pulsador para activar y desactivar el control del ratón con un joystick.
El movimiento del cursor del Arduino es siempre relativo. Así que cada vez que se lee la entrada analógica, la posición del cursor se actualiza con respecto a su posición actual.
Dos entradas analógicas que van 0 a 1023 se convierten a rangos de -12 a 12. El programa asume que los valores de la palanca de mando en reposo es alrededor de la mitad de la gama, pero varían dentro de un umbral.
El pulsador le permite alternar el control del ratón y el  apagado. Como una opción puede conectar un LED de estado al pin 5 que se ilumina cuando el Arduino está controlando el ratón. Un segundo pulsador se puede conectar con otra resistencia pulldoen de 10 k ohm (a GND) a D3 para actuar como el botón izquierdo del ratón.
Nota: Cuando se utiliza el comando Mouse.move (), el Arduino toma el control del cursor de su ordenador! Para asegurar que no pierde el control de su ordenador mientras se ejecuta un programa con esta función, asegúrese de configurar un controlador antes de llamar a Mouse.move (). Este programa incluye un pulsador para cambiar el estado de control del ratón, por lo que se puede activar y desactivar el control del ratón.

Hardware Requerido

  • 1 Placa Arduino Leonardo, Micro, o Due 
  • 1 joystick de 2 ejes
  • 1 Pulsador (posiblemente integrado en el joystick)
  • 1 LED
  • 1 Resistencia de 220 ohm 
  • 1 Resistencia de 10 k ohm (si es necesaria como pulldown)

Circuito

Conectar la placa Leonardo al ordenador con un cable micro-USB. El pulsador está conectado al pin 6. Si está utilizando una parte como el shield de Joystick se muestra a continuación, puede que no necesite una resistencia pulldown. El eje x en el joystick está conectado al pin  analógico 0, el eje y es el pin analógico 1.


Esquema


Código

/*
  JoystickMouseControl

 Controla el ratón con un Joystick en un Arduino Leonardo, Micro o Due.
 Usa un pulsador para activar y desactivar el control del ratón, y
 un segundo pulsador para click del botón izquierdo del ratón

 Hardware:
 * 1 Joystick de 2 ejes conectado a los pines A0 y A1
 * 1 Pulsador conectado a los pines D2 y D3

 El movimiento del ratón es relativo. Este programa lee dos
 entradas analógicas en el rango 0 a1023 (p menos en cada extremo)
 y traslada este rango de  -6 to 6.
 El programa supone que los valores del joystick en reposo están alrededor de la mitad de la gama, pero que varían dentro de un umbral.

 ADVERTENCIA: Cuando se utiliza el comando Mouse.move (), el Arduino toma el control de su ratón! Asegúrate de que tienes el control antes de utilizar el comando. Este programa incluye un pulsador para cambiar el estado de control del ratón, por lo que se puede activar y desactivar el control del ratón.

 creado 15 Sepiembre 2011
 actualizado 28 Marzo 2012
por Tom Igoe

Este código es de dominio público

 */


#include "Mouse.h"


// configura los números de pin para el pulsador, los ejes del joystick y el LED:

const int switchPin = 2;      // activa y desactiva el control del ratón
const int mouseButton = 3;    // pin de entrada para el pulsador del ratón
const int xAxis = A0;         // eje X del joystick
const int yAxis = A1;         //  eje Y  del joystick
const int ledPin = 5;         // LED de control del ratón

// parámetros para la lectura del joystick:

int range = 12;               // rango de salida del movimiento X o Y 
int responseDelay = 5;        // response delay of the mouse, in ms
int threshold = range / 4;    // umbral de reposo
int center = range / 2;       // valor de posición de reposo

boolean mouseIsActive = false;    // si o no para controlar el ratón

int lastSwitchState = LOW;        // estado anterior del pulsador

void setup() {

  pinMode(switchPin, INPUT);       // pin del pulsador
  pinMode(ledPin, OUTPUT);         // pin del LED 
  // toma el control del ratón:
  Mouse.begin();
}

void loop() {

  // lee los pulsadores:
  int switchState = digitalRead(switchPin);
  //si ha cambiado y es HIGH, cambiar el estado del ratón:
  if (switchState != lastSwitchState) {
    if (switchState == HIGH) {
      mouseIsActive = !mouseIsActive;
      // enciende el LED para indicar el estado del ratón:
      digitalWrite(ledPin, mouseIsActive);
    }
  }
  // almacena el estado del pulsador para la próxima comparación:
  lastSwitchState = switchState;

  // lee y escala los dos ejes:

  int xReading = readAxis(A0);
  int yReading = readAxis(A1);

  // if the mouse control state is active, move the mouse:

  if (mouseIsActive) {
    Mouse.move(xReading, yReading, 0);
  }

  // lee el botón del ratón y clic o no:

  //si el pulsador está activado:
  if (digitalRead(mouseButton) == HIGH) {
    //si no está activado, pulsarlo:
    if (!Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.press(MOUSE_LEFT);
    }
  }
  // de lo contrario el botón del ratón no está presionado:
  else {
    // si el pulsador está activado, soltarlo:
    if (Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.release(MOUSE_LEFT);
    }
  }

  delay(responseDelay);

}

/*
  lee un eje (0 o 1 para x o y) y escala el
 rango de la entrada analógica a un rango de 0 s <range>
 */


int readAxis(int thisAxis) {

  // lee la entrada analógica:
  int reading = analogRead(thisAxis);

  // mapea la lectura de la gama de entrada analógica al rango de salida:

  reading = map(reading, 0, 1023, 0, range);

  // si la lectura está fuera de

  // umbral de la posición de reposo, utilizar esto:
  int distance = reading - center;

  if (abs(distance) < threshold) {

    distance = 0;
  }

  // devuelve la distancia de este eje:

  return distance;
}




No hay comentarios:

Publicar un comentario