2013-02-02 5 views
5

나는 뇌성 마비가있는 장애 아동과 함께 일하고 있습니다. 한 어린이는 정밀한 모터 제어가 제한되어 있으므로 마우스를 조종하기 위해 조이스틱을 사용하고 있으며 트래버스 속도는 매우 낮게 설정되어 있습니다. 그녀가 화면에서 모든 버튼을 클릭 할 수 있기 때문에 이것은 잘 작동하지만, 우리는 더 잘할 수 있다고 생각합니다. 전체 화면을 가로 질러 가고 싶을 때 (약 10 초) 나이가 들었습니다.은 마우스의 속도 설정보다 우선합니다. 내 마우스 속도 알고리즘 만들기

나의 가설은 그녀의 두뇌가 잘되고, 그녀의 모터 컨트롤만이 가난하다는 것이다. 그것이 사실이라면 저속에서 시작했지만 일정한 가속을 경험 한 마우스가 그녀에게 더 좋을 것이라고 생각합니다. 속도가 빨라지고 전체 화면을 탐색 할 때 빠르게 빨라질 것입니다. 이것이 작동하면 많은 수의 장애인을위한 PID 제어 및 속도/가속 설정을 조정하여 액세스 속도를 높이고 학습 및 개발 속도를 높일 수 있습니다.

그러나 나는 이것을 구축하는 최선의 방법을 모릅니다 - 모든 제안, 생각, 링크 및 팁을 환영합니다.

먼저 Processing과 Java를 사용하고 mouseListener와 Robot을 사용하여 커서를 제어 해 보았습니다. 나는 이것이 커서 위치를 읽은 다음 그것에 쓰고 있기 때문에 최선의 방법이라는 것을 확신하지는 않는다. 그래서 나의 최선의 시도는 여전히 커서를 움직이게하고 부드러운 움직임이 아니다. 그것은 Java에서 성취 할 수 있습니까? 어떤 종류의 드라이버를 사용하여 USB에서 마우스 입력을 읽은 다음 화면의 커서를 플로팅 한 것을 내 자신의 것으로 바꿔야합니까?

나는 내가 가져 오려고하는 효과를 설명하기 위해 몇 가지 비디오를 만들었습니다. 그것은 어떤 사용의 경우

현상이 http://www.youtube.com/watch?v=3ZhQCg5DJt8

내가 원하는 새로운 동작 (마우스 가속) http://www.youtube.com/watch?v=JcBK_ZCFGPs

(내 그림의 화살표 키 오프 커서를 운전)의 처리 코드는 내가 사용

현상 데모 :

import java.awt.AWTException; 
import jav 
a.awt.Robot; 

Robot robot; 
int i = 0; 
int j = 0; 

void setup() { 
    setupDotgame(); 
    try { 
    robot = new Robot(); 
    } 
    catch (AWTException e) { 
    e.printStackTrace(); 
    } 
    robot.mouseMove(screenWidth/2, screenHeight/2); 
} 

void draw() { 
    //println(frameCount); 
    robot.mouseMove(screenWidth/2+8*i, screenHeight/2+8*j); 
    drawDotgame(); 
} 

void keyPressed() { 
    if (keyCode == UP) { 
    j--; 
    } 
    else if (keyCode == DOWN) { 
    j++; 
    } 
    else if (keyCode == RIGHT) { 
    i++; 
    } 
    else if (keyCode == LEFT) { 
    i--; 
    } 
} 
를 아래에 복사하는 데모를 만들려면

원하는 동작 :

import java.awt.AWTException; 
import java.awt.Robot; 

Robot robot; 
int i = 0; 
int j = 0; 
int delta = 8; 
int time = 0; 

void setup() { 
    setupDotgame(); 
    try { 
    robot = new Robot(); 
    } 
    catch (AWTException e) { 
    e.printStackTrace(); 
    } 
    robot.mouseMove(screenWidth/2, screenHeight/2); 
} 

void draw() { 



    //println(frameCount); 
    robot.mouseMove(screenWidth/2+i, screenHeight/2+j); 
    drawDotgame(); 

} 

void keyPressed() { 
    if (millis() - time < 90) { 
    delta += 8; 
    } 
    else { delta = 8; } 
    time = millis(); 


    if (keyCode == UP) { 
    j-=delta; 
    } 
    else if (keyCode == DOWN) { 
    j+=delta; 
    } 
    else if (keyCode == RIGHT) { 
    i+=delta; 
    } 
    else if (keyCode == LEFT) { 
    i-=delta; 
    } 
} 

그리고 DotGame 코드 둘 참조 : 사전에

void setupDotgame() { 
    size(1000, 600); 
    background(255); 
    fill(255, 0, 0); 
    noStroke(); 
    smooth(); 
    drawCircle(); 
} 

void drawDotgame() { 
    if (get(mouseX, mouseY) != color(255)) { 
    background(255); 
    drawCircle(); 
    } 
} 

void drawCircle() { 
    int x = round(random(50, width-50)); 
    int y = round(random(50, height-50)); 
    int rad = round(random(20, 80)); 
    ellipse(x, y, rad, rad); 
} 

감사

+0

조이스틱의 버튼을 사용하여 운동 속도를 높이는 것이 좋습니다. 예를 들어, Ctrl + 화살표는 마우스 키를 사용할 때 마우스를 빠르게 움직입니다. 비슷하게 필요한 경우 점프를 할 수 있지만 미세 조정에 필요한 저속은 여전히 ​​있습니다. – cjds

+0

제안 해 주셔서 감사합니다. 문제의 학생은 한 번에 한 가지만 할 수 있습니다. 그래서 나는 그녀가 한 번에 두 가지 일을 할 수 있다는 것에 대해 낙관적이지 않습니다. 내가 말했듯이, 나는 그녀의 두뇌가 괜찮다고 생각하지만, 근육이 많이 퍼져서 일이 정말로 힘들어진다. – samjewell

+1

나는 바보 같이 들리는 것을 원하지 않지만, 당신이 대답하기를 원하는 프로그래밍 질문이거나, 이것을하기위한 가장 좋은 방법에 대한 토론을 원하십니까? 그리고 건설적인 메모에 : "당신의 프로그램"을 위해 이것을 해결하지 말고, 입력 장치를 위해 그것을 해결하십시오. 조이스틱을 얼마나 오래 유지했는지 (arduino 등으로 비교적 간단 함)를 기준으로 초당 델타 수를 늘리고 모든 프로그램에 대해 단일 솔루션을 사용하기 때문에 "java에서 수행하는 방법"문제가 사라집니다. 모든 운영 체제에서. –

답변

0

칼이 제안은, 실제로 마우스를 만드는 최선의 응답 짧은을 믿습니다 이 행동은 당신이 가야 할 곳에 마우스를 상당히 가깝게 갖게 할 일종의 뛰어 넘는 행동입니다. 그리고 거기에서 조이스틱을 사용하십시오.

AutoItv3이라는 프로그램이 이런 종류의 일을 할 수 있다는 것을 알고 있습니다. 특별한 단축키를 인식하도록 설정 한 다음 단축키로 원하는 영역으로 마우스를 움직일 수 있습니다.

여기에 유용한 명령은 HotKeySet, MouseMove 및 Func/EndFunc입니다.