¿Es posible crear un dispositivo USB que altere los datos del mouse sobre la marcha?

7

Tengo un amigo que está luchando para encontrar controladores / fabricantes de mouse que admitan varias opciones para la dislexia. Invertir los ejes X e Y es una característica simple que la mayoría de los programas y controladores desconocen.

Se me ocurrió que podría ser posible construir un pequeño dispositivo USB (similar a una unidad de disco o un adaptador PS / 2) en el que un usuario podría conectar un mouse USB y, con un par de interruptores DIP, invertir uno o ambos ejes.

Tengo una familiaridad básica con la programación (C # / C +) y la electrónica, pero no estoy seguro de si existe un protocolo estándar para ratones USB.

Prefiero evitar el uso de un convertidor en serie (aunque sé que tiene un protocolo más o menos estándar). ¿Alguien ha utilizado ratones USB con un proyecto electrónico personalizado o puede explicar si es posible construir un adaptador de USB a USB para invertir el movimiento?

    
pregunta JYelton

6 respuestas

2

Si bien esto está probablemente lejos de ser la solución más barata o elegante, es una que le dará una gran flexibilidad.

Una Arduino computadora de una sola placa puede ver a una computadora Windows como a Human Interface Device (HID), en otras palabras, un mouse. Sin embargo, no se limita a los ratones; Los teclados y otros dispositivos también son HID.

Puede conectar un mouse serial directamente al puerto serial de Arduino o si prefiere usar un mouse USB puede conectarlo a Arduino a través de un Protector de host USB .

Ya que puedes programar el Arduino en C, puedes traducir cualquier tipo de entradas del mouse a cualquier comando que desees para la PC. Por ejemplo, podría traducir un triple clic del botón derecho del ratón en un comando de entrada del teclado, el cielo es el límite.

    
respondido por el JonnyBoats
6

¿Qué pasa con una solución de software?

En Windows, puede interceptar las acciones del mouse con una aplicación, que puede ser tan simple como this < a href="http://www.autohotkey.com/"> AutoHotKey script:

#NoEnv
SetBatchLines -1
Process Priority,,R

BlockInput Mouse        ; user mouse input is ignored during MouseMove
CoordMode Mouse, Screen ; absolute coordinates
SysGet m, Monitor       ; get the screen edges
mLeft += 1, mRight -= 2, mTop += 1, mBottom -= 2
SetMouseDelay -1        ; fastest action

MouseGetPos x0, y0      ; get initial mouse pointer location
SetTimer WatchMouse, 1  ; run the subroutine fast (10..16ms)
Return

WatchMouse:
   MouseGetPos x, y     ; get current mouse position
   x0 += 2*(x0-x), x0 := x0 < mLeft ? mLeft : (x0 > mRight  ? mRight  : x0)
   y0 += 2*(y0-y), y0 := y0 < mTop  ? mTop  : (y0 > mBottom ? mBottom : y0)
   MouseMove x0, y0, 0  ; set new position as old, for the next timer
Return

!z::ExitApp             ; stop the madness; make the script persistent

La misma lógica se puede utilizar para resolver el problema en cualquier entorno de programación de aplicaciones (C ++, C #, etc.) que puede acceder a Funciones del cursor de Windows .

En Linux, es tan simple como modificar una propiedad para su mouse con xinput , como ben escribió:

xinput set-int-prop "USB Optical Mouse"  "Evdev Axis Inversion" 8 0 1

Deberá sustituir el nombre de su dispositivo ( xinput -list | grep -i 'mouse' ) por "USB Optical Mouse".

Las preguntas adicionales sobre este software deben dirigirse a Desbordamiento de pila , nuestro sitio para programación.

    
respondido por el rluks
4

Esto sería algo bastante difícil de lograr. Su dispositivo tendría que comportarse como un host USB y un periférico USB. Puede haber microcontroladores por ahí que pueden hacer eso, pero puede que tenga que usar dos, uno para ser el host y uno para el esclavo.

Si está sugiriendo algo como usar un mouse serial, entonces su trabajo sería mucho más fácil de lograr. Solo necesitaría un microcontrolador con 2 puertos serie, más dos chips de interfaz serie (como MAX202, o la que sea la versión más reciente).

Una opción aún más fácil podría ser intentar escribir un programa de Windows que haría la inversión.

    
respondido por el Rocketmagnet
1

Puede usar la fuente abierta pila LUFA para realizar proyectos USB HID (dispositivo de interfaz humana) nativos. Adafruit lleva un dev board de código abierto que es compatible con la pila LUFA.

Usar un mouse USB con tu tarjeta personalizada sería complicado. Sin embargo, usar un mouse PS / 2 debería ser mucho más fácil. El protocolo es más simple y probablemente puedas encontrar una biblioteca en algún lugar. Aquí hay una biblioteca de Arduino que puede leer desde un mouse PS / 2 que podría ser de alguna utilidad.

Para el conector PS / 2, SparkFun lleva una panel de ruptura y puerto que debería funcionar.

Es probable que usted también pueda cambiar algún software en la computadora para hacer esto, que sería más barato, pero menos portátil. Una búsqueda rápida en Google muestra que esto es básicamente un comando para una computadora con Linux.

    
respondido por el ben
1

OK, aquí hay una posible solución:

Como dijo Ben, esto sería mucho más fácil si estuvieras usando un mouse PS / 2, porque básicamente son datos en serie simples.

Sin embargo, si realmente necesita que esto sea un dispositivo USB, tal vez quizás use un convertidor USB-PS / 2, y un PS / 2- Convertidor USB, y coloque su dispositivo entre ellos.

Eché un vistazo y no pude encontrar de inmediato un conjunto de chips que haga el trabajo, aunque deben existir. Pero solo puede comprar las unidades :

    
respondido por el Rocketmagnet
1

Otra solución sería instalar el controlador MAF-Soft mouse axis inverter para Windows.

    
respondido por el Rocketmagnet

Lea otras preguntas en las etiquetas