Có thể tạo một thiết bị USB có thể thay đổi dữ liệu chuột khi đang di chuyển không?


7

Tôi có một người bạn đang vật lộn để tìm trình điều khiển / nhà sản xuất chuột hỗ trợ các tùy chọn khác nhau cho chứng khó đọc. Đảo ngược trục X và Y là một tính năng đơn giản mà hầu hết các chương trình và trình điều khiển đều không biết gì.

Tôi nghĩ rằng có thể xây dựng một thiết bị USB nhỏ (tương tự như ổ ngón tay cái hoặc bộ chuyển đổi PS / 2) mà người dùng có thể cắm chuột USB vào và sử dụng một vài công tắc DIP, đảo ngược một hoặc cả hai trục.

Tôi có một sự quen thuộc cơ bản với lập trình (C # / C +) và điện tử, nhưng tôi không chắc có giao thức chuẩn cho chuột USB hay không.

Tôi muốn tránh sử dụng bộ chuyển đổi nối tiếp (mặc dù tôi biết nó có giao thức chuẩn hơn hoặc ít hơn). Có ai đã sử dụng chuột USB với một dự án điện tử tùy chỉnh hoặc có thể giải thích liệu việc xây dựng bộ chuyển đổi USB sang USB để đảo ngược chuyển động có khả thi không?


1
Một cách khác để đảo ngược trục X và Y là chỉ cần lật ngược chuột. Hãy thử nó trong vài phút, thử thách là tốt cho não của bạn.
Kevin Vermeer

5
Cách bắt đầu "dễ dàng" là bắt đầu với chuột USB không quang (= cũ) và giao diện tại các ngắt quay từ bóng. Bạn hoàn toàn bên ngoài bất kỳ giao thức hoặc phần mềm nào và làm việc với môi trường vật lý. Ví dụ, bạn có thể nhận tín hiệu từ một con chuột, xử lý và chèn vào con khác nếu muốn. Khác xa với idal nhưng chịu trách nhiệm cho phép đi rất nhanh.
Russell McMahon

@Kevin Vấn đề với việc đảo ngược chuột về mặt vật lý là nó khiến các nút khác nhau trở nên khó sử dụng hơn (nếu không muốn nói là gần như không thể). Đừng hiểu sai ý tôi, tuy nhiên, người mắc chứng khó đọc đã làm điều đó hết lần này đến lần khác khi không có giải pháp nào khác.
JYelton

Câu trả lời:


2

Trong khi điều này có lẽ là xa giải pháp rẻ nhất hoặc thanh lịch nhất, nó là một trong đó sẽ cung cấp cho bạn sự linh hoạt tuyệt vời.

Một máy tính bảng Arduino có thể trông giống một máy tính chủ Windows như Thiết bị giao diện con người (HID), nói cách khác là chuột. Nó không giới hạn ở chuột; bàn phím và các thiết bị khác là HID là tốt.

Bạn có thể móc chuột nối tiếp trực tiếp vào cổng nối tiếp của Arduino hoặc nếu bạn thích sử dụng chuột USB, bạn có thể kết nối nó với Arduino thông qua tấm chắn máy chủ USB .

Vì bạn có thể lập trình Arduino trong C, bạn có thể dịch bất kỳ loại đầu vào nào từ chuột sang bất kỳ lệnh nào bạn muốn vào PC. Ví dụ, bạn có thể dịch một lần nhấp ba lần của nút chuột phải vào lệnh nhập bàn phím, bầu trời là giới hạn.


Tôi nghĩ rằng đây là cách gần nhất để thực sự có thể thực hiện một giải pháp phần cứng. Các câu trả lời phần mềm rất hữu ích như các đề xuất nối tiếp của PS2, nhưng cuối cùng đây có lẽ là điều tôi sẽ thử khi có bộ dụng cụ tạo mẫu Arduino và điều này nghe có vẻ là một cách tiếp cận tốt.
JYelton

1
Trên thực tế, sử dụng chuột PS / 2 sẽ là hình thức tốt nhất của ý tưởng này, vì đó là tùy chọn duy nhất không yêu cầu giao diện bổ sung (bộ chuyển đổi mức nối tiếp hoặc tấm chắn máy chủ USB) để hỗ trợ. Khi bạn dự tính đặt một lá chắn máy chủ trên Uno, bạn đang sử dụng bảng cơ sở sai cho công việc.
Chris Stratton

6

Một giải pháp phần mềm thì sao?

Trên Windows, bạn có thể chặn các hành động chuột bằng một ứng dụng, có thể đơn giản như tập lệnh AutoHotKey này :

#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

Logic tương tự có thể được sử dụng để giải quyết vấn đề trong bất kỳ môi trường lập trình ứng dụng nào (C ++, C #, v.v.) có thể truy cập các chức năng con trỏ của Windows .

Trên Linux, đơn giản như sửa đổi một thuộc tính cho chuột của bạn xinput, như ben đã viết:

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

Bạn sẽ cần thay thế tên thiết bị của mình ( xinput -list | grep -i 'mouse') cho "Chuột quang USB".

Các câu hỏi khác về phần mềm này nên được chuyển đến Stack Overflow , trang web của chúng tôi để lập trình.


1
Nhưng tôi đồng ý, rằng tôi sẽ là điều tuyệt vời khi có giải pháp thiết bị usb "trong hộp", người đó sẽ chỉ cắm vào cổng USB và đó sẽ là điều đó. Việc cài đặt sw mất một chút thời gian, nhưng việc tạo ra một thiết bị như vậy, lập trình và làm cho nó hoạt động sẽ tốn nhiều thời gian hơn.
rluks

1
Giải pháp phần mềm cho điều này thật đáng buồn là rất ít. Dường như các nhà sản xuất chuột nên bao gồm điều này theo mặc định trong bảng điều khiển thiết bị của họ, để đảm bảo chúng có lợi cho những người khuyết tật càng nhiều càng tốt. Rốt cuộc, nó là một hàm toán học cực kỳ đơn giản.
JYelton

4

Đây sẽ là một điều khá khó khăn để đạt được. Thiết bị của bạn sẽ phải hoạt động như cả máy chủ USB và thiết bị ngoại vi USB. Có thể có các bộ vi điều khiển ngoài kia có thể làm điều đó, nhưng cuối cùng bạn có thể phải sử dụng hai, một để làm máy chủ và một nô lệ.

Nếu bạn đang đề xuất một cái gì đó như sử dụng chuột nối tiếp, thì công việc của bạn sẽ dễ dàng đạt được hơn nhiều. Bạn chỉ cần một bộ vi điều khiển có 2 cổng nối tiếp, cộng với hai chip giao diện nối tiếp (Giống như MAX202, hoặc bất kỳ phiên bản mới hơn).

Một lựa chọn thậm chí dễ dàng hơn có thể là cố gắng viết một chương trình windows sẽ thực hiện đảo ngược.


3
Tôi đồng ý, giải pháp phần mềm sẽ là cách dễ dàng hơn và tốt hơn để đạt được những gì bạn muốn.
Armandas

Tôi rất thích viết một giải pháp phần mềm, nhưng kiến ​​thức về trình điều khiển cấp thấp của tôi còn thiếu. Ngoài ra, tôi không chắc chắn liệu có thể dễ dàng viết một cái gì đó tương thích với các nhãn hiệu thiết bị đầu vào khác nhau hay hoạt động theo cách thân thiện với trình điều khiển của nhà sản xuất bản địa. MAFMouse tồn tại, nhưng dường như đã lỗi thời. Nếu việc tìm kiếm hoặc viết phần mềm dễ dàng hơn, hãy tin tôi, tôi sẽ không nghĩ đến việc thiết kế một thiết bị USB nhỏ. :)
JYelton

Làm thế nào về một thiết bị PS2?
Rocketmagnet

Tôi đã viết một phiên bản phần mềm, vì dường như không có một giải pháp làm việc tốt ở bất cứ đâu. superuser.com/questions/406502/ từ
Đa thức

@Poly Cảm ơn rất nhiều vì nỗ lực của bạn! Tôi sẽ phải thử, mặc dù tôi nghĩ rằng tôi vẫn sẽ thử một giải pháp phần cứng chỉ cho thử thách.
JYelton

1

Bạn có thể sử dụng ngăn xếp LUFA mã nguồn mở để thực hiện các dự án USB HID (thiết bị giao diện người). Adaf Berry mang một bảng dev nguồn mở tương thích với ngăn xếp LUFA.

Để sử dụng chuột USB với bảng tùy chỉnh của bạn sẽ rất khó khăn. Sử dụng chuột PS / 2 sẽ dễ dàng hơn nhiều. Giao thức đơn giản hơn và bạn có thể tìm thấy một thư viện ngoài kia ở đâu đó. Đây là một thư viện Arduino có thể đọc từ chuột PS / 2 có thể được sử dụng.

Đối với đầu nối PS / 2, SparkFun mang bảng đột phácổng nên hoạt động.

Điều lạ là bạn cũng có thể thay đổi một số phần mềm trên máy tính để thực hiện việc này, sẽ rẻ nhất, nhưng ít di động hơn. Một tìm kiếm nhanh trên google cho thấy rằng về cơ bản đây là một lệnh cho máy tính Linux.


1

OK, đây là một giải pháp khả thi:

Như ben đã nói, điều này sẽ dễ dàng hơn nhiều nếu bạn đang sử dụng chuột PS / 2, vì về cơ bản đó là dữ liệu nối tiếp đơn giản.

Tuy nhiên, nếu bạn thực sự cần thiết bị này là thiết bị USB, thì có thể bạn có thể sử dụng bộ chuyển đổi USB-PS / 2 và bộ chuyển đổi PS / 2-USB và đặt thiết bị của bạn vào giữa chúng.

Tôi đã có một cái nhìn xung quanh và không thể ngay lập tức tìm thấy một chipset sẽ thực hiện công việc, mặc dù chúng phải tồn tại. Nhưng bạn chỉ có thể mua các đơn vị :

Bộ chuyển đổi USB PS2


6
Thật không may, những thiết bị trong hình chỉ đơn giản là bộ điều hợp dây cho phép một số con chuột được thiết kế bên trong để xử lý cả giao thức nối tiếp USB và PS / 2 tốc độ thấp được cắm vào cổng khác. Không có mạch hoạt động bên trong.
RBerteig

Điều đó có đúng không? Không có gì ngạc nhiên khi họ không luôn luôn làm việc!
Rocketmagnet

Các thiết bị HID dựa trên bộ chip USB tốc độ thấp Cypress cụ thể có thể phát hiện khi cấp nguồn cho dù dây dữ liệu được kết nối với cổng PS2 hay USB tốc độ thấp. Vì vậy, tất cả những gì được yêu cầu để sử dụng chuột hoặc bàn phím dựa trên các chip trên một trong hai cổng là hình dạng phù hợp của đầu nối, do đó tồn tại những thứ này. Không phải tất cả các thiết bị tốc độ thấp đều được triển khai để hỗ trợ thủ thuật này và tôi tin rằng rất khó để nói USB tốc độ đầy đủ (hoặc tốc độ cao) từ cổng PS2 vì vậy những thiết bị đó thường sẽ không thực hiện thủ thuật này.
RBerteig

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.